Dispatcher и Router
Dispatcher и Router
Dispatcher — маршрутизатор апдейтов. Наследует Router и добавляет метод start_polling.
Регистрация хендлеров
from pykodaribot import Dispatcher, filters
dp = Dispatcher()
@dp.message(filters.command("start"))
async def start(msg):
await msg.answer("Привет!")
@dp.edited_message()
async def on_edit(msg):
await msg.answer(f"Вы отредактировали: {msg.text}")
@dp.callback_query(filters.callback_data("yes"))
async def on_yes(cb):
await cb.answer()
await cb.message.answer("Да!")
@dp.message_reaction(filters.reaction("👍"))
async def on_like(reaction):
print(f"Лайк на {reaction.message_id} от {reaction.user_id}")
Приоритет хендлеров
Хендлеры проверяются в порядке регистрации — первый подходящий получает апдейт. После вызова обработка прекращается.
@dp.message(filters.command("start"))
async def start(msg): ... # вызывается для /start
@dp.message()
async def fallback(msg): ... # вызывается для всех остальных
Router — разделение логики по модулям
from pykodaribot import Router, Dispatcher, filters
shop_router = Router()
admin_router = Router()
@shop_router.message(filters.command("buy"))
async def buy(msg): ...
@admin_router.message(filters.command("ban"))
async def ban(msg): ...
dp = Dispatcher()
dp.include_router(shop_router)
dp.include_router(admin_router)
start_polling
import asyncio
from pykodaribot import Bot, Dispatcher
bot = Bot("bot_ВАШ_ТОКЕН")
dp = Dispatcher()
asyncio.run(dp.start_polling(bot)) # timeout=20 по умолчанию
asyncio.run(dp.start_polling(bot, timeout=10)) # кастомный timeout
При Ctrl+C поллинг корректно завершается и закрывает HTTP-сессию.
1 просмотр