You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现Telegram Bot自动删除群组旧消息?

解决Telegram机器人自动删除旧消息的问题

核心思路是在机器人发送消息时直接保存返回的消息ID,而不是依赖getUpdates接口获取——因为getUpdates默认只会保留未处理的更新,机器人自身发送的消息若未触发其他操作,通常不会被记录。

具体实现步骤:

  1. 发送新消息前,尝试读取本地保存的旧消息ID,执行删除操作(如果ID存在)
  2. 发送新消息,提取返回的message_id并持久化保存
  3. 处理异常场景(如旧消息已被删除、保存文件不存在等)

修改后的代码示例:

import telegram
import os

# 配置参数
API_KEY = 'MyKey'
CHAT_ID = 'USERID'  # 统一变量命名,原代码的user_id实际为群组/聊天的chat_id
LAST_MSG_ID_FILE = '/var/tmp/telegram_last_msg_id.txt'  # 选择Ubuntu系统下可读写的路径

def main():
    bot = telegram.Bot(token=API_KEY)
    
    # 第一步:删除旧消息
    if os.path.exists(LAST_MSG_ID_FILE):
        with open(LAST_MSG_ID_FILE, 'r') as f:
            old_msg_id = f.read().strip()
            if old_msg_id:
                try:
                    bot.delete_message(chat_id=CHAT_ID, message_id=int(old_msg_id))
                    print(f"已删除旧消息ID: {old_msg_id}")
                except telegram.error.BadRequest as e:
                    print(f"删除旧消息失败: {e}")  # 兼容消息已被删除、权限不足等情况
    
    # 第二步:发送新消息
    record = "Test"
    new_msg = bot.send_message(chat_id=CHAT_ID, text=record)
    
    # 第三步:保存新消息ID到本地
    with open(LAST_MSG_ID_FILE, 'w') as f:
        f.write(str(new_msg.message_id))
    print(f"已发送新消息,ID: {new_msg.message_id}")

if __name__ == '__main__':
    main()

关键说明:

  • bot.send_message()会返回Message对象,其中message_id字段就是当前发送消息的ID,直接提取即可,无需额外调用接口。
  • 用本地文件持久化消息ID是最简单的方案,若有数据库资源,也可将ID存储到数据库中。
  • 确保运行脚本的用户对保存文件的路径有读写权限(Ubuntu下/var/tmp/路径默认具备该权限)。
  • 给机器人配置群组权限:需在Telegram群组中给机器人授予「删除消息」的权限,否则删除操作会失败。

内容的提问来源于stack exchange,提问作者Hans Germardies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:22:41