-
-
Notifications
You must be signed in to change notification settings - Fork 2
Обработчики событий
Обработчик событий это функция с декоратором event_handler()
. Он определяет фильтры для обрабатываемых событий.
@lp.event_handler(event_type, **filters)
def do_smth(event):
...
Для удобной работы с сообщениями, существует декоратор message_handler(**filters)
, в который по стандарту передаётся EventType.MESSAGE_NEW.
Фильтр объявляется следующим образом name=argument
.
Доступные фильтры для message_handler
:
Название | Аргументы | Условие |
---|---|---|
event_type | Тип события из EventType . |
True , если типы событий совпадают. |
regexp | Регулярное выражение или подстрока. |
True , если подстрока находится в сообщении или строка проходит проверку на наличие шаблона регулярного выражения (Подробнее Python Regular Expressions). |
commands | Список с командами. |
True , если текст сообщения совпадает с одной из команд. |
frm | От кого обрабатывать события ('user' , 'chat' , 'group' ) по умолчанию 'user' . |
True , если поле from_(user , chat , group ) соответсвенно True . |
Чтобы начать обрабатывать события, необходимо запустить polling()
. Для удобства разработки можно передать параметр debug=True
. Тогда все происходящие события будут красиво выводиться в консоль.
Чтобы определить собственный фильтр, необходимо написать класс и переопределить функцию check
.
from vk_maria.longpoll.filters import AbstractFilter
class AdminFilter(AbstractFilter):
def check(self, event: types.Message):
return event.message.peer_id == 1234567890
И передать его в обработчик события:
@lp.message_handler(AdminFilter, commands=['/start'])
def cmd_start(event: types.Message):
event.reply("Hi there! What's your name?")
Количество пользовательских фильтров неограниченно, их необходимо передавать первым аргументом через запятую.