示例#1
0
    async def check(self, obj: Union[Message, CallbackQuery, InlineQuery]) -> bool:
        user_id = obj.from_user.id

        if self._check_current:
            if isinstance(obj, Message):
                message = obj
            elif isinstance(obj, CallbackQuery) and obj.message:
                message = obj.message
            else:
                return False
            if ChatType.is_private(message):  # there is no admin in private chats
                return False
            chat_ids = [message.chat.id]
        else:
            chat_ids = self._chat_ids

        admins = [member.user.id for chat_id in chat_ids for member in await obj.bot.get_chat_administrators(chat_id)]

        return user_id in admins
示例#2
0
async def check_access(message: types.Message, grant: Grant):
    chat_id = message.chat.id
    user_id = message.from_user.id

    chat_member: ChatMember = await message.chat.get_member(user_id=user_id)

    logging.info(f"Request from chat member:"
                 f" chat_id=[{chat_id}],"
                 f" chat_type=[{message.chat.type}],"
                 f" user_id=[{message.from_user.id}],"
                 f" chat_member_status=[{chat_member.status}],"
                 f" grant=[{grant}]")

    is_private = ChatType.is_private(message)
    is_creator_or_admin = chat_member.is_chat_creator(
    ) or chat_member.is_chat_admin()

    if is_private:
        logging.info("No restrictions in private chat")
    elif is_creator_or_admin:
        logging.info("No restrictions for creator or admin")
    else:
        if grant == Grant.READ_ACCESS:
            logging.info("No restrictions for read access")
        elif grant == Grant.WRITE_ACCESS:
            with db.get_connection() as conn:
                chat = db.select_chat(conn, chat_id=chat_id)
            if not chat:
                raise AuthorizationError(
                    "Chat not found => anarchy is disabled by default")
            elif not chat.is_anarchy_enabled:
                raise AuthorizationError("Chat found, anarchy is disabled")
            else:
                logging.info("Anarchy enabled for chat")
        elif grant == Grant.CHANGE_CHAT_SETTINGS:
            raise AuthorizationError(
                "Action allowed only for creator or admin")
        else:
            raise IllegalStateError(f"Unknown grant [{grant}]")
def IsGroup(m):
    if isinstance(m, Message):
        return ChatType.is_group_or_super_group(m)
    elif isinstance(m, CallbackQuery):
        return ChatType.is_group_or_super_group(m.message)
def IsChannel(m):
    if isinstance(m, Message):
        return ChatType.is_channel(m)
    elif isinstance(m, CallbackQuery):
        return ChatType.is_channel(m.message)
def IsPrivate(m):
    if isinstance(m, Message):
        return ChatType.is_private(m)
    elif isinstance(m, CallbackQuery):
        return ChatType.is_private(m.message)