为何群组有成员加入或退出时Telegram Bot会停止运行?
问题诱因
- 你当前监听的
message事件会响应所有类型的消息推送,包括群成员加入/退出的系统服务消息,这类消息没有text字段,所以msg.text值为undefined,直接调用match方法就会抛出类型错误。 - 你给事件回调声明了
async关键字,回调内抛出的错误会转为被拒绝的Promise,你没有配置catch逻辑处理这个异常,最终触发Node.js的未处理Promise rejection告警,导致程序停止运行。
修复方案
- 执行业务逻辑前先判断
msg.text是否存在,避免对undefined调用方法 - 给async回调增加try/catch块,捕获所有潜在异常,避免程序意外退出
修复后的代码示例:
const TelegramBot = require('node-telegram-bot-api'); const token = '1928095766:AAGf5aU7E1_FAM_fWzQs3SSGy-1AJS0DjcY'; const bot = new TelegramBot(token, { polling: true }); bot.on('message', async msg => { try { // 非文本类消息直接跳过处理 if (!msg.text) return const reg = /\d\d\-\d\d$/; if (msg.text.match(reg)) { await bot.sendMessage(msg.chat.id, 'Gh') } } catch (err) { // 可自行补充错误日志上报逻辑 console.error('消息处理异常', err) } })
内容的提问来源于stack exchange,提问作者Roman Savka
相关产品推荐
相关产品推荐

