Glitch OAuth2项目触发429限流,连接Discord Bot失败求助
Discord Bot登录触发429限流问题排查与解决
问题简述
使用discord.js v13.0.0在Glitch平台连接Discord Bot时,调用client.login()阶段就触发429状态码限流提示,更换三个不同Bot账号后问题仍存在。由于Glitch不支持兼容ReadableStream的Node.js版本(会导致项目崩溃),无法升级discord.js版本。调试仅能看到429报错和"Server running on PORT 3000"提示。
附:报错截图显示Discord返回的429限流提示,包含"Too Many Requests"相关内容
可能原因
- Glitch共享IP限流:Glitch的服务器IP为多用户共享,若该IP段已有大量Discord Bot请求,会触发Discord的全局IP限流,与Bot账号本身无关。
- 版本兼容性冲突:discord.js v13.0.0要求Node.js 16.6+,但当前Glitch使用的Node.js版本不满足要求,导致登录流程出现异常请求逻辑,触发限流。
- 频繁登录请求:短时间内多次重启项目、重复调用
client.login(),同一IP下的高频请求会被Discord判定为恶意请求,触发限流。
解决办法
- 更换部署环境:考虑将Bot部署到其他平台(如Replit、Vercel或私有服务器),避开Glitch的共享IP限流问题。若必须使用Glitch,可尝试多次重启项目触发IP更换(效果有限)。
- 降级discord.js版本:切换到discord.js v12.x版本,它对Node.js版本要求更低(Node.js 14+),更适配Glitch当前的Node.js环境,同时能避免v13的兼容性问题。
- 控制登录请求频率:避免频繁重启项目或重复调用登录接口,每次登录失败后添加至少1分钟的延迟再重试,示例代码:
function attemptLogin(token) { client.login(token).catch(err => { console.error("登录失败:", err); setTimeout(() => attemptLogin(token), 60000); // 1分钟后重试 }); }
- 检查代码逻辑:确保没有循环调用
client.login()的错误逻辑,比如未加延迟的重试机制,导致短时间内发送大量登录请求。
内容的提问来源于stack exchange,提问作者goosethebozo
相关产品推荐
相关产品推荐

