Метод restrictChatMember

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

Описание

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