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

Discord.Net机器人CreateGlobalApplicationCommandAsync无法创建全局斜杠命令

解决Discord.Net全局斜杠命令无法创建的问题

针对你遇到的全局斜杠命令注册后2天仍未显示的问题,可从以下方向排查解决:

  • 补充命令描述(核心问题)
    Discord要求所有斜杠命令必须包含描述信息,你的原代码仅设置了命令名称,缺少WithDescription调用,这会导致命令注册直接失败。修正后的命令构建代码:

    var slashCommand = new SlashCommandBuilder()
        .WithName("greet")
        .WithDescription("向用户发送问候消息"); // 必须添加1-100字符的描述
    
  • 确保在客户端就绪后执行注册
    命令注册逻辑必须放在Discord客户端的Ready事件中执行,不能在客户端初始化阶段直接调用,否则会因客户端未完成连接导致注册失败。示例完整流程:

    private DiscordSocketClient _discordClient;
    
    public async Task StartBot()
    {
        _discordClient = new DiscordSocketClient();
        _discordClient.Ready += OnClientReady;
    
        await _discordClient.LoginAsync(TokenType.Bot, "你的机器人Token");
        await _discordClient.StartAsync();
        await Task.Delay(-1); // 保持机器人运行
    }
    
    private async Task OnClientReady()
    {
        var slashCommand = new SlashCommandBuilder()
            .WithName("greet")
            .WithDescription("向用户发送问候消息");
    
        try
        {
            await _discordClient.CreateGlobalApplicationCommandAsync(slashCommand.Build());
            Console.WriteLine("全局斜杠命令注册成功");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"命令注册失败:{ex.Message}");
        }
    }
    
  • 验证机器人邀请权限
    邀请机器人到服务器时,必须包含applications.commands权限范围。若之前的邀请链接仅添加了bot权限,需重新生成包含applications.commands的邀请链接,重新邀请机器人。

  • 检查已注册命令
    通过以下代码查看当前全局命令列表,确认greet是否已存在:

    var existingCommands = await _discordClient.GetGlobalApplicationCommandsAsync();
    foreach (var cmd in existingCommands)
    {
        Console.WriteLine($"已注册命令:{cmd.Name} | 描述:{cmd.Description}");
    }
    
  • 捕获并查看异常信息
    注册命令时添加异常捕获,可直接定位问题根源,比如权限不足、Token无效、命令格式不符合规范等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:35:17