Discord机器人执行info命令或入新服务器时broadcastEval空值错误求助
解决Discord机器人
broadcastEval空值错误 问题分析
你遇到的TypeError: Cannot read properties of null (reading 'broadcastEval')错误,本质是代码尝试调用一个null对象的broadcastEval方法。从报错路径看,问题出在info.js第7行,大概率是你写了类似client.shard.broadcastEval(...)的代码,但当前机器人实例的client.shard属性为null。
broadcastEval是Discord.js中**分片管理器(ShardingManager)**的专属方法,只有当机器人启用分片模式运行时,client.shard才会被初始化。如果你的机器人没有启用分片,直接访问client.shard就会得到null,进而触发这个错误。
修复方案
方案1:不需要分片的情况
如果你的机器人规模较小,不需要分片,直接替换掉broadcastEval的调用逻辑,用本地数据获取即可。比如要统计服务器总数:
// 替换原来的broadcastEval代码 const guildCount = client.guilds.cache.size; const userCount = client.users.cache.size;
方案2:需要兼容分片/非分片模式
如果你的机器人可能在分片或非分片环境运行,添加空值检查即可:
let guildCount; // 先判断分片是否存在 if (client.shard) { // 分片模式下广播获取所有分片的服务器数量并求和 guildCount = (await client.shard.broadcastEval(c => c.guilds.cache.size)).reduce((total, count) => total + count, 0); } else { // 非分片模式直接取本地数据 guildCount = client.guilds.cache.size; }
额外排查
如果机器人加入新服务器时也报错,检查guildCreate等相关事件处理代码,看是否也存在同样未检查client.shard就调用broadcastEval的情况,按上述方式统一修复即可。
内容的提问来源于stack exchange,提问作者Devansh Yadav
相关产品推荐
相关产品推荐

