@Velays

Kак обнаружить кнопку Inline во время state aiogram?

есть код:
from aiogram import Bot, Dispatcher, executor, types
from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.dispatcher.filters.state import State, StatesGroup

storage = MemoryStorage()
bot = Bot(token=config.bot_token)
dp = Dispatcher(bot, storage=storage)

class hi(StatesGroup):
    hello = State()

@dp.message_handler(commands='start')
async def start(message: types.Message):

    repl = InlineKeyboardMarkup(row_width=1).add(InlineKeyboardButton(text='Cancel', callback_data='Cancel'))
    await bot.send_message(message.from_user.id, 'how are you?', reply_markup=repl)
    await hi.hello.set()


@dp.message_handler(state=hi.hello)
async def efe(message: types.Message, state: FSMContext):
    await bot.send_message(message.from_user.id, f'me too {message.text}')
    await state.finish()

@dp.callback_query_handler(text='Cancel')
async def ponn(message: types.CallbackQuery, state: FSMContext):
    await state.finish()
    await bot.send_message(message.from_user.id, f'Canceled')


код должен по команде старт ждать от пользователя текст, и потом выводить его. но если во время когда бот ждал текст, будет нажата инлайн кнопка то бот прекратит ждать текст и выведет сообщение что он перестал ждать текст. Проблема в том что бот просто не находит калбэк хандлер инлайн кнопки. как это можно исправить?
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 1
Во первых хотя бы прочитать документацию и сократить:
await bot.send_message(message.from_user.id, 'how are you?', reply_markup=repl)

на это

await message.answer('how are you?', reply_markup=repl)

Во вторых подумать, если ты при /start ставишь стейт, то почему колбэк без стейта должен отрабатывать? Ты или добавь state='*' тогда в хендлер, или закрой ide и больше не открывай.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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