使用DSharpPlus开发的C# Discord机器人命令无法在聊天提示中显示
解决DSharpPlus机器人命令不显示在聊天提示框的问题
你的命令能正常执行但不显示在聊天提示框,是因为当前用的是前缀触发命令,而Discord聊天提示框展示的是应用程序斜杠命令。要让命令出现在提示框里,需要把命令注册为斜杠命令,步骤如下:
1. 启用Slash Commands扩展
在初始化Discord客户端时,添加SlashCommands扩展:
var discord = new DiscordClient(new DiscordConfiguration { Token = "你的机器人Token", TokenType = TokenType.Bot, Intents = DiscordIntents.AllUnprivileged | DiscordIntents.MessageContent }); // 添加SlashCommands扩展 var slashCommands = discord.UseSlashCommands();
2. 修改命令类,添加斜杠命令属性
给你的命令添加[SlashCommand]属性,同时可以保留原[Command]属性来兼容前缀触发:
public class TestCommands : BaseCommandModule { // 同时支持前缀命令和斜杠命令 [Command("test"), Description("test command")] [SlashCommand("test", "test command")] public async Task Test(CommandContext ctx) { await ctx.Channel.SendMessageAsync($"Тестовое сообщение:\nПривет, {ctx.User.Username}"); } [RequireRoles(RoleCheckMode.Any, "꧁ঔৣ死𝓐𝓹𝓮𝔁 𝓟𝓻𝓮𝓭𝓪𝓽𝓸𝓻ঔৣ꧂","Admin")] [Command("shutdown"), Description("Shutdown command")] [SlashCommand("shutdown", "Shutdown command")] public async Task Shutdown(CommandContext ctx) { await ctx.Channel.SendMessageAsync("Выключение..."); Environment.Exit(0); } }
3. 注册命令模块
在客户端就绪事件中,注册你的命令模块到指定服务器(全局注册需要等待1小时左右生效,测试建议先指定服务器):
discord.Ready += async (s, e) => { // 替换为你的服务器ID ulong guildId = 1234567890; // 注册命令到指定服务器 await slashCommands.RegisterCommandsAsync<TestCommands>(guildId); // 如果要全局注册(所有服务器生效,需等待Discord审核): // await slashCommands.RegisterCommandsAsync<TestCommands>(); }; await discord.ConnectAsync(); await Task.Delay(-1);
注意事项
- 斜杠命令的权限控制:
[RequireRoles]属性对斜杠命令同样生效,但如果需要更精细的权限设置,可以在注册命令时配置SlashCommandBuilder的权限。 - 全局注册的斜杠命令需要Discord处理,通常需要1小时左右才能在所有服务器生效,测试阶段优先用服务器级注册。
- 确保机器人在Discord开发者门户中启用了
applications.commands权限。
内容的提问来源于stack exchange,提问作者Hehe_Boy -
相关产品推荐
相关产品推荐

