63 lines
2.0 KiB
Markdown
63 lines
2.0 KiB
Markdown
Для регистрации хендлера в 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())
|
||
``` |