Я создаю бот-диск с помощью библиотеки с открытым исходным кодом. Вот как создаются все мои команды:
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.
Что мне здесь не хватает? Спасибо за любое объяснение. Я застрял на этом несколько недель, и мне просто нужно поработать с кем-то над решением.