Как правильно использовать dp.register_callback_query_handler?

Рейтинг: 0Ответов: 1Опубликовано: 25.05.2023

В общем, проблема в том, что не срабатывает dp.register_callback_query_handler

Код bot/handlers/users/main.py:

from bot.handlers.user.start import test


def register_user_handlers(dp: Dispatcher):
       dp.register_callback_query_handler(test, Text('test_button'))

Код bot/handlers/users/start.py

async def test(call: CallbackQuery):
       await call.message.edit_text('привет')
       print("Кнопка была нажата")

Клавиатура:

payment_methods_kb = InlineKeyboardMarkup(
    inline_keyboard=[
        [
            InlineKeyboardButton(
                text='Тест',
                callback_data='test_button'
            )
        ],
        [
            InlineKeyboardButton(
                text='⬅ Назад',
                callback_data='back_to_start'
            )
        ]
    ]
)

Как правильно регистрировать хендлер?

Ответы

▲ 0

Покажу как это делаю я. Может вам подойдет и будет полезным.

Файл command.py - где я буду хранить функции команд.

from aiogram import types, Dispatcher

#Функция для команды старт(start)
async def cmd_start(message:types.Message):
    await message.answer(text)

#Регистрация хендлера для дальнейших действий
def register_command_handler(dp:Dispatcher):
    dp.register_message_handler(cmd_start, commands="start") 

Файл main.py где я буду уже запускать бота и запускать функцию регистрации хендлеров.

import asyncio
from aiogram import Bot, Dispatcher, types
from config import token

from aiogram.types import BotCommand #Решил оставить, мб вам это будет полезно, самостоятельно создать команды меню.
async def set_commands(bot: Bot):
    commands = [
        BotCommand(command="/start", description="Запустить бота"),   
        BotCommand(command="/link", description="Ссылки на наши ресурсы"),
        BotCommand(command="/menu", description="Меню")   
    ]
    await bot.set_my_commands(commands)

from command import register_command_handler #Импортирую собственно из файла command функцию register_command_handler

async def main():
    bot = Bot(token=token, parse_mode=types.ParseMode.HTML)
    dp = Dispatcher(bot)

    # Регистрация хэндлеров
    register_command_handler(dp)

    await set_commands(bot)
    await dp.start_polling()


if __name__ ==  '__main__':
    asyncio.run(main())

FSM Groosha - это где я первый раз "позаимствовал" этот способ, так сказать. Статья так же прольет свет на работу с конечными автоматами.