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

Мой бот не хочет ждать нажатия инлайн клавиши aiogram.Что делать?

from aiogram import F, Router, types
from aiogram.filters import Command
from aiogram.types import Message, CallbackQuery
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext
from handlers.handler import starting, help_cmd, start_game
from main import bot

# Определяем состояния
class Form(StatesGroup):
    waiting_for_button = State()

count = 0

router = Router(name=__name__)

@router.message(Command("start"))
async def handle_start_command(message: Message):
    await starting(message)

@router.message(Command("help"))
async def handle_help_command(message: Message):
    await help_cmd(message)

@router.message(Command('game'))
async def handle_start_game_command(message: Message, state: FSMContext):
    await start_game(message)
    await message.answer("Нажмите на кнопку:", reply_markup=await get_keyboard())
    await state.set_state(Form.waiting_for_button)  # Устанавливаем состояние ожидания

async def get_keyboard():
    keyboard = types.InlineKeyboardMarkup()
    button1 = types.InlineKeyboardButton(text="Ответ 1", callback_data='button_callback_1')
    button2 = types.InlineKeyboardButton(text="Ответ 2", callback_data='button_callback_2')
    keyboard.add(button1, button2)
    return keyboard

@router.callback_query(F.data == 'button_callback_1')
async def handle_button_1(callback: CallbackQuery, state: FSMContext):
    global count
    await callback.answer('Вы выбрали Ответ 1!')
    count += 1
    await state.clear()  # Сбрасываем состояние
    if count == 9:
        print('its over')

@router.callback_query(F.data == 'button_callback_2')
async def handle_button_2(callback: CallbackQuery, state: FSMContext):
    global count
    await callback.answer('Вы выбрали Ответ 2!')
    count += 1
    await state.clear()  # Сбрасываем состояние
    if count == 9:
        print('its over')

@router.callback_query(F.data == '2')
async def handle_answer_command(callback: CallbackQuery, state: FSMContext):
    await callback.answer('Все неверно! Вы проходите дальше!')

# Обработчик для состояния ожидания нажатия кнопки
@router.callback_query(F.data.in_(['button_callback_1', 'button_callback_2']))
async def handle_button(callback: CallbackQuery, state: FSMContext):
    if await state.get_state() == Form.waiting_for_button.state:
        if callback.data == 'button_callback_1':
            await handle_button_1(callback, state)
        elif callback.data == 'button_callback_2':
            await handle_button_2(callback, state)
    else:
        await callback.answer('Сейчас не время для нажатия кнопки!')


После того, как я запускаю и проверяю его по команде, он как не ждал, так и не ждет.

Вот роутеры:
from aiogram import F, Router, types
from aiogram.filters import Command
from aiogram.types import Message, CallbackQuery
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext
from handlers.handler import starting, help_cmd, start_game
from main import bot

# Определяем состояния
class Form(StatesGroup):
    waiting_for_button = State()

count = 0

router = Router(name=__name__)

@router.message(Command("start"))
async def handle_start_command(message: Message):
    await starting(message)

@router.message(Command("help"))
async def handle_help_command(message: Message):
    await help_cmd(message)

@router.message(Command('game'))
async def handle_start_game_command(message: Message, state: FSMContext):
    await start_game(message)
    await message.answer("Нажмите на кнопку:", reply_markup=await get_keyboard())
    await state.set_state(Form.waiting_for_button)  # Устанавливаем состояние ожидания

async def get_keyboard():
    keyboard = types.InlineKeyboardMarkup()
    button1 = types.InlineKeyboardButton(text="Ответ 1", callback_data='button_callback_1')
    button2 = types.InlineKeyboardButton(text="Ответ 2", callback_data='button_callback_2')
    keyboard.add(button1, button2)
    return keyboard

@router.callback_query(F.data == 'button_callback_1')
async def handle_button_1(callback: CallbackQuery, state: FSMContext):
    global count
    await callback.answer('Вы выбрали Ответ 1!')
    count += 1
    await state.clear()  # Сбрасываем состояние
    if count == 9:
        print('its over')

@router.callback_query(F.data == 'button_callback_2')
async def handle_button_2(callback: CallbackQuery, state: FSMContext):
    global count
    await callback.answer('Вы выбрали Ответ 2!')
    count += 1
    await state.clear()  # Сбрасываем состояние
    if count == 9:
        print('its over')

@router.callback_query(F.data == '2')
async def handle_answer_command(callback: CallbackQuery, state: FSMContext):
    await callback.answer('Все неверно! Вы проходите дальше!')

# Обработчик для состояния ожидания нажатия кнопки
@router.callback_query(F.data.in_(['button_callback_1', 'button_callback_2']))
async def handle_button(callback: CallbackQuery, state: FSMContext):
    if await state.get_state() == Form.waiting_for_button.state:
        if callback.data == 'button_callback_1':
            await handle_button_1(callback, state)
        elif callback.data == 'button_callback_2':
            await handle_button_2(callback, state)
    else:
        await callback.answer('Сейчас не время для нажатия кнопки!')
  • Вопрос задан
  • 36 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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