Discord.Net 如何列出组中的所有命令

Discord.Net How to list all commands in a group

    <Group("math")>
Public Class cmd_math
    Inherits ModuleBase

#Region "Add"

    <Command("add")>
    Public Async Function cmdAdd(ByVal num1 As Integer, <Remainder> ByVal num2 As Integer) As Task

        Dim sum = num1 + num2
        Dim user = Context.User
        Dim channel = Context.Channel

        Await channel.SendMessageAsync($"{user.Mention} the sum of the two specified numbers are {sum}")

    End Function

#End Region

#Region "Subtract"

    <Command("sub")>
    Public Async Function cmdSub(ByVal num1 As Integer, <Remainder> ByVal num2 As Integer) As Task

        Dim sum = num1 - num2
        Dim user = Context.User
        Dim channel = Context.Channel

        Await channel.SendMessageAsync($"{user.Mention} the sum of the two specified numbers are {sum}")

    End Function

#End Region

#Region "Multiply"

    <Command("multi")>
    Public Async Function cmdMulti(ByVal num1 As Integer, <Remainder> ByVal num2 As Integer) As Task

        Dim sum = num1 * num2
        Dim user = Context.User
        Dim channel = Context.Channel

        Await channel.SendMessageAsync($"{user.Mention} the sum of the two specified numbers are {sum}")

    End Function

#End Region

#Region "Divide"

    <Command("divide")>
    Public Async Function cmdDivide(ByVal num1 As Integer, <Remainder> ByVal num2 As Integer) As Task

        Dim sum = num1 / num2
        Dim user = Context.User
        Dim channel = Context.Channel

        Await channel.SendMessageAsync($"{user.Mention} the sum of the two specified numbers are {sum}")

    End Function

#End Region

End Class

我将如何着手创建一个名为 'list' 的命令,然后它会自动发送带有命令列表的嵌入,而无需编写嵌入并自动填充它?如果不能在使用常规图像的嵌入中完成,也可以。我很确定它会为此使用 for 循环,但在那之后,我不知道如何处理它。

在你的程序中的某个地方你可能会有类似

的东西
Dim collection As New ServiceCollection()
collection.AddSingleton(DiscordSocketClient())

或者您将您的客户添加到您的 IserviceProvider
ServiceProvider就是用来做依赖注入的。要注入命令服务,您需要将其添加到 ServiceCollection

collection.AddSingleton(New CommandService())

要将其注入您的命令模块,只需向您的构造函数添加一个参数

Public Class YourCommandModule
    Inherits ModuleBase(Of SocketCommandContext)

    Private ReadOnly Property Commands As CommandService

    Public Sub New(commands As CommandService)
        Me.Commands = commands
    End Sub

然后您可以在 class 中创建您的帮助命令,它现在可以访问 CommandService

    <Command("Help")>
    Public Async Function Help() As Task
        'Create your embed builder 
        '...

        'You can access all module classes using `CommandService.Modules`
        For Each moduleData As ModuleInfo In Commands.Modules
            Dim cmds As List(CommandInfo) = moduleData.Commands 'this gives a list of all commands in this class 
            'you can now do something with that list of commands 
            'add each one to a embed field for example
        Next
    End Function

您可以查看您可以通过 ModuleInfo 和 CommandInfo 访问的不同内容