🌙

getChatMember / getChatMemberCount / getChatAdministrators

Чтение состава чата

Три метода только читают данные и не требуют прав администратора — достаточно членства бота в чате.

getChatMember

GET ?method=getChatMember&chat_id=123&user_id=42
ПараметрТипОбяз.
chat_idint
user_idint
{
  "ok": true,
  "result": {
    "user_id": 42,
    "login": "petr",
    "name": "Пётр",
    "is_bot": 0,
    "role": "admin",
    "custom_title": "Модератор",
    "avatar_url": "https://api.kodari.ru/msg/media.php?key=...",
    "permissions": {
      "delete_messages": true,
      "remove_users": true,
      "block_users": false,
      "pin_messages": true,
      "invite_users": true,
      "change_info": false,
      "add_admins": false,
      "post_messages": false,
      "edit_messages": false
    }
  }
}

roleowner, admin или member. У владельца в permissions все флаги true.

Ошибки: 400 без параметров, 403 если бот не в чате, 404 если пользователь не участник.

getChatMemberCount

GET ?method=getChatMemberCount&chat_id=123
{ "ok": true, "result": 42 }

getChatAdministrators

GET ?method=getChatAdministrators&chat_id=123

Возвращает массив участников с ролями owner и admin в том же формате, что и getChatMember.

{
  "ok": true,
  "result": [
    { "user_id": 5, "login": "ivan", "name": "Иван", "role": "owner", "custom_title": null, "permissions": { } },
    { "user_id": 42, "login": "petr", "name": "Пётр", "role": "admin", "custom_title": "Модератор", "permissions": { } }
  ]
}

pykodaribot

member = await bot.get_chat_member(chat_id, user_id)
print(member.status, member.custom_title)   # creator / administrator / member

count = await bot.get_chat_member_count(chat_id)

for admin in await bot.get_chat_administrators(chat_id):
    print(admin.user.first_name, admin.status)

SDK переводит роли в статусы Telegram-стиля: ownercreator, adminadministrator, membermember.

Проверка прав перед действием:

me = await bot.get_me()
member = await bot.get_chat_member(chat_id, me.id)
if member.permissions and member.permissions.delete_messages:
    await bot.delete_message(chat_id, message_id)
17 просмотров