Описание
Используйте этот метод для ограничения пользователя в супергруппе. Бот должен быть администратором в супергруппе для работы этого метода и иметь соответствующие права администратора. Передайте True для всех разрешений, чтобы снять ограничения с пользователя. Возвращает True при успешном выполнении.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| chat_id | Integer или String | Да | Уникальный идентификатор целевого чата или имя пользователя целевой супергруппы (в формате @supergroupusername) |
| user_id | Integer | Да | Уникальный идентификатор целевого пользователя |
| permissions | ChatPermissions | Да | JSON-сериализованный объект для новых разрешений пользователя |
| use_independent_chat_permissions | Boolean | Опционально | Передайте True, если разрешения чата устанавливаются независимо. В противном случае разрешения can_send_other_messages и can_add_web_page_previews будут подразумевать разрешения can_send_messages, can_send_audios, can_send_documents, can_send_photos, can_send_videos, can_send_video_notes и can_send_voice_notes; разрешение can_send_polls будет подразумевать разрешение can_send_messages. |
| until_date | Integer | Опционально | Дата, когда ограничения будут сняты с пользователя; Unix-время. Если пользователь ограничен более чем на 366 дней или менее чем на 30 секунд от текущего времени, он считается ограниченным навсегда |
Примеры
php
<?php
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";
// Параметры для ограничения пользователя
$chatId = -1001234567890; // ID супергруппы или @username
$userId = 123456789; // ID пользователя для ограничения
// Создаем объект ChatPermissions с ограничениями
$permissions = [
'can_send_messages' => false,
'can_send_audios' => false,
'can_send_documents' => false,
'can_send_photos' => false,
'can_send_videos' => false,
'can_send_video_notes' => false,
'can_send_voice_notes' => false,
'can_send_polls' => false,
'can_send_other_messages' => false,
'can_add_web_page_previews' => false,
'can_change_info' => false,
'can_invite_users' => false,
'can_pin_messages' => false,
'can_manage_topics' => false,
];
// Ограничить на 1 час (текущее время + 3600 секунд)
$untilDate = time() + 3600;
// Подготовка данных для запроса
$data = [
'chat_id' => $chatId,
'user_id' => $userId,
'permissions' => json_encode($permissions),
'until_date' => $untilDate,
'use_independent_chat_permissions' => true
];
// Отправка запроса через cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . 'restrictChatMember');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
// Обработка ответа
$result = json_decode($response, true);
if ($result['ok']) {
echo "Пользователь успешно ограничен до " . date('Y-m-d H:i:s', $untilDate);
} else {
echo "Ошибка: " . $result['description'];
}
// Альтернативный вариант с использованием библиотеки (например, TelegramBotPHP)
/*
use TelegramBot\Api\BotApi;
$bot = new BotApi($botToken);
try {
$bot->restrictChatMember(
$chatId,
$userId,
$permissions,
$untilDate,
true // use_independent_chat_permissions
);
echo "Пользователь успешно ограничен";
} catch (\Exception $e) {
echo "Ошибка: " . $e->getMessage();
}
*/
// Пример снятия ограничений (передаем все разрешения как true)
/*
$unrestrictPermissions = [
'can_send_messages' => true,
'can_send_audios' => true,
'can_send_documents' => true,
'can_send_photos' => true,
'can_send_videos' => true,
'can_send_video_notes' => true,
'can_send_voice_notes' => true,
'can_send_polls' => true,
'can_send_other_messages' => true,
'can_add_web_page_previews' => true,
'can_change_info' => true,
'can_invite_users' => true,
'can_pin_messages' => true,
'can_manage_topics' => true,
];
$unrestrictData = [
'chat_id' => $chatId,
'user_id' => $userId,
'permissions' => json_encode($unrestrictPermissions),
'use_independent_chat_permissions' => true
];
*/
?>
python
import asyncio
from datetime import datetime, timedelta
from aiogram import Bot
async def restrict_user_example():
bot = Bot(token="YOUR_BOT_TOKEN")
# Пример ограничения пользователя в супергруппе
try:
# ID чата (можно использовать числовой ID или username)
chat_id = -1001234567890 # или "@supergroupusername"
# ID пользователя, которого нужно ограничить
user_id = 123456789
# Создаем объект ChatPermissions с нужными ограничениями
from aiogram.types import ChatPermissions
# Пример: разрешаем только чтение сообщений
permissions = ChatPermissions(
can_send_messages=False, # Не может отправлять сообщения
can_send_media_messages=False, # Не может отправлять медиа
can_send_polls=False, # Не может создавать опросы
can_send_other_messages=False, # Не может отправлять другие типы сообщений
can_add_web_page_previews=False, # Не может добавлять превью веб-страниц
can_change_info=False, # Не может изменять информацию чата
can_invite_users=False, # Не может приглашать пользователей
can_pin_messages=False # Не может закреплять сообщения
)
# Устанавливаем время ограничения (например, на 1 час)
until_date = int((datetime.now() + timedelta(hours=1)).timestamp())
# Вызываем метод restrictChatMember
result = await bot.restrict_chat_member(
chat_id=chat_id,
user_id=user_id,
permissions=permissions,
until_date=until_date,
use_independent_chat_permissions=True # Разрешения устанавливаются независимо
)
print(f"Пользователь успешно ограничен: {result}")
# Пример снятия всех ограничений
# Для снятия ограничений передаем permissions со всеми True
all_permissions = ChatPermissions(
can_send_messages=True,
can_send_media_messages=True,
can_send_polls=True,
can_send_other_messages=True,
can_add_web_page_previews=True,
can_change_info=False, # Эти права обычно остаются у администраторов
can_invite_users=False,
can_pin_messages=False
)
result = await bot.restrict_chat_member(
chat_id=chat_id,
user_id=user_id,
permissions=all_permissions
)
print(f"Ограничения сняты: {result}")
except Exception as e:
print(f"Ошибка: {e}")
finally:
await bot.session.close()
# Запуск асинхронной функции
if __name__ == "__main__":
asyncio.run(restrict_user_example())
История изменений
- API 3.1. Добавлен метод restrictChatMember
- API 4.4. Обновлен метод restrictChatMember: Изменен формат принимаемых параметров - теперь принимает объект ChatPermissions
- API 6.5. Обновлен метод restrictChatMember: Добавлен параметр use_independent_chat_permissions
Дополнительно
- ChatPermissions - Объект, описывающий разрешения для обычных пользователей в чате, включая отправку различных типов сообщений и другие действия.