批量删除 discord.net 2.x 上的消息

Bulk delete messages on discord.net 2.x

    [Command("purge")]
    [Summary("Deletes the specified amount of messages.")]
    [RequireUserPermission(GuildPermission.Administrator)]
    [RequireBotPermission(ChannelPermission.ManageMessages)]
    public async Task PurgeChat(int amount)
    {
        var messages = Context.Channel.GetMessagesAsync(amount + 1).Flatten();
        await ((ITextChannel)Context.Channel).DeleteMessagesAsync(messages);
    }

我想删除最后 amount 条消息并想出了这个代码。但显然我收到一条错误消息

Severity Code Description Project File Line Suppression State Error CS1503 Argument 1: cannot convert from 'System.Collections.Generic.IAsyncEnumerable' to 'System.Collections.Generic.IEnumerable'

我正在使用 Discord.net 2.x。 我该如何修复错误以及为什么会发生?

您忘记了 await 关键字,

var messages = (await Context.Channel.GetMessagesAsync(amount + 1)).Flatten();

如果您需要这些与此方法中的另一个任务并行执行(我对此表示怀疑),您可以改用 ContinueWith() 方法。

我从 Discord-api 非官方服务器那里得到了一些帮助,他们告诉我我必须 await 这个方法并且还使用 FlattenAsync() 而不是 Flatten()在 discord.net 2.x 中。

所以我总结了

IEnumerable<IMessage> messages = await Context.Channel.GetMessagesAsync(amount + 1).FlattenAsync();
await ((ITextChannel) Context.Channel).DeleteMessagesAsync(messages);
const int delay = 3000;
IUserMessage m = await ReplyAsync($"I have deleted {amount} messages for ya. :)");
await Task.Delay(delay);
await m.DeleteAsync();

这很完美。