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

使用node-telegram-bot-api开发的机器人无法自动删除消息问题

Telegram机器人自动删除图片消息失效的排查与解决

以下是几种常见原因及对应的解决办法:

1. 机器人权限不足

如果在群组/超级群组中运行,机器人必须拥有管理员权限且开启「删除消息」权限:

  • 将机器人设置为群组管理员
  • 在管理员权限设置里勾选「删除消息」选项

2. deleteTimer变量异常

确保deleteTimer是数字类型的毫秒值(比如5000代表5秒),如果是字符串或未定义,setTimeout会出现异常:

  • 补充定义const deleteTimer = 5000;(可根据需求调整时间)
  • 检查变量是否被意外覆盖或未初始化

3. 消息ID/聊天ID错误

  • 确认chatId正确性:群组的chatId为负数(如-123456789),不要遗漏负号
  • 在then回调中打印消息对象,确认message_id的位置:
    .then((m) => { 
      console.log('发送的消息详情:', m);
      // 确认输出中是否存在正确的message_id字段
    })
    

4. 未捕获删除操作的错误

原代码仅捕获了发送图片的错误,删除消息的失败未被记录,无法定位问题。修改代码给deleteMessage添加错误捕获:

setTimeout(() => { 
  bot.deleteMessage(chatId, m.message_id)
    .catch(err => console.log('删除消息失败:', err)) // 打印具体错误信息
}, deleteTimer)

常见删除错误包括:消息已被删除、权限不足、消息ID无效等,可根据错误提示快速定位问题。

修正后的完整代码示例

if (lowCaseWords.includes('someWord')) { 
  const randomNumber = Math.random(); 
  const deleteTimer = 5000; // 5秒后删除,可按需调整
  if (randomNumber < 0.1) { 
    bot.sendPhoto(chatId,
      'https:...',
      { 
        caption: `text`, 
        parse_mode: 'HTML'
      })
      .then((m) => { 
        console.log('发送的消息信息:', m); // 调试用,确认消息ID
        setTimeout(() => { 
          bot.deleteMessage(chatId, m.message_id)
            .catch(err => console.log('删除消息失败:', err))
        }, deleteTimer)
      })
      .catch(err => console.log('发送图片失败:', err))
   }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:21