Фильтры
Фильтры
Фильтры ограничивают, какие апдейты попадают в хендлер. Несколько фильтров объединяются через AND.
from pykodaribot import filters
command
Срабатывает на команды вида /cmd или /cmd@botname.
filters.command("start") # только /start
filters.command("start", "help") # /start или /help
text
Проверяет текст сообщения через regex.
filters.text(r"привет|hello")
@dp.message(filters.text(r"^привет$"))
async def hi(msg):
await msg.answer("Привет!")
callback_data
Точное совпадение callback_data inline-кнопки.
@dp.callback_query(filters.callback_data("yes"))
async def on_yes(cb): ...
callback_data_prefix
callback_data начинается с указанного префикса — удобно для передачи ID через кнопки.
@dp.callback_query(filters.callback_data_prefix("item:"))
async def on_item(cb):
item_id = cb.data.split(":")[1]
await cb.answer()
await cb.message.answer(f"Выбрано: {item_id}")
reaction
Фильтрует события message_reaction. Без аргументов — принимает все реакции.
filters.reaction() # любая реакция
filters.reaction("👍") # только 👍
filters.reaction("👍", "❤️") # 👍 или ❤️
@dp.message_reaction(filters.reaction("🔥"))
async def on_fire(reaction): ...
is_forward
Принимает только пересланные сообщения.
@dp.message(filters.is_forward())
async def on_forward(msg):
await msg.answer(f"Переслано от: {msg.forward_from_user_name}")
has_media
Принимает только сообщения с медиафайлами.
filters.has_media() # любой тип медиа
filters.has_media("image") # только фото
filters.has_media("video", "audio") # видео или аудио
@dp.message(filters.has_media("image"))
async def on_photo(msg):
await msg.answer("Получил фото!")
Доступные типы: "image", "video", "audio", "file"
Комбинирование
@dp.message(filters.command("buy"), filters.text("premium"))
async def buy_premium(msg): ...
Свой фильтр
from pykodaribot.filters import Filter
class OnlyDirectFilter(Filter):
async def __call__(self, msg) -> bool:
return msg.chat.type == "direct"
@dp.message(OnlyDirectFilter())
async def private_only(msg): ...
1 просмотр