1

我不是一个编码员或任何我只是为了好玩而做的事情!我和一些朋友所在的服务器需要一个机器人,当然有大量的机器人可用,但我想我会继续尝试自己的运气。我知道一些基本代码,并且我已经用 C# 编写了一个简单的机器人,但是对于我的生活,我无法弄清楚如何制作一个清除命令。我目前创建的是这样的:

RegisterPurgeCommand();
private void RegisterPurgeCommand()
{
   commands.CreateCommand("purge")
   .Parameter("PurgeAmount")
   .Do(async (e) =>
   {
      var messagesToDelete = await e.Channel.DownloadMessages(convert.ToInt32(e.GetArg("purgeAmount")));
      await e.Channel.DeleteMessages(messagesToDelete);
      await e.Channel.SendMessage(e.GetArg("purgeAmount") + "Messages Deleted.");
   });
}

如果您愿意,可以在此处以屏幕截图格式查看代码

我最初拥有的是一个清除命令,它按代码中的 x 数量删除消息,而不是我想要的数量。例如,我的目标是在 Discord 中我将按照 !purge 10 的方式做一些事情,并删除最后 10 条消息。我之前的 !purge 命令删除了之前的 10 条消息,但如果我想执行 7 条,它仍然会执行 10 条。

代码是:

RegisterPurgeCommand();
private void RegisterPurgeCommand()
{
   commands.CreateCommand("purge")
      .Do(async (e) =>
{
   Message[] messagesToDelete;
   messagesToDelete = await e.Channel.DownloadMessages(100);
   await e.Channel.DeleteMessages(messagesToDelete);
});
}

如果您愿意,可以在此处以屏幕截图格式查看代码

这工作得很好,但正如我所说的那样效率不高。

现在,我将完全诚实地说,我现在使用的方法(不起作用的方法)与 Gist 的解释无关。

所以它目前所做的是......绝对没有......它过去所做的是删除我告诉它在代码中删除的 x 条消息,例如,如果我想删除服务器中的 7 条消息,它将删除 10 条.

我想要它做的是,我可以告诉机器人删除服务器中的 x 条消息,无论其数量如何,而不是如果我想删除 7 条消息,它会删除 10 条。

也许我很容易错过一些东西?也许我只是忽略了一些愚蠢的事情?我是合法的迷路了。我写这篇文章时也是早上 6 点,所以可能也是这样。

4

1 回答 1

0

您正在解析 Parameter PurgeAmount 但实际上并未将其用于任何事情。

 messagesToDelete = await e.Channel.DownloadMessages(100);

在这一行而不是使用 100,使用您的清除量参数

用我的版本编辑:

所以我就是这样做的,忽略只是调试的控制台内容。

                    Console.WriteLine(_channel.Users);
                var userPermissions = _user.GetPermissions(_channel).ManageMessages;
                Console.WriteLine("Admin" + userPermissions);
                int number = int.Parse(_parameter);
                Message[] message = new Message[number];
                message = _channel.DownloadMessages(number).Result;
                if (userPermissions == true)
                {
                    _channel.DeleteMessages(message);
                    Console.WriteLine("Channel Admin: " + _user + " deleted messages from the channel: " + _channel);
                }
                else
                {
                    Console.WriteLine("User: " + _user + " tried to delete messages from: #" + _channel + " when they aren't an admin there.");
                }
于 2016-11-23T19:41:40.207 回答