You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Discord.js全局注册斜杠命令无法在用户私聊中显示的问题

Discord机器人DM斜杠命令不显示的问题排查与解决

这类机器人完全可以实现(比如ESMBot),你遇到的问题大概率是命令上下文配置、授权范围或部署流程的遗漏,以下是具体排查点:

1. 确保命令配置了正确的上下文(Contexts)

Discord.js v14+ 中,全局斜杠命令默认仅在服务器(Guild)上下文生效,若要在用户与机器人的私聊(DM)中显示,必须明确指定命令允许的上下文类型。

在你的命令定义(如ping.jssend.js)或部署脚本(deploy_commands.js)中,需要通过setContexts方法添加私聊上下文:

const { SlashCommandBuilder, ApplicationCommandContextType } = require('discord.js');

module.exports = {
  data: new SlashCommandBuilder()
    .setName('ping')
    .setDescription('Ping!')
    // 添加允许的上下文:服务器 + 用户与机器人的私聊
    .setContexts([
      ApplicationCommandContextType.Guild,
      ApplicationCommandContextType.PrivateChannel
    ]),
  // ... 执行逻辑
};

注意:ApplicationCommandContextType.PrivateChannel对应用户主动发起的与机器人的私聊,BotDM是机器人主动发起的私聊(一般不需要)。

2. 检查机器人邀请链接的授权范围(Scopes)

其他用户添加机器人时,邀请链接必须包含botapplications.commands两个权限范围,否则用户无法在私聊中使用斜杠命令。

正确的邀请链接格式(替换你的Client ID):

https://discord.com/oauth2/authorize?client_id=你的客户端ID&permissions=0&scope=bot%20applications.commands
  • permissions=0:私聊场景不需要服务器权限,设为0即可
  • 必须同时包含botapplications.commands两个scope,缺一不可

3. 确认全局命令部署的正确性

  • 确保deploy_commands.js中是全局部署(未指定guildId),而非仅部署到单个服务器:
    // 全局部署(所有服务器和DM生效)
    await rest.put(
      Routes.applicationCommands(clientId),
      { body: commands }
    );
    
    如果之前部署过服务器专属命令,需要先删除这些命令,避免冲突。
  • 部署命令后,等待Discord同步(通常需要1-5分钟,全局命令同步可能更久),再让用户测试。

4. 确保使用正确的Discord.js版本

无需使用开发版,稳定版v14.11.0及以上已支持setContexts方法,执行以下命令更新到最新稳定版:

npm install discord.js@latest

5. 检查应用的验证与权限状态

  • 如果你的机器人是未验证应用,且加入的服务器超过100个,Discord会限制命令的同步,此时需要完成应用验证才能正常使用全局命令(包括DM场景)。
  • 确认Discord开发者后台中,应用的Bot页面已启用所有必要的Intents(你已提到配置了全部Intents,这一点没问题,但需确保MESSAGE_CONTENT Intent已开启,若命令需要读取消息内容)。

6. 测试前的必要操作

  • 让添加机器人的用户重新打开Discord客户端/刷新网页版,避免缓存导致命令不显示。
  • 让用户在与机器人的私聊中,手动输入/并搜索你的命令,而非依赖自动提示(缓存问题可能导致自动提示延迟)。

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

火山引擎 最新活动