我正在编写一个机器人,我想研究如何有效地重新排序旧消息。
例如
频道上的消息序列,其中只有机器人发布或向机器人发出命令
Bot: "1"
Bot: "2"
Bot: "3"
Bot: "4"
Bot: "5"
然后用户使用命令$cycle
我希望频道上的消息然后阅读
Bot: "2"
Bot: "3"
Bot: "4"
Bot: "5"
Bot: "1"
[我没有在 aove 片段中编写用户命令,因为您可以用它做一些事情 - 但我最感兴趣的是我们正在用机器人消息序列做什么]
我可以看到几种方法来做到这一点,但由于 limits 发布编辑消息的速度不一致,我不确定哪种方法最有效。
机器人可以编辑每条消息 - 但这会达到他们的速度限制。或者可以再次发送消息 - 但这也会达到他们的速度限制。理想情况下,最好编辑放置它们的顺序,但 API 似乎不允许这样做。
这是一个 bot 命令,您可以使用它来生成与上述类似的消息序列。
@bot.command(name='repeat', help='type a sequence of words seperated by spaces and they will be repeated back to you as a sequence of messages')
async def repeat(ctx, *lines):
print("repeating")
await asyncio.gather(*[ctx.send(line) for line in lines])
这是我尝试发出循环命令
@bot.command(name='cycle', help='help me to understand bots')
async def cycle(ctx):
#prepare to read in the most recent sequence of messages from the bot
message = ctx.message
channel =message.channel
messages = []
#read them in
async for other_message in channel.history(before=message, limit=1000):
messages.append(other_message)
if other_message.author.name!= bot.user.name:
break
#missing code
以上内容会读入消息,以便您可以将它们编辑为新顺序、以新顺序重新发送它们或执行其他操作。循环命令的最快实现是什么?