【问题标题】:How do I purge messages from a single user on discord.net and c#?如何在 discord.net 和 c# 上清除单个用户的消息?
【发布时间】:2017-12-26 14:57:14
【问题描述】:

我为我的 discord 机器人做了一个清除命令,它工作正常...

(简单版)

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);

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

【问题讨论】:

    标签: c# discord purge discord.net


    【解决方案1】:

    试试

    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 并在每一个上调用 delete。

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

    当然,您也需要进行一些安全检查,例如检查 e.GetArg("user") 是否为空、是否真的是用户、检查 msgs 是否包含任何消息、如果 e.Channel.Messages 小于您的 @987654326 @ 等未经测试,但这应该会让你朝着正确的方向前进。

    【讨论】:

    • 那行不通,如果我的命令说 5 条消息,它会下载 5 条最新消息,并在这 5 条中删除该用户的所有消息。例如,假设有问题的用户连续 6 次说同样的事情,我想删除最后 5 次,但是在那之后人们又发送了 3 条消息。如果我的命令有你发送的代码,并且我输入了 5 作为它应该的数量,它只会删除最后 2 条消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多