我目前正在尝试实现一个功能到我的不和谐机器人,在那里,我可以很容易地删除发送的消息后,设置了几秒钟。
这是我的功能:
async def messageCountdown(context, message, counter):
response = await context.send(f"**{'—' * counter}** \n {message}")
for i in range(counter, 0, -1):
await response.edit(content=f"**{'—' * i}** \n {message}")
await asyncio.sleep(1)
await context.message.delete()
await response.delete()
函数调用:
@client.command()
async def test(context, *message):
await messageCountdown(context, "Test", 10)
如果只调用一次:https://gyazo.com/3b1eef9ecf8ecbe6473e8b20dfcd19d1,则函数本身运行完全正常。
一旦我两次或更频繁地称其为倒计时,倒计时就会以一种奇怪的方式不一致地下降:https://gyazo.com/af4b23c5831ae90d5bc5a8461a22b0d7
我再次尝试了同样的方法,但是用time.sleep(1)
代替了time.sleep(1)
,结果是一样的。这就是我不知道如何继续的地方,因为我发现asyncio
应该解决这个问题,但它显然解决不了这个问题。而且,我也不明白为什么一个函数会阻塞相反的函数,因为异步和时间都不应该这样做,因为这个函数是异步的(这正好可以防止现在发生的事情,不是吗?)
发布于 2020-08-27 17:29:47
这里的async
函数没有问题。问题是API的费率限制不一致。
您可以调用该函数两次,因此它每秒钟编辑两次消息,而不是一次。
一旦达到了费率限制,机器人就会执行这个操作,但是由于费率限制,它还没有更新,一旦取消了利率限制,它就会立即更新消息,从而使它直接从步骤3跳到步骤1,从而导致消息的不一致更新。
阅读更多关于不和谐API速率限制的信息:here
https://stackoverflow.com/questions/63621920
复制相似问题