如何从discord.net和c#上的单个用户清除邮件?

问题描述:

我已经为我的不和谐机器人做了一个清除命令,它工作正常...如何从discord.net和c#上的单个用户清除邮件?

(简版)

int amount = Int32.Parse(e.GetArg("amount"))+1; 
Message[] messagesToDelete = await e.Channel.DownloadMessages(amount); 
await e.Channel.DeleteMessages(messagesToDelete); 

现在我想这样做,但仅从单个删除邮件用户,但我似乎无法得到它的工作......这就是我现在所拥有的:

int amount = Int32.Parse(e.GetArg("amount")); 
ulong userID = e.Server.FindUsers(e.GetArg("user")).First().Id; 

Message[] messagesToDelete = await e.Channel.DownloadMessages(amount, userID); 
await e.Channel.DeleteMessages(messagesToDelete); 

这第二个代码似乎只删除命令,并没有别的什么......我做错了?

尝试

using System.Linq; 

var users = e.Server.FindUsers(e.GetArg("user")).ToArray(); 
var msgs = (await e.Channel.DownloadMessages(amount)); 
msgs = msgs.Where(x => users.Contains(x.User)); 

然后遍历msgs,并呼吁删除每一个。

这将消息分隔成只包含我们感兴趣的消息(即指定用户的消息)。

你当然会想一些安全检查过,如检查是否e.GetArg("user")是空的,如果它实际上是一个用户,检查是否msgs包含任何消息,如果e.Channel.Messages小于你的amount等未经测试但这应该让你走向正确的方向。

+0

这是行不通的,如果我的命令说5条消息,它会下载5条最新的消息,并在这5条消息中删除该用户的所有消息。 例如,假设有问题的用户连续6次说了同样的事情,并且我想删除其中的最后5个,但是之后人们又发送了3条消息。如果我的命令有你发送的代码,并且我按照它的数量键入了5,它只会删除最后2条消息。 – Nyss