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

Возможно в AIOgram 3 добавить кастомные аргументы в фильтр? Типо так: class

NewUser(BaseFilter):
async def __call__(self, message: Message, session: AsyncSession) -> bool:
print(message)
print(session)
return await session.get(UserModel, message.from_user.id) is not None

12 ответов

33 просмотра

https://groosha.2038.io/telegram-tutorial-2/filters-and-middlewares/#filters

Toxa 🇺🇦- Автор вопроса
Groosha
https://groosha.2038.io/telegram-tutorial-2/filter...

А возможно как-то прокинуть сессию БД в фильтр, как она прокидаеться в хендлер через мидлеварь?

Toxa 🇺🇦- Автор вопроса
Groosha
Не подскажу сейчас, попробуй

Это нужно сделать как тут? Добавить аргумент session и указать тип?

Toxa 🇺🇦
А возможно как-то прокинуть сессию БД в фильтр, ка...

можно. допустим у тебя мидлварь подмешивает сессию в контекст с именем session, значит у фильтра аналогичным образом можно принять аргументом: class MyFilter(BaseFilter): foo: str async def __call__(self, message, session): result = await session.do_something_with_message(message) return result

Toxa 🇺🇦- Автор вопроса
Alex RootJunior 🇺🇦
можно. допустим у тебя мидлварь подмешивает сесси...

Фильтр: class NewUser(BaseFilter): async def __call__(self, message, session): print(message) print(session) Мидлеварь: class DbSessionMiddleware(BaseMiddleware): def __init__(self, session_pool): super().__init__() self.session_pool = session_pool async def __call__( self, handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]], event: TelegramObject, data: Dict[str, Any], ) -> Any: async with self.session_pool() as session: data["session"] = session return await handler(event, data) Хендлер: @router.message(NewUser(), commands=["start"], state="*") Таким образом вылазит ошибка: TypeError: NewUser.call() missing 1 required positional argument: 'session'

Toxa 🇺🇦
Фильтр: class NewUser(BaseFilter): async def _...

покажи как зарегистрирована мидлварь (на какй слой - inner/outer)

Toxa 🇺🇦- Автор вопроса
Toxa 🇺🇦
Вот так было: dp.message.middleware(DbSessionMidd...

Если оставить на сообщении то: dp.message.outer_middleware(...) если перенести на апдейт: dp.update.outer_middleware(...) или dp.update.middleware(...) у апдейта можно и на внутренний слой, потому что обработка сообщений выполняется после прохождения через: update outer middlewares update filters update middlewares update handler message outer middlewares message filters message middlewares message handler

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
8
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Карта сайта