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 ответов

14 просмотров
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

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
4
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Так а кто может спарсить всех участников чата? Идишники
Magic
17
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
13
Ребята, а из API геокодеров (по адресам в РФ) что сейчас актуального и есть ли среди актуального бесплатное/с нормаотным лимитом запросов? ситуация простая - на сайте периоди...
Dreamer_0x01 VeseloV
8
Карта сайта