1

我正在使用 c# 和一个名为DSharpPlus的库制作一个不和谐的机器人(如果这有帮助的话),我正在尝试制作一个 purge 命令,但我一直得到一个

错误请求:400

错误,我不知道如何解决它。我已经尝试在网上寻找它,但找不到任何东西,而且我对 C# 也有点陌生,并且已经在这方面做了很多事情,以至于我不能回去了。这是我的代码:

    [Command("purge")]
    [Description("Deleted A Certain Number Of Messages. (Max = 1000)")]
    [RequireBotPermissions(Permissions.Administrator)]
    [RequireUserPermissions(Permissions.Administrator)]
    public async Task Purge(CommandContext ctx, [Description("Number Of Messages To Be Deleted.")]int num)
    {
        int limit = 1000;
        
        if (num > limit)
            await ctx.Channel.SendMessageAsync("Too Many Arguments. Limit: 1000").ConfigureAwait(false);

        await ctx.Message.DeleteAsync().ConfigureAwait(false);

        var messages = await ctx.Channel.GetMessagesAsync(num).ConfigureAwait(false);

        await ctx.Channel.DeleteMessagesAsync(messages).ConfigureAwait(false);

        var embed = new DiscordEmbedBuilder
        {
            Title = $"{num} Messages Deleted!",
            Color = DiscordColor.Aquamarine
        };
        var deletedMessage = await ctx.Channel.SendMessageAsync(embed: embed).ConfigureAwait(false);
        Thread.Sleep(4300);
        await ctx.Channel.DeleteMessageAsync(deletedMessage).ConfigureAwait(false);
    }

如果它看起来很糟糕,那么我还是 C# 新手,所以我知道的不多。请帮助,因为我已经尝试了很多次,所以我现在只需要寻求帮助。谢谢!

编辑:基本上命令剂量确实有效,但它给了我一个错误Bad Request: 400,我真的不知道为什么。

如果这也有帮助,这就是我不断得到的:

Nitro7256 尝试执行“清除”但它出错:DSharpPlus.Exceptions.BadRequestException:错误请求:400

4

1 回答 1

1

(聚会迟到了)

如果您阅读了 discord 文档,它会告诉您它发送回 400 错误的原因。

  1. 批量删除的邮件限制为 100,而不是 1,000。获取消息也是这样

  2. 如果消息太旧,它也会返回 400 错误。

从批量删除文档本身:

This endpoint will not delete messages older than 2 weeks, and will fail with a 400 BAD REQUEST if any message provided is older than that or if any duplicate message IDs are provided.

获取消息文档:https ://discord.com/developers/docs/resources/channel#get-channel-messages

批量删除文档:https ://discord.com/developers/docs/resources/channel#bulk-delete-messages

显然您不需要手动发送请求。这只是向您展示 400 错误响应的原因。

边注:

使用await Task.Delay(4300)而不是Thread.Sleep(4300). Thread.Sleep()阻塞主线程。

于 2020-08-11T11:59:52.500 回答