Skip to content

Обработчики событий

lxstvayne edited this page Nov 20, 2021 · 1 revision

Обработчик событий это функция с декоратором 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?")

Количество пользовательских фильтров неограниченно, их необходимо передавать первым аргументом через запятую.