Discord bot 编辑消息太慢

Sta*_*sio 2 javascript node.js discord discord.js

我希望我的 discordbot 发送一条消息,其中包含附件和文本。然后机器人必须编辑此文本几次,但问题是当机器人编辑消息 5 次时,它会等待一段时间,然后再次编辑 5 次等。如何让它在不停止的情况下编辑消息?

if(msg.content.includes("letter")){                                       


msg.channel.send("alphabet", { files: ["/Users/48602/Videos/discordbot/aaa.png"]})}
      if(msg.content === 'alphabet'){


        msg.edit("**a**")
        msg.edit("**b**")
        msg.edit("**c**")
        msg.edit("**d**") // Here bot stop for a 2 seconds and i dont know why
        msg.edit("**e**")
        msg.edit("**f**")
        msg.edit("**g**")
        msg.edit("**h**")
        msg.edit("**i**")
        msg.edit("**j**")// Here bot stop for a 2 seconds and i dont know why
        msg.edit("**k**")
        msg.edit("**l**")
        msg.edit("**m**")
        msg.edit("**n**")
        msg.edit("**o**") // Here bot stop for a 2 seconds and i dont know why

      msg.delete()
      }

Run Code Online (Sandbox Code Playgroud)

小智 7

Discord在每个请求中速率限制为 5。试图绕过这将被视为 API 滥用(后来的解决方案不是 API 滥用)。

超过此限制将暂停其他请求,直到经过特定秒数。随着我的研究,我遇到了这个简单的解释:( 5 anything per 5 seconds per server如果你不明白我上面说的话)。

Discord's Developer guide on rate limits 上,它告诉你:

对于共享相同速率限制的不同 HTTP 方法,上述规则 [速率限制] 目前有一个例外,那就是删除消息。删除消息属于单独的更高速率限制,以便机器人能够更快地从频道中删除内容(这对审核机器人很有用)。

一种不滥用 API 的解决方法是发送消息,然后删除以前的消息,因为删除消息有更高的限制。

另一种解决方法是为动画添加中间超时。一个简单的方法,例如:

function async wait = { require("util").promisify(setTimeout); };
//syntax: await wait(1000); to "pause" for 1 second
Run Code Online (Sandbox Code Playgroud)

您需要调整时间以使其适合您预期的动画速度,并且不会因速率限制而暂停。

  • discord.js 实际处理速率限制,这就是为什么它以 5 个突发发送它。这是计划行为。 (3认同)