Метод deleteMessage

Метод для удаления сообщений в чатах с учётом временных ограничений и прав бота.

Описание

Используйте этот метод для удаления сообщения, включая служебные сообщения, со следующими ограничениями:
- Сообщение можно удалить только если оно было отправлено менее 48 часов назад.
- Служебные сообщения о создании супергруппы, канала или темы форума нельзя удалить.
- Сообщение с игральной костью в личном чате можно удалить только если оно было отправлено более 24 часов назад.
- Боты могут удалять исходящие сообщения в личных чатах, группах и супергруппах.
- Боты могут удалять входящие сообщения в личных чатах.
- Боты с правами can_post_messages могут удалять исходящие сообщения в каналах.
- Если бот является администратором группы, он может удалять любые сообщения в ней.
- Если бот имеет право администратора can_delete_messages в супергруппе или канале, он может удалять любые сообщения там.
- Если бот имеет право администратора can_manage_direct_messages в канале, он может удалять любые сообщения в соответствующем чате прямых сообщений.
Возвращает True при успешном выполнении.

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

Примеры

php

<?php

// Токен вашего бота
$botToken = 'YOUR_BOT_TOKEN';

// ID чата и ID сообщения для удаления
$chatId = 123456789; // или '@channelusername'
$messageId = 987654321;

// URL для запроса к API Telegram
$apiUrl = "https://api.telegram.org/bot{$botToken}/deleteMessage";

// Подготовка данных для отправки
$postData = [
    'chat_id' => $chatId,
    'message_id' => $messageId
];

// Инициализация cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Отключить проверку SSL для локального тестирования

// Выполнение запроса
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Проверка на ошибки cURL
if (curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
} else {
    // Декодирование ответа
    $responseData = json_decode($response, true);
    
    if ($httpCode == 200 && $responseData['ok']) {
        echo "Сообщение успешно удалено!";
    } else {
        echo "Ошибка при удалении сообщения: " . ($responseData['description'] ?? 'Неизвестная ошибка');
    }
}

// Закрытие cURL
curl_close($ch);

// Альтернативный вариант с использованием file_get_contents (требует allow_url_fopen = On)
/*
$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'content' => http_build_query($postData)
    ]
]);

$response = file_get_contents($apiUrl, false, $context);
$responseData = json_decode($response, true);

if ($responseData['ok']) {
    echo "Сообщение успешно удалено!";
} else {
    echo "Ошибка: " . ($responseData['description'] ?? 'Неизвестная ошибка');
}
*/

?>

python

import requests

def delete_message(bot_token, chat_id, message_id):
    """
    Удаляет сообщение в чате.
    
    Args:
        bot_token (str): Токен вашего бота
        chat_id (int or str): ID чата или username канала
        message_id (int): ID сообщения для удаления
    
    Returns:
        bool: True если успешно, иначе False
    """
    url = f"https://api.telegram.org/bot{bot_token}/deleteMessage"
    
    payload = {
        "chat_id": chat_id,
        "message_id": message_id
    }
    
    try:
        response = requests.post(url, json=payload)
        response.raise_for_status()
        result = response.json()
        
        if result.get("ok"):
            return True
        else:
            print(f"Ошибка: {result.get('description')}")
            return False
            
    except requests.exceptions.RequestException as e:
        print(f"Ошибка запроса: {e}")
        return False
    except ValueError as e:
        print(f"Ошибка парсинга JSON: {e}")
        return False

# Пример использования:
if __name__ == "__main__":
    # Замените на реальные значения
    BOT_TOKEN = "YOUR_BOT_TOKEN"
    CHAT_ID = -1001234567890  # или "@channelusername" для канала
    MESSAGE_ID = 123
    
    # Удаление сообщения
    success = delete_message(BOT_TOKEN, CHAT_ID, MESSAGE_ID)
    
    if success:
        print("Сообщение успешно удалено!")
    else:
        print("Не удалось удалить сообщение")

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

  • API 3.0. Добавлен метод deleteMessage
  • API 4.2. Обновлен метод deleteMessage: Расширена функциональность: теперь можно удалять сообщения пользователей в личных чатах
Комментарии