部署在Heroku上的Discord JS Bot随机崩溃问题求助
解决Discord Bot在Heroku上随机崩溃&命令失效问题
嘿,我仔细看了你的日志和问题描述,其实根源已经很明确啦!
问题核心定位
从崩溃日志里的关键报错就能找到答案:
ReferenceError: guild is not defined
这个错误出现在你的/app/events/guildMemberAdd.js文件第2行,代码是这样的:
const defaultChannel = member.guild.channels.find(channel => channel.permissionsFor(guild.me).has("SEND_MESSAGES"));
这里你用了guild.me,但guild这个变量根本没定义!你要调用的其实是当前成员所在服务器的信息,应该用member.guild来替代未定义的guild变量。
具体修复步骤
把guildMemberAdd.js里的出错代码改成下面两种写法之一就行:
- 直接替换变量:
const defaultChannel = member.guild.channels.find(channel => channel.permissionsFor(member.guild.me).has("SEND_MESSAGES"));
- 先定义变量让代码更清晰:
const guild = member.guild; const defaultChannel = guild.channels.find(channel => channel.permissionsFor(guild.me).has("SEND_MESSAGES"));
为什么本地运行没出问题?
你本地测试的时候,大概率没有新成员加入Bot所在的服务器,所以guildMemberAdd这个事件根本没被触发,自然不会暴露这个代码bug。而Heroku上运行时,Bot加入的22个服务器里只要有新成员进群,就会触发这个事件,直接导致Bot崩溃——这就是崩溃时间随机的原因,完全取决于新成员的加入时机。
关于命令失效的解释
你的Bot在Heroku上无法响应命令,本质是因为它频繁崩溃,处于离线/不可用状态,自然没法处理用户的命令请求。修复上面的代码错误后,Bot不再崩溃,命令应该就能正常工作了。
内容的提问来源于stack exchange,提问作者xItsDanger
相关产品推荐
相关产品推荐

