如何修复JS开发Telegram机器人时出现的403封禁错误?
修复Telegram机器人403 "bot was blocked by the user"错误
这个错误的核心原因很直接——目标用户已经将你的机器人拉黑/屏蔽,此时机器人没有权限再向该用户发送任何消息,调用ctx.reply()就会触发403禁止请求。
修复方案
1. 捕获并处理屏蔽错误
给消息发送逻辑添加错误捕获,避免程序崩溃,同时记录屏蔽状态:
bot.start(async (ctx) => { console.log(ctx.chat.id) try { if (newClient(ctx.message.chat.id)) { createLog(ctx.message.chat.id) await ctx.reply("Message") } else { await ctx.reply("Message") } } catch (error) { if (error.error_code === 403 && error.description.includes("blocked")) { console.log(`用户 ${ctx.chat.id} 已屏蔽机器人,无法发送消息`) // 可选:将该用户标记为已屏蔽,存入数据库避免后续重复尝试 } else { console.error("发送消息时出错:", error) } } })
2. 提前跳过屏蔽用户(可选)
如果有用户数据库,在发送前先检查用户状态,减少无效请求:
bot.start(async (ctx) => { const chatId = ctx.chat.id console.log(chatId) // 假设isUserBlocked是自定义的数据库检查函数 if (isUserBlocked(chatId)) { console.log(`用户 ${chatId} 已屏蔽机器人,跳过消息发送`) return } if (newClient(chatId)) { createLog(chatId) await ctx.reply("Message") } else { await ctx.reply("Message") } })
注意事项
- 用户屏蔽机器人后,只有用户主动取消屏蔽,机器人才能恢复通信权限,无法通过技术手段强制解除。
- 不要频繁向已屏蔽用户发送请求,可能触发Telegram的请求频率限制。
内容的提问来源于stack exchange,提问作者DoubleDragon
相关产品推荐
相关产品推荐

