Почему Inline Кнопка не функционирует или не выполняет необходимые действия?

Когда я редактировал код, который не связан с административной панелью, обнаружил, что обработчик `callback` перестал обрабатывать инлайн-кнопку. Вот часть кода, отвечающая за это:

```python
@dp.message_handler(commands=['start'])
async def user_question_1(call: types.CallbackQuery, callback_data=dict):
    if call.from_user.id != admin_id:
        await bot.send_message(call.from_user.id, f"Ответьте на несколько вопросов:\n1) <b>{question_1}</b>", parse_mode=types.ParseMode.HTML) # Приветственное сообщение
        await AnswerUser.answer1.set()
        
    else:
         await bot.send_message(call.from_user.id, 'Добро пожаловать в Админ-Панель! Выберите действие на клавиатуре', reply_markup=access)

@dp.callback_query_handler(text_contains='adduser')
async def add_user_id(call: types.CallbackQuery):
    await bot.send_message(call.from_user.id, 'Введите айди пользователя для доступа к боту и бд')
    await AnketaUser.next()
```

Буду благодарен, если вы сможете помочь решить эту проблему.
  • 6 октября 2023 г. 3:27
Ответы на вопрос 1
Проблема возникает потому, что ваш обработчик команды `/start` принимает `call` в качестве аргумента, который является объектом типа `CallbackQuery`. Однако, в обычном случае, команда `/start` вызывает обработчик `MessageHandler`, а не `CallbackQueryHandler`.

Чтобы исправить проблему, вы должны изменить аргумент `call` на `message` в обработчике команды `/start`. Также, вы можете изменить декоратор на `@dp.message_handler` для этого обработчика.

Вот исправленный код:

```python
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    if message.from_user.id != admin_id:
        await bot.send_message(message.from_user.id, f"Ответьте на несколько вопросов:\n1) <b>{question_1}</b>", parse_mode=types.ParseMode.HTML) # Приветственное сообщение
        await AnswerUser.answer1.set()
        
    else:
        await bot.send_message(message.from_user.id, 'Добро пожаловать в Админ-Панель! Выберите действие на клавиатуре', reply_markup=access)

@dp.callback_query_handler(text_contains='adduser')
async def add_user_id(call: types.CallbackQuery):
    await bot.send_message(call.from_user.id, 'Введите айди пользователя для доступа к боту и бд')
    await AnketaUser.next()
```

После этих изменений, обработчик команды `/start` должен правильно выполняться и инлайн-кнопки должны работать как ожидается.
Похожие вопросы