Проверка разрешений администратора (аиограмма) - PullRequest
1 голос
/ 25 апреля 2020

Я создаю бот-телеграмму для администрирования групп телеграмм, но этот фильтр просто проверяет статус администратора:

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 вам нужно забанить права пользователей.

1 Ответ

0 голосов
/ 29 апреля 2020

bot.get_chat_member(chat_id, bot_id) добьется цели.

аиограмма документация говорит:

Returns: возвращает объект ChatMember в случае успеха

И что API Telegram документация говорит о ChatMember:

...

can_edit_messages Boolean Необязательно. Только для администраторов. True, если администратор может редактировать сообщения других пользователей и прикреплять сообщения; только каналы

can_delete_messages Boolean Необязательно. Только для администраторов. True, если администратор может удалять сообщения других пользователей

can_restrict_members Boolean Необязательно. Только для администраторов. Правда, если администратор может ограничить, заблокировать или разблокировать участников чата

...

Вот пример:

@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)
...