@GenKat

Как решить проблему с состояниями в aiogram?

Проблема заключается в том, что обработчики не регистрируют поступающие фото и видео в состояниях add_photographi и add_video (Если убрать content type, то он не регистрирует обычные сообщение). Хотя состояние kill отрабатывает на отлично

@dp.message_handler(state=Create.create_spam)
async def spam(message: types.Message, state: FSMContext):
    async with state.proxy() as data_storage:
        if message.text == "Добавить фото" or message.text == "Изменить фото":
            data_storage["type"] = "photo"
            await bot.send_message(message.chat.id, "Отправьте фото для рассылки", reply_markup=ReplyKeyboardRemove())
            await Create.add_photographi.set()
        elif message.text == "Добавить видео" or message.text == "Изменить видео":
            data_storage["type"] = "video"
            await bot.send_message(message.chat.id, "Отправьте видео для рассылки", reply_markup=ReplyKeyboardRemove())
            await Create.add_video.set()
        elif message.text == "Добавить текст" or message.text == "Изменить текст":
            await bot.send_message(message.chat.id, "Отправьте текст для рассылки", reply_markup=ReplyKeyboardRemove())
            await Create.add_text.set()
        elif message.text == "Добавить кнопку" or message.text == "Изменить кнопку":
            await bot.send_message(message.chat.id, "Отправьте текст для кнопки", reply_markup=ReplyKeyboardRemove())
            await Create.add_button_text.set()
        elif message.text == "Отправить":
            users = Database.get_user()
            for user in users:
                await generate_send_mail(user, state)
            await bot.send_message(message.chat.id, "Успешно отправлено!", reply_markup=ReplyKeyboardRemove())
            await state.finish()
        elif message.text == "Сбросить настройки":
            await bot.send_message(message.chat.id, "Вы уверены, что хотите полностью сбросить", reply_markup=yes_no_markup)
            await Create.kill.set()
        else:
            configurate_markup = await generate_markup(state)
            await asyncio.sleep(3)
            await bot.send_message(message.chat.id, "Нет такого выбора", reply_markup=configurate_markup)
            await Create.create_spam.set()


@dp.message_handler(content_types=ContentTypes.PHOTO, state=Create.add_photographi)
async def phot(message: types.Message, state: FSMContext):
    async with state.proxy() as data_storage:
        data_storage["photo"] = message.photo[-1].file_id
        await generate_send_mail(message.chat.id, state)
        configurate_markup = await generate_markup(state)
        await asyncio.sleep(3)
        await bot.send_message(message.chat.id, "Что ещё мы добавим?", reply_markup=configurate_markup)
        await Create.create_spam.set()


@dp.message_handler(content_types=ContentTypes.VIDEO, state=Create.add_video)
async def video(message: types.Message, state: FSMContext):
    async with state.proxy() as data_storage:
        data_storage["photo"] = message.video.file_id
        await generate_send_mail(message.chat.id, state)
        configurate_markup = await generate_markup(state)
        await asyncio.sleep(3)
        await bot.send_message(message.chat.id, "Что ещё мы добавим?", reply_markup=configurate_markup)
        await Create.create_spam.set()

@dp.message_handler(state=Create.kill)
async def kill(message: types.Message, state: FSMContext):
    async with state.proxy() as data_storage:
        if message.text == "Да":
            elements = ["text", "photo", "video", "type", "markup", "button_text"]
            for element in elements:
                if element in data_storage:
                    data_storage.pop(element)
            await bot.send_message(message.chat.id, 'Данные очищены!\nЕсли вы хотети создать пост, введите "/get"', reply_markup=ReplyKeyboardRemove())
            await state.finish()
        elif message.text == "Нет":
            await generate_send_mail(message.chat.id, state)
            configurate_markup = await generate_markup(state)
            await asyncio.sleep(3)
            await bot.send_message(message.chat.id, "Что ещё мы добавим?", reply_markup=configurate_markup)
            await Create.create_spam.set()
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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