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

Хеллоу. Есть где-нибудь хорошая статья по созданию собственных фильтров? Гугл

какой то не богатый мне список предоставил....

34 ответов

12 просмотров
Not Official-Hacker🇷🇺 Автор вопроса

?

хакером себя еще называет😂 читай доку, там есть примеры

Доки

Not Official-Hacker🇷🇺 Автор вопроса
ZeVs
хакером себя еще называет😂 читай доку, там есть пр...

Действительно, без тебя бы не догадался очередной раз в доку залезть

что конкретно тебя интересует?

Not Official-Hacker🇷🇺 Автор вопроса
Groosha
что конкретно тебя интересует?

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

Not Official Hacker🇷🇺
(и да, с ООП ознакомлен)

только хотел тебе это написать)

Not Official-Hacker🇷🇺 Автор вопроса
Groosha
давай конкретнее. Какой тебе фильтр нужен?

Ну мне в общем надо обучится ставить собственные фильтры, чтобы лесенки операторов не писать. К примеру, фильтр на userAct, где userAct - статус пользователя взятый из базы данных.

Asarax ✙ 🇺🇦 ✙ 🇺🇦
Это кто термукс на андроид скачал

А... Тогда знаю таких, каждый второй получается хакер.

Not Official Hacker🇷🇺
Ну мне в общем надо обучится ставить собственные ф...

Вот не зря же спросил. Сейчас бы тебе дали пример и ты попал бы в ловушки

Not Official Hacker🇷🇺
Ну мне в общем надо обучится ставить собственные ф...

ну смотри. Вообще твой фильтр мог бы выглядеть так: from typing import List from aiogram.dispatcher.filters import BoundFilter from aiogram.types import Message from yourmodule import your_func class UserActFilter(BoundFilter): key = "user_act" def __init__(self, user_act: str): self.user_act = user_act async def check(self, message: Message): return your_func(message.from_user_id) == self.user_act Зарегал бы фильтр как dp.filters_factory.bind(UserActFilter, event_handlers=[dp.message_handlers]) И в хэндлерах использовал бы как dp.register_message_handler(your_handler, user_act="admin") или @dp.message_handler(user_act="admin") НО!! ⚠️⚠️⚠️ Если ты в нескольких местах укажешь этот фильтр, то есть огромный шанс, что на каждый апдейт у тебя будет несколько раз вызываться твой your_func(), до тех пор, пока не найдёт хэндлер, который подходит по всем фильтрам. Это неэффективно. Мысль №1: кэшировать запросы, чтобы твой фильтр на каждый апдейт (или на каждый user_id) лез первый раз в базу (или куда там ты лезешь), а все остальные — в кэш. Мысль №2: если тебе 70%+ хэндлеров надо проверять этот user_act, то лучше сделать мидлварь, которая по-любому только один раз на каждый апдейт залезет в СУБД (или куда там тебе надо) и проверит, а заодно прокинет user_act напрямую в вызванный хэндлер (если такой будет). Мысль №3: в aiogram 3.x можно навесить фильтр на роутер (считай, что это диспетчер для подмножества хэндлеров), тогда проверка будет один раз на все фильтры из роутера.

Not Official-Hacker🇷🇺 Автор вопроса
Groosha
ну смотри. Вообще твой фильтр мог бы выглядеть так...

Так.... Вроде дошло, остальное дело практики.... спасибо большое!

Groosha
ну смотри. Вообще твой фильтр мог бы выглядеть так...

А ты использовал что-нибудь кроме словарика для кэширования?

Riz
А ты использовал что-нибудь кроме словарика для кэ...

Обычно кэши короткоживущие, поэтому словарика достаточно

Groosha
Обычно кэши короткоживущие, поэтому словарика дост...

С вытиснением бы хотелось(ттл или как это называется, хз), а то словарик заполнится монструозно

Not Official-Hacker🇷🇺 Автор вопроса
Groosha
ну смотри. Вообще твой фильтр мог бы выглядеть так...

Hi.Вопрос.... А что хуже - лесенка из операторов, которые проверяют userAct, навешаных на хендлер в конце "тип =текст", или действительно около 70% хендлеров/кода, которые также проверяют userAct но уже получается несколько запросов к бд (под каждый хендлер соответственно)?

Not Official-Hacker🇷🇺 Автор вопроса
Groosha
Да всё херово, как по мне

Тоесть... Наилучший вариант, это кеш? С которым я не разу не работал....

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

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

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...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта