Метод promoteChatMember

Этот метод позволяет повысить или понизить права пользователя в супергруппе или канале, устанавливая различные административные привилегии.

Описание

Используйте этот метод для повышения или понижения пользователя в супергруппе или канале. Бот должен быть администратором в чате для работы этого метода и иметь соответствующие права администратора. Передайте False для всех логических параметров, чтобы понизить пользователя. Возвращает True при успехе.

Параметр Тип Обязательный Описание
chat_id Integer или String Да Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername)
user_id Integer Да Уникальный идентификатор целевого пользователя
is_anonymous Boolean Опционально Передайте True, если присутствие администратора в чате скрыто
can_manage_chat Boolean Опционально Передайте True, если администратор может получить доступ к журналу событий чата, получить список бустов, видеть скрытых участников супергруппы и канала, сообщать о спам-сообщениях, игнорировать медленный режим и отправлять сообщения в чат без оплаты Telegram Stars. Подразумевается любыми другими привилегиями администратора.
can_delete_messages Boolean Опционально Передайте True, если администратор может удалять сообщения других пользователей
can_manage_video_chats Boolean Опционально Передайте True, если администратор может управлять видеозвонками
can_restrict_members Boolean Опционально Передайте True, если администратор может ограничивать, банить или разбанивать участников чата или получать доступ к статистике супергруппы
can_promote_members Boolean Опционально Передайте True, если администратор может добавлять новых администраторов с подмножеством своих собственных привилегий или понижать администраторов, которых он повысил напрямую или косвенно (повышенных администраторами, назначенными им)
can_change_info Boolean Опционально Передайте True, если администратор может изменять название чата, фото и другие настройки
can_invite_users Boolean Опционально Передайте True, если администратор может приглашать новых пользователей в чат
can_post_stories Boolean Опционально Передайте True, если администратор может публиковать истории в чате
can_edit_stories Boolean Опционально Передайте True, если администратор может редактировать истории, опубликованные другими пользователями, публиковать истории на странице чата, закреплять истории чата и получать доступ к архиву историй чата
can_delete_stories Boolean Опционально Передайте True, если администратор может удалять истории, опубликованные другими пользователями
can_post_messages Boolean Опционально Передайте True, если администратор может публиковать сообщения в канале, одобрять предложенные посты или получать доступ к статистике канала; только для каналов
can_edit_messages Boolean Опционально Передайте True, если администратор может редактировать сообщения других пользователей и закреплять сообщения; только для каналов
can_pin_messages Boolean Опционально Передайте True, если администратор может закреплять сообщения; только для супергрупп
can_manage_topics Boolean Опционально Передайте True, если пользователю разрешено создавать, переименовывать, закрывать и повторно открывать темы форума; только для супергрупп
can_manage_direct_messages Boolean Опционально Передайте True, если администратор может управлять прямыми сообщениями в канале и отклонять предложенные посты; только для каналов

Примеры

php

<?php

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

// Пример данных для повышения пользователя до администратора
$chatId = -1001234567890; // ID супергруппы или канала (отрицательное число)
$userId = 123456789; // ID пользователя, которого повышаем

// Параметры для повышения (установка прав администратора)
$params = [
    'chat_id' => $chatId,
    'user_id' => $userId,
    'is_anonymous' => false,
    'can_manage_chat' => true,
    'can_delete_messages' => true,
    'can_manage_video_chats' => true,
    'can_restrict_members' => true,
    'can_promote_members' => false, // Обычно не даём право повышать других
    'can_change_info' => true,
    'can_invite_users' => true,
    'can_post_stories' => false,
    'can_edit_stories' => false,
    'can_delete_stories' => false,
    'can_post_messages' => true, // Для каналов
    'can_edit_messages' => true, // Для каналов
    'can_pin_messages' => true, // Для супергрупп
    'can_manage_topics' => true, // Для супергрупп с форумами
    'can_manage_direct_messages' => false, // Для каналов
];

// Пример для понижения пользователя (все параметры false)
$demoteParams = [
    'chat_id' => $chatId,
    'user_id' => $userId,
    'is_anonymous' => false,
    'can_manage_chat' => false,
    'can_delete_messages' => false,
    'can_manage_video_chats' => false,
    'can_restrict_members' => false,
    'can_promote_members' => false,
    'can_change_info' => false,
    'can_invite_users' => false,
    'can_post_stories' => false,
    'can_edit_stories' => false,
    'can_delete_stories' => false,
    'can_post_messages' => false,
    'can_edit_messages' => false,
    'can_pin_messages' => false,
    'can_manage_topics' => false,
    'can_manage_direct_messages' => false,
];

// Функция для отправки запроса
function promoteChatMember($apiUrl, $params) {
    $url = $apiUrl . 'promoteChatMember';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    if (curl_errno($ch)) {
        $error = curl_error($ch);
        curl_close($ch);
        return ['ok' => false, 'error' => "cURL Error: {$error}"];
    }
    
    curl_close($ch);
    
    if ($httpCode !== 200) {
        return ['ok' => false, 'error' => "HTTP Error: {$httpCode}"];
    }
    
    return json_decode($response, true);
}

// Пример использования для повышения
$result = promoteChatMember($apiUrl, $params);

if ($result['ok']) {
    echo "Пользователь успешно повышен до администратора!\n";
} else {
    echo "Ошибка: " . ($result['description'] ?? $result['error'] ?? 'Неизвестная ошибка') . "\n";
}

// Альтернативный вариант с использованием file_get_contents (требует allow_url_fopen)
function promoteChatMemberAlt($apiUrl, $params) {
    $url = $apiUrl . 'promoteChatMember?' . http_build_query($params);
    
    $context = stream_context_create([
        'http' => [
            'method' => 'GET',
            'ignore_errors' => true,
        ],
    ]);
    
    $response = file_get_contents($url, false, $context);
    
    if ($response === false) {
        return ['ok' => false, 'error' => 'Failed to get response'];
    }
    
    return json_decode($response, true);
}

// Пример с использованием имени пользователя канала
$channelParams = [
    'chat_id' => '@my_channel', // Использование username канала
    'user_id' => $userId,
    'can_post_messages' => true,
    'can_edit_messages' => true,
    'can_manage_direct_messages' => true,
    // Остальные параметры false или не указаны
];

// $result = promoteChatMember($apiUrl, $channelParams);

python

import asyncio
from telegram import Bot
from telegram.constants import ChatAdministratorRights

async def promote_user():
    bot = Bot(token="YOUR_BOT_TOKEN")
    
    # Параметры для повышения пользователя до администратора
    chat_id = -1001234567890  # ID супергруппы или канала
    user_id = 123456789  # ID пользователя
    
    # Создаем права администратора
    rights = ChatAdministratorRights(
        is_anonymous=False,
        can_manage_chat=True,
        can_delete_messages=True,
        can_manage_video_chats=True,
        can_restrict_members=True,
        can_promote_members=False,  # Не даем право назначать других администраторов
        can_change_info=True,
        can_invite_users=True,
        can_post_stories=False,
        can_edit_stories=False,
        can_delete_stories=False,
        can_post_messages=True,  # Для каналов
        can_edit_messages=True,  # Для каналов
        can_pin_messages=True,  # Для супергрупп
        can_manage_topics=True,  # Для супергрупп с форумами
        can_manage_direct_messages=True  # Для каналов
    )
    
    try:
        # Повышение пользователя
        result = await bot.promote_chat_member(
            chat_id=chat_id,
            user_id=user_id,
            **rights.to_dict()
        )
        
        if result:
            print("Пользователь успешно повышен до администратора")
        else:
            print("Не удалось повысить пользователя")
            
    except Exception as e:
        print(f"Ошибка: {e}")

# Альтернативный вариант с явным указанием параметров
async def promote_user_alternative():
    bot = Bot(token="YOUR_BOT_TOKEN")
    
    try:
        # Повышение с минимальными правами
        result = await bot.promote_chat_member(
            chat_id="@channelusername",
            user_id=123456789,
            can_change_info=True,
            can_delete_messages=True,
            can_invite_users=True,
            can_restrict_members=True,
            can_pin_messages=True,
            can_promote_members=False  # Важно ограничить это право для безопасности
        )
        
        print(f"Результат: {result}")
        
    except Exception as e:
        print(f"Ошибка: {e}")

# Пример понижения пользователя (demote)
async def demote_user():
    bot = Bot(token="YOUR_BOT_TOKEN")
    
    try:
        # Понижение пользователя - передаем False для всех boolean параметров
        result = await bot.promote_chat_member(
            chat_id=-1001234567890,
            user_id=123456789,
            is_anonymous=False,
            can_manage_chat=False,
            can_delete_messages=False,
            can_manage_video_chats=False,
            can_restrict_members=False,
            can_promote_members=False,
            can_change_info=False,
            can_invite_users=False,
            can_post_stories=False,
            can_edit_stories=False,
            can_delete_stories=False,
            can_post_messages=False,
            can_edit_messages=False,
            can_pin_messages=False,
            can_manage_topics=False,
            can_manage_direct_messages=False
        )
        
        if result:
            print("Пользователь успешно понижен")
            
    except Exception as e:
        print(f"Ошибка: {e}")

# Запуск асинхронной функции
if __name__ == "__main__":
    asyncio.run(promote_user())

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

  • API 3.1. Добавлен метод promoteChatMember
  • API 5.0. Обновлен метод promoteChatMember: Добавлен параметр is_anonymous
  • API 5.1. Обновлен метод promoteChatMember: Добавлены параметры can_manage_voice_chats и can_manage_chat
  • API 6.0. Обновлен метод promoteChatMember: Переименован параметр can_manage_voice_chats в can_manage_video_chats
  • API 6.3. Обновлен метод promoteChatMember: Добавлен параметр can_manage_topics
  • API 6.9. Обновлен метод promoteChatMember: Добавлены параметры: can_post_stories, can_edit_stories, can_delete_stories
  • API 9.2. Обновлен метод promoteChatMember: Добавлен параметр can_manage_direct_messages
Комментарии