discord.net 中的 [Summary("")] 有什么用?

What is [Summary("")] used for in discord.net?

我想在 discord.net 中创建一个帮助命令,我想知道 [Summary("")] 有什么作用。是否可以获取命令摘要? discord.net 中的摘要是否类似于 discord.js-commando 中的 description:?我在 google 上进行了搜索,但找不到有关其功能的任何结果。

如果我想做一个帮助命令,我如何获得摘要?它有什么作用?

Summary 属性用于提供有关 类、方法或方法参数的一些信息。这本质上是一种 "metadata" 的形式,用于记录您的代码并允许您创建,例如,一个 "help" 命令,它自动从命令组中收集所有 Summary 属性,命令本身和命令方法的输入参数。 这将自动更新 "help" 命令,因此您不必手动执行。

展示用法的一些基本代码:

[Command("Help")]
public async Task Help()
{
    List<CommandInfo> commands = _commandService.Commands.ToList();
    EmbedBuilder embedBuilder = new EmbedBuilder();

    foreach (CommandInfo command in commands)
    {
        // Get the command Summary attribute information
        string embedFieldText = command.Summary ?? "No description available\n";

        embedBuilder.AddField(command.Name, embedFieldText);
    }

    await ReplyAsync("Here's a list of commands and their description: ", false, embedBuilder.Build());
}

Summary 是由discord.net 提供的属性。它在技术上不提供特定功能,但是如果您有兴趣创建帮助命令或为命令 and/or 参数提供额外的元数据,那么您可以通过 CommandService 访问它们。

它们可以通过CommandInfo、ModuleInfo 或ParameterInfo 访问。这意味着您可以像这样在机器人的模块、命令或参数上使用该属性:

[Summary("The Game Module")]
public class ManualGameManagement : ModuleBase
{
    [Command("Win", RunMode = RunMode.Sync)]
    [Summary("Increments a user's win counter")]
    public async Task WinAsync([Summary("The user")]params SocketGuildUser[] users)
    {
      //Do stuff...
    }
}

如果您看一下 CommandService,您可以使用 DependencyInjection 使用属性或构造函数将其注入模块,然后使用它来访问 CommandService#CommandsCommandService#Modules属性并检索摘要。 这也适用于类似于 SummaryRemarks 属性和接受多个字符串并用于让多个名称调用命令的 Alias 属性