🌙

Фильтры

Фильтры

Фильтр ограничивает, какие апдейты попадут в хендлер. Несколько фильтров объединяются по «И».

from pykodaribot import filters

command

Реагирует на /cmd и /cmd@botname.

filters.command("start")
filters.command("start", "help")

text

Проверяет текст регулярным выражением (re.search).

@dp.message(filters.text(r"^привет$"))
async def hi(msg):
    await msg.answer("Привет!")

callback_data

Точное совпадение данных кнопки.

@dp.callback_query(filters.callback_data("yes"))
async def on_yes(cb): ...

callback_data_prefix

Совпадение по началу строки — так удобно передавать идентификаторы.

@dp.callback_query(filters.callback_data_prefix("item:"))
async def on_item(cb):
    item_id = cb.data.split(":")[1]

has_media

Только сообщения с вложением.

filters.has_media()
filters.has_media("image")
filters.has_media("video", "audio")

Типы: image, video, audio, file.

is_forward

Только пересланные сообщения — определяется по заполненному forward_from_user_name.

@dp.message(filters.is_forward())
async def on_forward(msg):
    await msg.answer(f"Переслано от: {msg.forward_from_user_name}")

reaction

Фильтр событий реакции. Сервер апдейты message_reaction не присылает, поэтому хендлер не сработает.

Комбинирование

@dp.message(filters.command("buy"), filters.text("premium"))
async def buy_premium(msg): ...

Свой фильтр

from pykodaribot.filters import Filter

class OnlyDirect(Filter):
    async def __call__(self, msg) -> bool:
        return msg.chat.type == "direct"

@dp.message(OnlyDirect())
async def private_only(msg): ...

Фильтр — любой объект с async-методом __call__, возвращающим bool.

35 просмотров