169 похожих чатов

Вопрос по тройке(не лошадей): теперь можно регистрировать хендлеры как роутерами,

так и диспетчером? Насколько я понял по доке, роутер можно вложить в другой роутрер и дальше как матрешку вкидывать роутеры, но все равно все роутеры вкидываются в диспетчер, верно? И если я объявляю
router1
router2
Дальше
dp.include_router(router1)
router1.include_router(router2)
И вызываю метод filter
router1.filter(...)
router2.filter(...)
Регистрирую хендлеры через router1
И хендлеры через router2
То к хендлерам через router2 будет применен 1 фильтр, а к router1 будет применено 2 фильтра, верно?

И последний вопрос. Сколько фильтров можно привязывать к роутерам?

20 ответов

57 просмотров
Riz- Автор вопроса

@groosha ты пробовал такое?

> То к хендлерам через router2 будет применен 1 фильтр, > а к router1 будет применено 2 фильтра, верно? наоборот. на фильтры не думаю что есть какое-то ограничение кроме здравого смысла. Есть ограничение на то, что не может быть два одновременно активных баунд фильтра с одинаковыми названиями атрибутов.

Riz- Автор вопроса
Vitalii Hreben
> То к хендлерам через router2 будет применен 1 фи...

Как это наоборот?! Я ж вроде вкладываю router2 в router1, значит роутер1 перенимать должен фильтр роутер2 и еще свой. Что-то я логику вложения не понял тогда, если "наоборот"

Riz
Как это наоборот?! Я ж вроде вкладываю router2 в r...

Есть коробка1 с отверствием 10 см(роутер1), ты положил внутрь коробку2 с отверствием 5см(роутер2). Вопрос: можно ли теперь поместить в коробку1 мяч размером 7см или она "переняла" размер отверствия коробки2 и теперь больше 5см не поместится? Размерами коробок кроме отверствия можно пренебречь.

Riz- Автор вопроса
Vitalii Hreben
Есть коробка1 с отверствием 10 см(роутер1), ты пол...

Ну так а если вкладывать сначала 5см и дальше положить 10см, то сначала пролезет до 10 см и потом только до 5 😁

Riz- Автор вопроса

Давай на реальном примере разберем

Riz
Как это наоборот?! Я ж вроде вкладываю router2 в r...

Воспринимай это как наследование фильтров, оно работает сверху вниз, не наоборот

Gabben
screenshot

Можно ещё через них представлять

Riz
Давай на реальном примере разберем

router1 = Router() router2 = Router() router1.include_router(router2) router1.filter(F.text) router2.filter(F.event_from_user.id == 1) @router1.message(text="test") async def f(m): # сработат на сообщение "test" от пользователя с любым id @router2.message() async def f(m): # сработать только на текстовые сообщения от юзера с id 1 (если текст не "test", иначе сработает первый хендлер)

Riz- Автор вопроса

Мне нужно прилепить к роутер1 фильтр с проверкой на админа, на роутер2 прикрепить фильтр на проверку на подписку на канал, на роутер3 навесить фильтр на проверку статуса забанен пользователь по флуду или нет. Далее вкладываю через router1.include_router(router2) По логике и переводу include(включая) роутер2 - роутер1 же должен наследовать фильтр роутер2 ну и тд. Создадутся для админа хендлеры и зарегистрируются под роутер1 и хендлеры под роутер2 не будут проверяться на админа. При этом хендлеры на админа должны проходить проверку только на самого админа, без остальных фильтров на проверку забанен или нет и подписчик или нет. Потому что админ. Пока описывал, сам запутался в логике своей

Riz
Мне нужно прилепить к роутер1 фильтр с проверкой н...

https://docs.aiogram.dev/en/dev-3.x/dispatcher/router.html#how-it-works

Riz- Автор вопроса
Gabben
https://docs.aiogram.dev/en/dev-3.x/dispatcher/rou...

Да, я видел эту иерархию. Прост пока в голове не укладывается

Riz
Мне нужно прилепить к роутер1 фильтр с проверкой н...

Вложить роутер не значит расширить/дополнить первый роутер хендлерами и фильтрами из второго роутера

Riz
Мне нужно прилепить к роутер1 фильтр с проверкой н...

так это разные роутеры, зачем их включать друг в друга? включай их в диспетчер или другой независимый роутер dp.include_router(admin_router) dp.include_router(subscribe_router) dp.include_router(banned_user_router)

Riz- Автор вопроса
Vitalii Hreben
так это разные роутеры, зачем их включать друг в д...

Ну так если нужно проверить забанен или нет, далее проверить подписчик или нет. При этом не важно подписчик или нет, пользователь может флудить и будучи подписанным или нет. Иначе получится, что роутер просто пропустит не забаненного пользователя и врубит хендлер не подписанному

Riz
Ну так если нужно проверить забанен или нет, далее...

А зачем перед всем этим проверять на админа?

Riz- Автор вопроса
Gabben
А зачем перед всем этим проверять на админа?

Офис менеджер и управляющий. Две роли. Одна команда, два хендлера, через одну пройдет один, через вторую другой. Хочу в бд не давать каждому отдельно привелегии, а закинуть права офис менеджера офис менеджеру и если админ прошел проверку по фильтру админа, то и админу.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта