Описание
Используйте этот метод для повышения или понижения пользователя в супергруппе или канале. Бот должен быть администратором в чате для работы этого метода и иметь соответствующие права администратора. Передайте 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