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

Discord SDK如何仅向指令所在服务器的所有频道发送消息

解决方案

核心修改逻辑是放弃遍历客户端全局的频道缓存,改为从指令触发的消息对象中获取当前所在服务器的频道列表,仅遍历该服务器的频道即可。

具体修改步骤

  • 你现有逻辑外层的消息事件回调中一定可以拿到触发指令的message对象,直接调用该对象的guild属性即可获取指令触发所在的服务器实例
  • 将原代码中client.channels.cache.forEach替换为message.guild.channels.cache.forEach,即可限定遍历范围为当前服务器
  • 额外补充边界判断:避免指令在私聊频道触发时报错,以及避免机器人无对应频道发消息权限时报错

修改后可直接运行的代码

else if(command == 'snd'){
    if(suffix == 'all'){
        // 过滤私聊触发的场景
        if(!message.guild) return;
        message.guild.channels.cache.forEach( channel => {
            // 仅向有权限发送消息的文本频道发消息
            if(channel.type == "GUILD_TEXT" && channel.permissionsFor(client.user).has("SEND_MESSAGES")) {  
                channel.send(sParameter[1])
            }
        });
    }
}

原代码中client.channels.cache存储的是机器人加入的所有服务器的所有频道,所以会出现跨服务器发消息的问题,message.guild.channels.cache仅存储当前触发服务器的频道列表,符合你的需求。

内容的提问来源于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 16:15:04