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

@JRootJunior вопрос по тройке: Вот я создал роутер. default_router = Router() Создал

диспетчер и прицепил к нему роутер, а к роутеру прицепил дочерний роутер
dp = Dispatcher()
dp.include_router(default_router)
default_router.include_router(commands.router)

Навесил фильтр на корневой роутер:
default_router.message.bind_filter(ChatTypeFilter)

Как заставить теперь дочерний роутер (commands.router) "увидеть" этот фильтр?
Ошибка:
aiogram.exceptions.FiltersResolveError: Unknown keyword filters: {'chat_type'}

Фильтр
from typing import Union, List

from aiogram.dispatcher.filters import BaseFilter
from aiogram import types


class ChatTypeFilter(BaseFilter):
chat_type: Union[str, List[str]]

async def __call__(self, message: types.Message) -> bool:
if isinstance(self.chat_type, str):
return message.chat.type == self.chat_type
else:
return message.chat.type in self.chat_type

Могу сделать MRE, если нужно

7 ответов

38 просмотров
Groosha- Автор вопроса

Так, кажется, я понял, в чём проблема, но не знаю, как решить. Ошибка возникает ещё в момент начала импортов: from bot.handlers import commands async def cmd_start(message: types.Message): В этот момент созданный роутер ничего не знает про фильтр. Поэтому, видимо, надо указывать не кваргом, а прям передавать класс

Обработчики регистрируй после того как зарегистрирован фильтр в фабрике

Groosha- Автор вопроса
Alex RootJunior 🇺🇦
Обработчики регистрируй после того как зарегистрир...

Да там другая проблема была: я на декораторы передалал и вариант с чисто кваргом перестал работать вообще

Groosha
Да там другая проблема была: я на декораторы перед...

Логично, у тебя регистрация обработчиков выполнилась раньше фильтра

Groosha
Да там другая проблема была: я на декораторы перед...

В целом советую не использовать фабрику фильтров (кейворды), от них в 3.2-4.0 планирую отказаться Указывай фильтры явным образом

Alex RootJunior 🇺🇦
Логично, у тебя регистрация обработчиков выполнила...

Помню как сам на это напоролся когда писал свой регистратор хендлеров, неочевидная подъёбка.

Могу ошибаться, но ты можешь навесить этот фильтр только для commands.router

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта