discord.js 13.0.1批量发送频道消息时出现values undefined等报错如何修复
第一个报错触发原因
你的代码中let channels = client.guilds.channels是错误用法:discord.js v13 里client.guilds是全局服务器管理实例,不存在直接的channels属性,因此你拿到的channels变量值为undefined,调用undefined.values()自然会抛出该类型错误。
同时你要操作的是指令触发所在的单服务器频道,不需要从client全局取服务器资源,直接从触发消息的message.guild对象取当前服务器的频道即可。
第二个报错触发原因
调整代码后你直接遍历了服务器所有频道,没有做类型筛选:服务器频道包含分类、语音频道、公告频道、舞台频道等多种类型,只有普通文本频道才具备send()方法,遍历到非文本类型频道时调用不存在的send方法就会触发该报错。
最终修复代码
首先在代码头部引入discord.js的频道类型枚举:
const { ChannelType } = require('discord.js');
命令逻辑替换为以下内容:
else if(command == 'snd') { if(suffix == 'all'){ // 直接取当前服务器的所有频道缓存 const channelCache = message.guild.channels.cache; // 过滤出普通文本频道,同时校验机器人有该频道的发消息权限 const validTextChannels = channelCache.filter(channel => channel.type === ChannelType.GuildText && channel.permissionsFor(message.guild.members.me).has('SendMessages') ); // 遍历发送消息,加错误捕获避免单频道发送失败导致进程崩溃 validTextChannels.forEach(channel => { channel.send(sParameter[1]) .catch(err => console.log(`频道${channel.name}发送失败:`, err)); }); } }
内容的提问来源于stack exchange,提问作者Conta
相关产品推荐
相关产品推荐

