Size: a a a

2017 August 04

OA

Oleg A. 🇷🇺 in aiogram [ru]
оке, спасибо 🙂
источник

AR

Alex RootJunior in aiogram [ru]
в aiogram.dispatcher.filters есть несколько стандартных фильтров:
1) CommandsFilter - для обработки команд, ContentFilter(['start', 'about'])
2) RegexpFilter
3) ContentTypeFilter
4) CancelFilter - все сообщения у которых message.text in ['/cancel', 'cancel', 'cancel.']
5) StateFilter - (добавлен в 0.3.4) - фильтр состояний
6) StatesListFilter - аналог StateFilter, но можно указывать список состояний.
источник

AR

Alex RootJunior in aiogram [ru]
фильтром может быть любой callable объект
источник

AR

Alex RootJunior in aiogram [ru]
то есть например из моего последнего скриншота аналогом вот этому декоратору:
@dp.message_handler(commands=['test'], func=check_admin)
будет dp.message_handlers.register(cmd_test, [CommandsFilter(['test']), check_admin, ContentTypeFilter(ContentType.TEXT)])

тут присутствует ContentTypeFilter потому что декоратором по умолчанию добавляется этот фильтр.
источник

AR

Alex RootJunior in aiogram [ru]
в 0.3.4 еще по умолчанию добавляется фильтр StateFilter(dp, None)
источник

AR

Alex RootJunior in aiogram [ru]
Oleg A. 🇷🇺
а дальше у тебя фоном считает

ban_before = datetime.now() + how_long

и в телегу улетает: int(ban_before.timestamp())
добавляю возможнсть отправлять как timedelta, так и datetime.
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
Смотри, а если мне фильтр не нужен, а нужен только true резьтат функции?
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
Или, как вариант, кастомный фильтр запилить
источник

AR

Alex RootJunior in aiogram [ru]
Oleg A. 🇷🇺
Или, как вариант, кастомный фильтр запилить
кастомным фильтром может быть любой callable объект (будь то функция, корутина или экземпляр класса, у которого есть метод __call__)
как вариант
источник

AR

Alex RootJunior in aiogram [ru]
Oleg A. 🇷🇺
Смотри, а если мне фильтр не нужен, а нужен только true резьтат функции?
если фильтры совсем не нужны, можно не передавать этот параметр.
источник

AR

Alex RootJunior in aiogram [ru]
и если нужно использовать кастомный фильтр в декораторе, есть 2 способа это сделать:
1) параметром custom_filters передать список фильтров
2) передать именованый параметр с именем отличным от 'func', 'commands', 'regexp', 'custom_filters', 'content_types'
например @dp.message_handler(admin=check_admin)
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
Ааа, прикольно )
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
Я просто хотел отрезать некоторые типы евентов, чтобы они даже не доходили до ряда хендлеров, тем самым сильно уменьшив им строку условий
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
Т.е. порядок прохождения евента через хендлеры сделать таким образом:

хендлеры для всех
хендлер, который проверяет наличие админки
хендлеры для админов

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

AR

Alex RootJunior in aiogram [ru]
кастомный фильтр сделать. либо...

> хендлер, который проверяет наличие админки
можно сделать.
делаешь хэндлер в нужном месте который будет проверять наличие прав и выбрасывать исключение SkipHandler (aiogram.dispatcher.handler.SkipHandler) если нужно пропустить эвент к следующему хэндлеру
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
хм, странная особенность
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
в pyTelegramBotAPI и тут у меня 2 одинаковых хендлера
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
regex='бан!'
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
других условий нет
источник

OA

Oleg A. 🇷🇺 in aiogram [ru]
пишу в чат "Лови бан! 🙂"
источник