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

运行.say命令时Discord Bot无响应排查(已匹配指定角色ID)

Discord Bot .say命令无响应问题排查

核心问题分析

  • 逻辑判断完全颠倒:代码里的if(!message.member.roles.cache.some(...))是指没有指定角色的用户才会进入命令执行分支,你本身拥有该角色,所以代码直接跳过了.say的逻辑,自然没任何响应。
  • 频道ID无效:日志频道ID里混了字母s(100704202s2756065411),Discord频道ID是纯数字,这个错误会导致发送日志失败,你没看到报错可能是没开启Bot的错误日志。
  • 命令匹配逻辑太死板:message.content === '.say'要求输入必须完全等于.say,如果输入.say 你好这种带内容的命令根本触发不了,应该用startsWith匹配前缀。
  • setTimeout参数错误:把延时时间写成了字符串'50',虽然JS会自动转换,但规范上应该用数字类型。

修复后的代码

client.on('message', async message => {
    // 忽略机器人自身消息
    if(message.author.bot) return;
    
    // 判断用户拥有指定角色才允许执行命令
    if(message.member.roles.cache.some(r => r.id === '1007043154182160466')){
        // 匹配以.say开头的命令
        if (message.content.startsWith('.say')) {
            // 提取命令后的内容
            const SayMessage = message.content.slice(4).trim();
            
            // 50ms后删除用户发送的命令消息
            setTimeout(() => message.delete(), 50);
            
            // 在当前频道发送内容
            message.channel.send(SayMessage);
            
            // 修正频道ID为纯数字,发送日志消息
            client.channels.cache.get('1007042022756065411')
                .send(`${SayMessage} **from** **${message.author.username}** (${message.author})`);
        }
    } else {
        // 无权限用户发送命令时添加⛔反应
        message.react('⛔');
    }
});

额外排查点

  • 确认Bot在服务器内拥有发送消息和删除消息的权限。
  • 如果Bot仍无法获取角色数据,尝试用await message.member.fetch()强制加载成员角色缓存,避免数据未加载的问题。

内容的提问来源于stack exchange,提问作者rat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:45:33