Задать вопрос
ittadoru
@ittadoru
Новичок Python

Не могу вызвать callback функцию aiogram, что делать?

Хочу создать бота на aiogram для скачивания видео с ютуб, но что очень важно, надо сделать так, чтоб после отправки ссылки от пользователя, бот спрашивал, скачать ему видео, аудио из видео, или всё вместе, но как только дохожу до момента вопроса, почему то не работают мои функции для скачки видео, хотя если убрать вопрос, и сделать так чтоб они оба вызывались вместо вопроса сразу, как только будет отправлена ссылка, всё работает идеально, но именно так поставить вопрос, чтоб после нажатия на инлайн кнопку он отправлял то что нужно не получается, хотя это важное условие

вот отрывок кода, куда маркап я впихнул основного файла
@dp.message_handler()
async def method(message: types.Message):
    try:
        if message.text.startswith == 'https://www.youtube.com/' or 'https://youtu.be/':
            chat_id = message.chat.id
            url = message.text
            yt = YouTube(url)
            option_text1 = f'*Начинаю загрузку видео:* *{yt.title} **c канала: *[{yt.author}]({yt.channel_url})'
            option_text2 = f'*Ещё чуть чуть, и я скину вам видео:* *{yt.title} **c канала: *[{yt.author}]({yt.channel_url})'
            option_text3 = f'*Идёт скачивание видео:* *{yt.title} **c канала: *[{yt.author}]({yt.channel_url})'
            option_text4 = f'*Подождите немного, скачиваю видео:* *{yt.title} **c канала: *[{yt.author}]({yt.channel_url})'
            option_text5 = f'*Почти готово, погодите минутку, скачиваю видео:* *{yt.title} **c канала: *[{yt.author}]({yt.channel_url})'
            option_text6 = f'*Секунду, почти скачал видео:* *{yt.title} **c канала: *[{yt.author}]({yt.channel_url})'
            random_chat_video_dowload = [
                option_text1, option_text2, option_text3, option_text4, option_text5, option_text6]
            await bot.send_message(chat_id, text=random.choice(random_chat_video_dowload), parse_mode='Markdown')
            await message.answer(text=f'Выберите то, что хотите скачать', reply_markup=video_or_audio)
    except:
        await message.answer(text=f'Единственное что умеет этот бот, это скачивать видео из YouTube, что бы скачать видео, отправьте ссылку на него. \n'
                             f'Обычные сообщения не принимаются')


@dp.callback_query_handler()
async def callback_download(callback: types.CallbackQuery):
    if callback.data == 'btn_audio':
        url = types.Message.text
        await download_youtube_audio(url, types.Message, bot)
        await bot.send_message(types.Message.chat.id, text=f'*Ваш аудио звук готов к скачиванию.\nСпасибо, что выбираете нас*', parse_mode='Markdown')
    elif callback.data == 'btn_video':
        await bot.send_message(types.Message.chat.id, text=f'*Загрузка видео может занять более минуты, пожалуйста подождите*', parse_mode='Markdown')
        url = types.Message.text
        await download_youtube_video(url, types.Message, bot)
        await bot.send_message(types.Message.chat.id, text=f'*Ваше видео готово к скачиванию.\nСпасибо, что выбираете нас*', parse_mode='Markdown')

    elif callback.data == 'btn_all':
        url = types.Message.text
        await bot.send_message(types.Message.chat.id, text=f'*Загрузка видео может занять более минуты, пожалуйста подождите*', parse_mode='Markdown')
        await download_youtube_audio(url, types.Message, bot)
        await download_youtube_video(url, types.Message, bot)
        await bot.send_message(types.Message.chat.id, text=f'*Ваше видео готово к скачиванию.\nСпасибо, что выбираете нас*', parse_mode='Markdown')

if __name__ == '__main__':
    executor.start_polling(dp)


а вот код маркапов
btn_video = InlineKeyboardButton(
    text='Видео', callback_data='video')
btn_audio = InlineKeyboardButton(
    text='Аудио', callback_data='audio')
btn_all = InlineKeyboardButton(
    text='Скачать всё', callback_data='all')
video_or_audio = InlineKeyboardMarkup(row_width=2)

video_or_audio.add(btn_audio, btn_video, btn_all)
  • Вопрос задан
  • 608 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Wispik
@Wispik
Потому что в кнопке:
callback_data='video'
А проверяешь ты почему-то так:
elif callback.data == 'btn_video':
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы