From 4e7b5e6493497eb2de0dd40df19fc6492427e446 Mon Sep 17 00:00:00 2001 From: Igor <50257429+igorechek06@users.noreply.github.com> Date: Tue, 12 Oct 2021 21:10:36 +0900 Subject: Исправил баги MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/filters.py | 137 +++---------------------------------------------------- 1 file changed, 6 insertions(+), 131 deletions(-) (limited to 'utils') diff --git a/utils/filters.py b/utils/filters.py index b6ddec5..c8a1fb5 100644 --- a/utils/filters.py +++ b/utils/filters.py @@ -1,94 +1,20 @@ -import re -import typing as p -from random import random -from aiogram import types as t, filters as f, Bot - -from shared.instances import bot -# from libs.classes import Errors as e -# from libs.objects import Database -# from libs.system import regex as r - -objType = p.Union[t.Message, t.CallbackQuery, t.ChatMemberUpdated] - - -class _helper: - @staticmethod - def get_user_and_chat(obj: objType): - if isinstance(obj, t.Message): - chat = obj.chat - user = obj.from_user - elif isinstance(obj, t.CallbackQuery): - chat = obj.message.chat - user = obj.from_user - elif isinstance(obj, t.ChatMemberUpdated): - chat = obj.chat - user = obj.from_user - else: - raise TypeError() - - return user, chat - - @staticmethod - def has_permission(admin: t.ChatMember, permission: str): - if t.ChatMemberStatus.is_chat_creator(admin.status): - return True - elif t.ChatMemberStatus.is_chat_admin(admin.status): - return getattr(admin, permission) - else: - return False - +from __future__ import annotations -class AdminFilter(f.BoundFilter): - def __init__(self, user_id: int = None): - self._user_id = user_id - - async def check(self, obj: objType): - user, chat = _helper.get_user_and_chat(obj) - - admin = await chat.get_member(self._user_id or user.id) - if t.ChatMemberStatus.is_chat_admin(admin.status): - return True - else: - return False - - -class AliasFilter(f.BoundFilter): - def __init__(self): - pass - - async def check(self, msg: objType) -> bool: - if not isinstance(msg, t.Message): - raise TypeError() - if await message.is_private.check(msg): - return False - chat = Database.get_chat(msg.chat.id) - - if msg.sticker: - aliases = list(chat.settings.sticker_alias.keys()) - text = msg.sticker.file_unique_id - elif msg.text: - aliases = list(chat.settings.text_alias.keys()) - text = msg.text +from random import random - for alias in aliases: - pattern = re.compile(r.alias(alias), re.IGNORECASE) - if pattern.match(text): - return True +from aiogram import types as t, filters as f - return False +from shared import instances as ins class message: is_chat = f.ChatTypeFilter((t.ChatType.GROUP, t.ChatType.SUPERGROUP)) is_private = f.ChatTypeFilter(t.ChatType.PRIVATE) is_reply = f.IsReplyFilter(True) - is_alias = AliasFilter() @staticmethod - def chance(percent: int): - def filter(msg: t.Message): - return random() <= (percent / 100) - return filter + def chance(msg: t.Message): + return random() <= (ins.gen_chance / 100) @staticmethod def has_text(msg: t.Message): @@ -96,60 +22,9 @@ class message: return True -class bot: - is_admin = AdminFilter(bot.id) - - @staticmethod - def has_permission(permissions: p.List[str]): - permissions = permissions - - async def filter(obj: objType): - bot = Bot.get_current() - user, chat = _helper.get_user_and_chat(obj) - admin = await chat.get_member(bot.id) - if not _helper.has_permission(admin, permissions): - raise e.BotHasNotPermission() - return True - - return filter - - class user: - is_admin = AdminFilter() - - @staticmethod - def has_permission(permissions: p.List[str]): - permissions = permissions - - async def filter(obj: objType): - user, chat = _helper.get_user_and_chat(obj) - admin = await chat.get_member(user.id) - if not _helper.has_permission(admin, permissions): - raise e.HasNotPermission() - return True - - return filter - @staticmethod def add_member(upd: t.ChatMemberUpdated): old = upd.old_chat_member new = upd.new_chat_member return not t.ChatMemberStatus.is_chat_member(old.status) and t.ChatMemberStatus.is_chat_member(new.status) - - @staticmethod - def removed_member(upd: t.ChatMemberUpdated): - old = upd.old_chat_member - new = upd.new_chat_member - return t.ChatMemberStatus.is_chat_member(old.status) and not t.ChatMemberStatus.is_chat_member(new.status) - - @staticmethod - def promote_admin(upd: t.ChatMemberUpdated): - old = upd.old_chat_member - new = upd.new_chat_member - return not t.ChatMemberStatus.is_chat_admin(old.status) and t.ChatMemberStatus.is_chat_admin(new.status) - - @staticmethod - def restrict_admin(upd: t.ChatMemberUpdated): - old = upd.old_chat_member - new = upd.new_chat_member - return t.ChatMemberStatus.is_chat_admin(old.status) and not t.ChatMemberStatus.is_chat_admin(new.status) -- cgit v1.2.3