Реализация проверки принадлежности юзера к админам. aiogram
есть метод getchatadministrators
, как правильно сравнивать id
пользователя с id из этого метода, чтобы определять администратор ли он? и какие ещё есть способы реализации данной задачи без использования БД. нужно просто выделить список админов супергруппы(группы) и из него сравнить id
пользователя использующего команду, например, /ban
, со списком айдишников админов чата. такой вот код написал
@router3.message(Command('ban'))
async def ban_command(message: Message):
admins = await bot.get_chat_administrators(chat_id=message.chat.id)
if message.from_user.id in admins:
await bot.ban_chat_member(user_id=message.reply_to_message.from_user.id)
else:
await message.answer("нет прав")
Ответы (1 шт):
Для решения вам достаточно вывести в print
значение admins
что бы понять как правильно получить нужные данные.
В данном случае await bot.get_chat_administrators(chat_id=message.chat.id)
будет возвращать список вида:
[
ChatMemberOwner(
status=ChatMemberStatus.CREATOR,
user=User(
id=user_id,
is_bot=False,
first_name=first_name,
last_name=last_name,
username=username,
language_code='ru',
is_premium=None,
added_to_attachment_menu=None,
can_join_groups=None,
can_read_all_group_messages=None,
supports_inline_queries=None),
is_anonymous=False,
custom_title=None
),
),
]
То есть что бы получить id администраторов для каждого чата нужно перебрать этот список, извлечь id и засунуть в новый список
Либо так:
admin_list = []
for member in admins:
new_list.append(member.user.id)
Либо в одну строку:
admin_list = [member.user.id for member in admins]
И в условии проверять уже message.from_user.id
в admin_list