Задать вопрос

Как сделать запись в кнопку файла любого формата в машине состояний?

Пишу запись песни и информации о ней в БД через машину состояний. Пытался реализовать через @dp.message_handler(content_types=['media'], state=FSMAdmin.media) и @dp.message_handler(content_types=['document'], state=FSMAdmin.media) но ничего не сработало, ошибок не выдает, просто не реагирует
Код машины состояний:
#Добавление треков
@dp.message_handler(lambda message: message.text == "Загрузить трек", state=None)
async def cm_start(message: types.Message):
    if message.from_user.id in ADMIN:
        await FSMAdmin.track.set() #Здесь Бот ожидает получить трек
        await message.reply("Отправь трек", reply_markup=cancel_keyboard)
    else:
        await bot.send_message(message.from_user.id, "Не понимаю о чем ты, используй команду /start", reply_markup=start_keyboard)

#Обработка кнопки "назад"
@dp.message_handler(lambda message: message.text == "Назад", state=None)
async def back(message: types.Message):
    if message.from_user.id in ADMIN:
        await bot.send_message(message.from_user.id, "Хорошо", reply_markup=start_keyboard)
    else: 
        await bot.send_message(message.from_user.id, "Не понимаю о чем ты, используй команду /start", reply_markup=start_keyboard)

#Получение трека
@dp.message_handler(content_types=['audio'], state=FSMAdmin.track)
async def load_audio(message: types.Message, state: FSMContext):
    if message.from_user.id in ADMIN:
        async with state.proxy() as data:
            data['audio'] = message.audio.file_id
        await FSMAdmin.next() #Здесь мы переходим к следующему шагу
        await message.reply("Теперь пришли любой файл к треку")

#Получение названия тека и запрос медиа
@dp.message_handler(content_types=['media'], state=FSMAdmin.media)
async def load_media(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['media'] = message.document.file_id
        await FSMAdmin.next()
        await message.reply("Теперь пришли название песни")

#Получение названия и завершение
@dp.message_handler(content_types=['text'], state=FSMAdmin.name)
async def load_name(message: types.Message, state: FSMContext):
    if message.from_user.id in ADMIN:
        async with state.proxy() as data:
            data['name'] = message.text
        await sql_add_command(state)
        await state.finish()
        await message.reply("Готово!", reply_markup=admin_keyboard)
    else:
        await bot.send_message(message.from_user.id, "Не понимаю о чем ты, используй команду /start", reply_markup=start_keyboard)
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@kkid404 Автор вопроса
решил вопрос вот так:
#Получение названия тека и запрос медиа
@dp.message_handler(content_types=['photo', 'video'], state=FSMAdmin.media)
async def load_media(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        try:
            data['media'] = message.photo[0].file_id
        except:
            data['media'] = message.video.file_id
        await FSMAdmin.next()
        await message.reply("Теперь пришли название песни")
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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