如何始终将文本消息移动到新消息的位置?

时间:2021-05-19 20:54:53

标签: discord discord.py

我希望我在这里选择了合适的问题。我目前正在编写某种“粘性”消息。

它的一切都已经到位,但我在活动中遇到了一些麻烦。

我尝试使用 on_message 事件检查所有消息,并在每条消息之后发布此定义的消息。但是旧的没有删除。 这完全可以通过 discord.py 实现吗?

我想了 fetch 条消息,但没有找到删除此定义消息然后重新发布的方法。

我的代码如下:

    @commands.Cog.listener()
    async def on_message(self, message):
        if message.content and message.channel.id == 777073533687300106:
            embed = discord.Embed(color=discord.Colour.gold())
            with open('sticky.json', 'r') as file:
                data = json.load(file)
            sorted_data = {id: text for id, text in sorted(data.items(), reverse=True, key=lambda item: item[1])}

            for pos, (id, text) in enumerate(sorted_data.items()):
                embed.description = f"{text}"
            await message.channel.send(embed=embed)
        else:
            return

我希望我能在这里找到答案,提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以通过 message 获得 channel.fetch_message

old = await message.channel.fetch_message(id) #not sure which id you want to use 
await old.delete() 
await message.channel.send(embed=old.content)

根据您的尝试,我认为您需要获取 created_at 属性才能按创建时间对消息进行排序。我不明白您为什么在 for 循环中设置 embed.description = text,它只会覆盖所有其他文本值,并且您将只有一个文本。

参考文献:

注意:您可能还想在删除消息之前检查权限,可能会引发错误