Метод getChatMember

Метод для получения информации об участнике чата, возвращающий объект ChatMember.

Описание

Используйте этот метод для получения информации об участнике чата. Метод гарантированно работает для других пользователей только в том случае, если бот является администратором в чате. При успешном выполнении возвращает объект ChatMember.

Параметр Тип Обязательный Описание
chat_id Целое число или строка Да Уникальный идентификатор целевого чата или имя пользователя целевой супергруппы или канала (в формате @channelusername)
user_id Целое число Да Уникальный идентификатор целевого пользователя

Примеры

php

<?php

$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";

// Пример 1: Получение информации о пользователе в группе/супергруппе
$chatId = -1001234567890; // ID группы (отрицательное число) или @username
$userId = 123456789; // ID пользователя

// Подготовка данных
$data = [
    'chat_id' => $chatId,
    'user_id' => $userId
];

// Отправка запроса
$ch = curl_init($apiUrl . 'getChatMember');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);

$response = curl_exec($ch);
curl_close($ch);

// Обработка ответа
$result = json_decode($response, true);

if ($result['ok']) {
    $chatMember = $result['result'];
    
    // Пример использования данных
    echo "User ID: " . $chatMember['user']['id'] . PHP_EOL;
    echo "First Name: " . $chatMember['user']['first_name'] . PHP_EOL;
    echo "Status: " . $chatMember['status'] . PHP_EOL;
    
    // Проверка статуса пользователя
    switch ($chatMember['status']) {
        case 'creator':
            echo "Пользователь является создателем чата" . PHP_EOL;
            break;
        case 'administrator':
            echo "Пользователь является администратором" . PHP_EOL;
            // Дополнительные поля для администратора
            if ($chatMember['can_post_messages'] ?? false) {
                echo "Может публиковать сообщения" . PHP_EOL;
            }
            break;
        case 'member':
            echo "Пользователь является участником" . PHP_EOL;
            break;
        case 'restricted':
            echo "Пользователь ограничен" . PHP_EOL;
            break;
        case 'left':
            echo "Пользователь покинул чат" . PHP_EOL;
            break;
        case 'kicked':
            echo "Пользователь заблокирован" . PHP_EOL;
            break;
    }
} else {
    echo "Ошибка: " . $result['description'] . PHP_EOL;
}

// Пример 2: Использование с username канала
$channelUsername = '@my_channel';
$data2 = [
    'chat_id' => $channelUsername,
    'user_id' => $userId
];

// Пример 3: Функция-обертка для удобного использования
function getChatMemberInfo($botToken, $chatId, $userId) {
    $apiUrl = "https://api.telegram.org/bot{$botToken}/";
    
    $data = [
        'chat_id' => $chatId,
        'user_id' => $userId
    ];
    
    $ch = curl_init($apiUrl . 'getChatMember');
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_HTTPHEADER => ['Content-Type: multipart/form-data']
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode === 200) {
        return json_decode($response, true);
    }
    
    return ['ok' => false, 'description' => 'Network error'];
}

// Использование функции
$memberInfo = getChatMemberInfo($botToken, $chatId, $userId);
if ($memberInfo['ok']) {
    // Работа с данными о пользователе
    $user = $memberInfo['result']['user'];
    $status = $memberInfo['result']['status'];
    
    // Пример: проверка, является ли пользователь администратором
    $isAdmin = in_array($status, ['creator', 'administrator']);
    echo "Is admin: " . ($isAdmin ? 'Yes' : 'No') . PHP_EOL;
}

// Пример 4: Проверка конкретных прав администратора
if ($memberInfo['ok'] && $memberInfo['result']['status'] === 'administrator') {
    $adminRights = $memberInfo['result'];
    
    $rights = [
        'can_change_info' => 'Может изменять информацию чата',
        'can_post_messages' => 'Может публиковать сообщения',
        'can_edit_messages' => 'Может редактировать сообщения',
        'can_delete_messages' => 'Может удалять сообщения',
        'can_invite_users' => 'Может приглашать пользователей',
        'can_restrict_members' => 'Может ограничивать участников',
        'can_pin_messages' => 'Может закреплять сообщения',
        'can_promote_members' => 'Может назначать администраторов'
    ];
    
    foreach ($rights as $key => $description) {
        if (isset($adminRights[$key]) && $adminRights[$key]) {
            echo $description . PHP_EOL;
        }
    }
}

?>

python

import requests

def get_chat_member(bot_token, chat_id, user_id):
    """
    Получает информацию об участнике чата.
    
    Args:
        bot_token (str): Токен вашего бота
        chat_id (int or str): ID чата или username канала/супергруппы
        user_id (int): ID пользователя
    
    Returns:
        dict: Объект ChatMember или None в случае ошибки
    """
    url = f"https://api.telegram.org/bot{bot_token}/getChatMember"
    
    params = {
        'chat_id': chat_id,
        'user_id': user_id
    }
    
    try:
        response = requests.post(url, json=params)
        response.raise_for_status()
        return response.json()['result']
    except requests.exceptions.RequestException as e:
        print(f"Ошибка при выполнении запроса: {e}")
        return None
    except KeyError:
        print("Ошибка в ответе API")
        return None

# Пример использования
if __name__ == "__main__":
    # Замените на реальные значения
    BOT_TOKEN = "ВАШ_ТОКЕН_БОТА"
    CHAT_ID = -1001234567890  # или "@channelusername"
    USER_ID = 123456789
    
    member_info = get_chat_member(BOT_TOKEN, CHAT_ID, USER_ID)
    
    if member_info:
        print(f"Статус пользователя: {member_info.get('status')}")
        print(f"Информация о пользователе: {member_info.get('user', {})}")

История изменений

  • API 2.1.. Добавлен метод getChatMember

Дополнительно

  • ChatMember - Объект, описывающий информацию об участнике чата и его статусе в Telegram.
Комментарии