Здравствуйте! Уже долгое время пытаюсь с этим разобраться, но нагуглить ответ на свой вопрос так и не удалось. Понимаю, что без помощи знающего человека не справлюсь..
Я пишу бота, который при получении ссылки из ютюб выводит название видео и две инлайн кнопки: "720р" и "Music", а по нажатию скачивает видео в качестве 720р, или музыку.
За обработку ссылки, скачивание и загрузку видео в бот отвечает данная функция:
async def download_youtube_video(url, message, bot):
Я могу вывести текст по нажатию на инлайн кнопку, но как через инлайн кнопку обратиться
к функции с параметрами не знаю.
Знаю что этот вариант не подходит:
@dp.callback_query_handler(lambda c: c.data == 'video')
async def send_video(callback_query: types.CallbackQuery):
await callback_query.message.answer('Видео вроде как должно было начать загружаться, но..')
Вот полный код:
import os
from pytube import YouTube
from aiogram import *
from config import token
from aiogram.types import ReplyKeyboardMarkup, InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.utils.callback_data import CallbackData
bot = Bot(token)
dp = Dispatcher(bot)
def create_keyboard():
keyboard = InlineKeyboardMarkup()
keyboard.add(InlineKeyboardButton(text="720p", callback_data="video"))
keyboard.add(InlineKeyboardButton(text="Music", callback_data="music"))
return keyboard
@dp.message_handler()
async def text_message(message:types.Message):
chat_id = message.chat.id
url = message.text
yt = YouTube(url)
if message.text.startswith("https://www.youtube.com"):
await bot.send_message(chat_id, f"{yt.title}",
reply_markup=create_keyboard(),
parse_mode="Markdown")
@dp.message_handler(commands=["start"])
async def start_message(message:types.Message):
chat_id = message.chat.id
await bot.send_message(chat_id, "Привет, чтобы скачать видео отправь мне ссылку на видео с YouTube!")
async def download_youtube_video(url, message, bot):
try:
yt = YouTube(url)
stream = yt.streams.filter(progressive=True, file_extension="mp4")
stream.get_highest_resolution().download(f"{message.chat.id}", f"{message.chat.id}_{yt.title}")
with open(f"{message.chat.id}/{message.chat.id}_{yt.title}", "rb") as video:
await bot.send_video(message.chat.id, video, parse_mode="Markdown")
os.remove(f"{message.chat.id}/{message.chat.id}_{yt.title}")
except:
await bot.send_message(message.chat.id, "Не удалось")
@dp.callback_query_handler(lambda c: c.data == 'video')
async def send_video(callback_query: types.CallbackQuery):
await callback_query.message.answer('Видео вроде как должно было начать загружаться, но..')
if __name__ == "__main__":
executor.start_polling(dp)