Как правильно использовать dp.register_callback_query_handler?
В общем, проблема в том, что не срабатывает 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'
)
]
]
)
Как правильно регистрировать хендлер?
Ответы (1 шт):
Автор решения: 1001001
→ Ссылка
Покажу как это делаю я. Может вам подойдет и будет полезным.
Файл 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 - это где я первый раз "позаимствовал" этот способ, так сказать. Статья так же прольет свет на работу с конечными автоматами.