maxapi/wiki/handlers.md

63 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Для регистрации хендлера в maxapi используется объект `Dispatcher` или `Router` и декоратор с указанием типа события и фильтра.
## Общий синтаксис
```python
@dp.<тип_события>(<фильтры>)
async def <имя_функции>(event: <тип_события>):
...
```
* `dp` — экземпляр `Dispatcher`
* `<тип_события>` — тип события (например, `message_created`)
* `<фильтр>` — условие `MagicFilter`, по которому срабатывает хендлер (например, наличие текста в сообщении)
* `event` — объект события с данными (например, `MessageCreated`)
## Пример
```python
@dp.message_created(F.message.body.text)
async def echo(event: MessageCreated):
await event.message.answer(f"Повторяю за вами: {event.message.body.text}")
```
* `@dp.message_created` — хендлер на событие создания сообщения
* `F.message.body.text` — фильтр: сработает только если в сообщении есть текст
* `echo` — асинхронная функция-обработчик, которая принимает событие `MessageCreated`
* В теле функции вызывается метод `answer` для отправки ответа с повтором текста
## Полный код
```python
import asyncio
import logging
from maxapi import Bot, Dispatcher
from maxapi.filters import F
from maxapi.types import MessageCreated
logging.basicConfig(level=logging.INFO)
bot = Bot(ут_ваш_токен')
dp = Dispatcher()
@dp.message_created(F.message.body.text)
async def echo(event: MessageCreated):
await event.message.answer(f"Повторяю за вами: {event.message.body.text}")
async def main():
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
```