管理员权限检查(aiogram)

Administrator Permissions Check (aiogram)

我制作了一个用于管理电报组的电报机器人,但此过滤器仅检查管理员状态:

import aiogram
import functools
from aiogram.dispatcher.filters import BoundFilter

class CheckFilter(BoundFilter):
    key = 'is_admin'
    def __init__(self, is_admin):
        self.is_admin = is_admin
    async def check(self, message: types.Message):
       member = await bot.get_chat_member(message.chat.id, message.from_user.id)
       return member.is_chat_admin() == self.is_admin
dp.filters_factory.bind(CheckFilter)

我需要检查管理员权限。示例:使用命令 !ban 你需要禁止用户权限。

bot.get_chat_member(chat_id, bot_id) 就可以了。

aiogram documentation 说:

Returns: Returns a ChatMember object on success

Telegram API documentation 对 ChatMember 的评价:

...

can_edit_messages Boolean Optional. Administrators only. True, if the administrator can edit messages of other users and can pin messages; channels only

can_delete_messages Boolean Optional. Administrators only. True, if the administrator can delete messages of other users

can_restrict_members Boolean Optional. Administrators only. True, if the administrator can restrict, ban or unban chat members

...

这是一个例子:

@dp.message_handler(commands=['rights'])
async def myrights(message: types.Message):
    member = await bot.get_chat_member(message.chat.id, TOKEN.split(":")[0])
    for x in member:
        print(x)

当我在组上写 /rights@BOTUSERNAME 时它的输出(在我的终端上):

('user', {'id': xxxxxxxxxx, 'is_bot': True, 'first_name': 'xxxxx', 'username': 'xxxxx'})
('status', 'administrator')
('can_be_edited', False)
('can_change_info', True)
('can_delete_messages', True)
('can_invite_users', True)
('can_restrict_members', True)
('can_pin_messages', True)
('can_promote_members', False)