批量删除 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();
这很完美。
[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();
这很完美。