Discord.Net Как перечислить все команды в группе

    <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

Как мне создать команду, скажем, под названием «список», которая затем автоматически отправит вставку со списком команд без необходимости писать вставку и заполнять ее автоматически? Если это невозможно сделать во встраивании, можно использовать обычное изображение. Я почти уверен, что для этого будет использоваться цикл for, но после этого я не знаю, как это сделать.


person SOPMOD    schedule 08.10.2020    source источник
comment
В CommandService есть вся информация, необходимая для того, чтобы делать то, что вы хотите. Просто введите его в свой модуль через внедрение зависимостей и посмотрите на его различные свойства. Вы можете получить все модули, подмодули, команды внутри этих модулей и т. д.   -  person Anu6is    schedule 09.10.2020
comment
Я не уверен, с чего начать..   -  person SOPMOD    schedule 09.10.2020
comment
Я действительно новичок, когда дело доходит до кодирования, и я понятия не имею, как сделать инъекцию или с чего начать.   -  person SOPMOD    schedule 09.10.2020


Ответы (1)


Где-то в вашей программе у вас, вероятно, будет что-то вроде

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

Затем вы можете создать свою справочную команду в этом классе, который теперь имеет доступ к 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.

person Anu6is    schedule 12.10.2020
comment
Спасибо за помощь. Я не кодировал бота с нуля, я смотрел видео, которому было пару лет, поэтому не знаю, где выполнить этот код. Посмотрел мой обработчик команд hastebin.com/xikonuyire.properties, который кажется единственным местом, где упоминается поставщик услуг, но не могу собрать все это вместе. Спасибо за помощь. - person SOPMOD; 12.10.2020