@MAMA200

Aigoram телеграм бот. Пересылает фото тогда, когда не нужно. Как исправить?

UPD:
Подсказали, что тут необходимо использовать Finite State Machine (FSM).
Первый раз о ней слышу (Учусь только).

Доделываю своего бота в телеграме.
При нажатии кнопки, он должен вывести сообщение "XXXXX", после которого пользователь отправляет фото боту, которое он пересылает уже в другой чат. На этом цикл завершается.

Однако, всё работает криво.
см. ниже*

Есть кусок кода:

b1 = InlineKeyboardButton('XXXXXXXXXX', callback_data='adm',)
b2 = InlineKeyboardButton('XXXXXXXXXX', callback_data='art')
Back = InlineKeyboardButton('XXXXXXXX', callback_data='back')

KBB = InlineKeyboardMarkup().add(Back)
KB = InlineKeyboardMarkup().add(b1).add(b2)



@dp.message_handler(commands=['start'])
async def firstmessage(msg: types.Message):
    dir1 = 'XXXXXXXX'
    with open(dir1, 'rb') as pic1:
        await bot.send_photo(msg.from_user.id, pic1, caption=XXXXX, reply_markup=KB)


@dp.callback_query_handler(lambda c: c.data == 'back')
async def back_to_menu(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    dir2 = 'XXXXXXXXXX'
    with open(dir2, 'rb') as pic2:
        await bot.send_photo(callback_query.from_user.id, pic2, caption='XXXXXX', reply_markup=KB)
   


@dp.callback_query_handler(lambda c: c.data == 'adm')
async def admcontact(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, 'XXXXXXXXX', reply_markup=KBB)



@dp.callback_query_handler(lambda c: c.data == 'art')
async def artpred(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, 'XXXXXXX', reply_markup=KBB)
    @dp.message_handler(content_types=["photo"])
    async def replying(pic):
        await bot.send_photo(XXXXXXXXXXX, pic.photo[-1].file_id)
        await bot.send_message(pic.from_user.id, 'XXXXXXXX', reply_markup=KBB)


Если боту скинуть фотографию ДО строчки:
@dp.callback_query_handler(lambda c: c.data == 'art')
async def artpred(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, 'XXXXXXX', reply_markup=KBB)
    @dp.message_handler(content_types=["photo"])
    async def replying(pic):
        await bot.send_photo(XXXXXXXXXXX, pic.photo[-1].file_id)
        await bot.send_message(pic.from_user.id, 'XXXXXXXX', reply_markup=KBB)

То он на неё НЕ реагирует. Так и должно быть.

Если же нажать на кнопку b2 (т.е активировать этот самый кусок), а после перейти обратно к другой клавиатуре, то бот уже будет пересылать отправленное фото тогда, когда не надо.
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы