Comments 7
А в чем могут быть плюсы/минусы в сравнении с python-telegram-bot?
Насколько я помню python-telegram-bot - синхронная библиотека. Для больших проектов такое негодится) Кроме того, у aiogram намного больше комьюнити. Так что рекомендую отдавать предпочтение aiogram, даже если на старте он кажется сложнее чем python-telegram-bot
Он уже какое-то достаточно большое время асинхронный (с v20+, насколько помню). По комьюнити может быть)
Все в статье хорошо, кроме:
Если можно не использовать регулярки — не используйте
Регулярные выражения, как и любой другой инструмент, могут быть применены удачно, а могут неудачно. Отказываться от их применения просто потому, что у кого-то не получилось, неизвестно на какой задаче и на каких данных - что-то на уровне суеверий 🙂 Соответственно советовать такое не стоит.
Благодарю за отзыв. Тут, скорее, имелось ввиду что если есть возможность использовать магические фильтры, такие как startswith, contains и прочие лучше их использовать. Они надежнее и, практически всегда, заменяют необходимость в регулярках. Ну а так да, если действительно уверены в своих силах, то почему бы и не использовать)
class IsAdmin(BaseFilter):
def __init__(self, user_ids: int | List[int]) -> None:
self.user_ids = user_ids
async def __call__(self, message: Message) -> bool:
if isinstance(self.user_ids, int):
return message.from_user.id == self.user_ids
return message.from_user.id in self.user_ids
Вот тут советую использовать множества (user_ids: set[int]) для id админов, так айдишники все разные и проверка на вхождение во множество - это легкая операция. И уйдете от isinstance.
Так тут в __call__
можно вообще одну строку же оставить:
async def __call__(self, message: Message) -> bool:
return message.from_user.id in self.user_ids
Так как список админов инициализируется списком (или множеством), даже если админ один:
admins = [int(admin_id) for admin_id in config('ADMINS').split(',')]
Telegram Боты на Aiogram 3.x: Магия фильтров