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

Обработчик событий это функция с декоратором event_handler(). Он определяет фильтры для обрабатываемых событий.

@dp.event_handler(event_type, *filters, **bound_filters)
def handler(event):
    ...

Для удобной работы с сообщениями, существует декоратор message_handler(*filters, **bound_filters), в который по стандарту передаётся types.EventType.MESSAGE_NEW.

Связанные фильтры устанавливаются следующим образом: name=argument

Доступные связанные фильтры#

Название

Аргументы

Условие

event_type

types.EventType

True, если типы событий совпадают.

text

Строка

True, если текст сообщения совпадает с аргументом text

regexp

Регулярное выражение или подстрока

True, если подстрока находится в сообщении или строка проходит проверку на наличие шаблона регулярного выражения (Подробнее Python Regular Expressions).

commands

Список строк

True, если текст сообщения совпадает с одной из команд

frm

От кого обрабатывать события (user, chat, group) по умолчанию user

True, если поле from_(user, chat, group) соответственно равно аргументу frm

state

Состояние автомата

True, если текущее состояние равно состаянию аргумента state

Чтобы начать обрабатывать события, необходимо запустить start_polling(). Для удобства разработки можно передать параметр debug=True. Тогда все происходящие события будут красиво выводиться в консоль.

Собственные фильтры#

Чтобы определить собственный фильтр, необходимо написать класс и переопределить функцию check.

from vk_maria.dispatcher.filters import AbstractFilter

class AdminFilter(AbstractFilter):
    def check(self, event: types.Message):
        return event.message.peer_id == 1234567890

И передать его в обработчик события:

@dp.message_handler(AdminFilter, commands=['/start'])
def cmd_start(event: types.Message):
    event.reply("Hi there! What's your name?")

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