Подскажите как привязать код python к telegram bot (aiogram)
Здорова всем. Пишу telegram_bot который бы скачивал mp3 с YouTube и отправлял пользователю аудио в дальнейшем хочу написать будильник, чтобы пользователь сам решал под какую музыку вставать.
Код для скачивания с YouTube , он работает замечательно проблема в том, что не могу понять как правильно его 'подвязать' к aiogram_bot, при добавлении этого куска кода к aiogram_bot скачивания не происходит.
from __future__ import unicode_literals
import youtube_dl
audio = str(input('link url '))
ydl_opts = {'postprocessors': [{'key': 'FFmpegExtractAudio','preferredcodec': 'mp3','preferredquality': '192'}]}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([audio])
Сам телеграм бот.
from __future__ import unicode_literals
import youtube_dl
import keybords as kb
import logging
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from config import *
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import Message
from aiogram.dispatcher.filters import Command
import os
import nest_asyncio
logging.basicConfig(level=logging.INFO)
bot = Bot(token = API_TOKEN_Music_bot )
dp = Dispatcher(bot, storage=MemoryStorage())
nest_asyncio.apply()
# аналог input() in the python
class Form(StatesGroup):
music_link = State()
@dp.message_handler(commands=['music'])
async def alarm(message: types.Message):
await bot.send_message(message.from_user.id, "Plsm,input link for downloads mmusic")
await Form.music_link.set()
@dp.message_handler(state=Form.music_link)
async def answerDay(message: types.Message, state: FSMContext):
answer_mmusic_link = message.text
await state.update_data(answer_mmusic_link1 = answer_mmusic_link )
answer_mmusic_link1 = data.get("answer_music_link1")
ydl_opts = {'postprocessors': [{'key': 'FFmpegExtractAudio','preferredcodec': 'mp3','preferredquality': '192'}]}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
audio = ydl.download([answer_mmusic_link1])
await bot.download_file('/home/dus/Desktop/musica', "answer_mmusic_link1")
await state.finish()
if __name__ =='__main__':
executor.start_polling(dp,skip_updates=(True))
Ответы (1 шт):
Автор решения: Zhymabek Roman
→ Ссылка
Не используйте библиотеку youtube_dl, она является синхронный и будет тормозить работы всего бота. Или переписывайте на асинк его или же найдите другую библиотеку асинхронную.