【问题标题】:Why do I keep getting a "Bad Request: 400" error on my bot with discord.net?为什么我在使用 discord.net 的机器人上不断收到“错误请求:400”错误?
【发布时间】:2020-11-11 08:15:49
【问题描述】:

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

错误请求: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 尝试执行 'purge' 但出错:DSharpPlus.Exceptions.BadRequestException: Bad request: 400

【问题讨论】:

  • A 400 Bad Request 是 HTTP 响应代码,而不是 .NET 异常。从您的代码中不清楚您是否/在哪里发出 HTTP 请求,因此请在您的问题中澄清这一点。此外,响应代码指示格式错误的请求,请确保您遵循所调用 API 的任何 API 文档。

标签: c# dsharp+


【解决方案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() 阻塞主线程。

【讨论】:

  • 那么还有其他方法可以执行我的清除命令吗?
  • 猜你可以使用单条消息删除。这使您可以删除超过 2 周的消息。可以尝试检查每条消息的日期。 Tbh 你不应该收到 400 错误,除非 lib 被破坏或者你确实删除了超过 2 周的消息
  • yh 我想我正在删除超过 2 周的邮件,但我会尝试在删除邮件之前检查邮件的日期
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2021-12-14
  • 2021-03-27
  • 2015-10-20
  • 2013-01-26
  • 2014-12-06
相关资源
最近更新 更多