Фильтры
Фильтры
Фильтр ограничивает, какие апдейты попадут в хендлер. Несколько фильтров объединяются по «И».
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 просмотров