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
相关产品推荐
相关产品推荐

