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

使用node-telegram-bot-api开发Node.js Telegram机器人时如何实现发送cls清空聊天

实现方案

现有代码问题排查

  • bot.deleteMessage(chatId, messageId) 方法的第二个参数应为待删除消息的ID,你传入了chat.id也就是聊天ID,参数不匹配无法正常执行删除操作
  • Telegram Bot API没有提供一次性清空整个聊天所有消息的原生接口,只能通过循环逐条删除历史消息实现
  • 权限前置要求:群聊场景下需要给机器人开放「删除消息」的管理员权限,且仅能删除48小时内发送的消息;私人聊天场景下机器人只能删除自己发出的消息,无法删除用户发送的消息

功能实现代码

const { chat, message_id } = message
const chatId = chat.id
const text = message.text

if (text === 'cls') {
  // 先删除用户刚发送的cls指令消息
  bot.deleteMessage(chatId, message_id).catch(err => console.log('删除cls消息失败:', err))

  let currentMsgId = message_id - 1
  let deleteCount = 0
  const maxDelete = 100 // 单次最多删除条数,可自行调整

  const deleteBatch = async () => {
    while (deleteCount < maxDelete && currentMsgId > 0) {
      try {
        await bot.deleteMessage(chatId, currentMsgId)
        deleteCount++
        currentMsgId--
        // 添加短延迟避免触发API频率限制
        await new Promise(resolve => setTimeout(resolve, 50))
      } catch (err) {
        // 遇到无法删除的消息(超出48小时/权限不足/消息不存在)直接终止循环
        break
      }
    }
    // 发送清空提示,2秒后自动删除提示消息
    const tipMsg = await bot.sendMessage(chatId, `已清空最近${deleteCount}条消息`)
    setTimeout(() => bot.deleteMessage(chatId, tipMsg.message_id), 2000)
  }

  deleteBatch()
}

注意事项

  • 不要设置过大的单次删除数量,否则很容易触发Telegram Bot API的频率限制,导致账号被临时限制调用接口
  • 如果需要清空更多历史消息,可以做分页循环处理,每轮删除之间增加更长的延迟
  • 如果是超级群/频道场景,你可以通过导入聊天导出的消息ID列表定向删除,避免逐个递减ID尝试的无效请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:01