Discord API - Как использовать SocketCommandContext или CommandService.ExecuteAsync для передачи дополнительных параметров? - PullRequest
0 голосов
/ 23 июня 2019

Я создаю бот-диск с помощью библиотеки с открытым исходным кодом. Вот как создаются все мои команды:

private async Task HandleCommandAsync(SocketMessage arg)
{
    var message = arg as SocketUserMessage;

    if(message is null || message.Author.IsBot)
        return;

    int argPos = 0;

    if(message.HasStringPrefix("!", ref argPos) || message.HasMentionPrefix(client.CurrentUser, ref argPos))
    {
        var context = new SocketCommandContext(client, message);
        var result = await commands.ExecuteAsync(context, argPos, services);

        if(!result.IsSuccess)
            Console.WriteLine(result.ErrorReason);
    }
}

А вот моя команда проблемы:

public class AddArchiveCommand : ModuleBase<SocketCommandContext>
{
DiscordSocketClient client;
SocketUserMessage msg;
List<Archive> archiveList;

public AddArchiveCommand(DiscordSocketClient client, SocketUserMessage msg, List<Archive> archiveList)
{
    this.archiveList = archiveList;
}
[Command("addarchive")]
public async Task AddArchiveAsync(ITextChannel sourceChan, ITextChannel destChan)
{
    Archive archive = new Archive(sourceChan.Id, destChan.Id, archiveList);
    archive.AddArchive(); //Using custom method rather than the list add because it check for more logic.
    await ReplyAsync("Now archiving " + sourceChan.Name + " to " + destChan.Name);
}
}

Я пытаюсь передать переменную List archiveList через конструктор из моего основного класса в команду, чтобы добавить запрос архива в этот список. Проблема в том, что я не могу сделать что-то столь же простое, как «var example = new AddArchiveCommand (archiveList)» из-за характера работы класса SocketCommandContext.

Что мне здесь не хватает? Спасибо за любое объяснение. Я застрял на этом несколько недель, и мне просто нужно поработать с кем-то над решением.

...