You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:24:02