我希望我在这里选择了合适的问题。我目前正在编写某种“粘性”消息。
它的一切都已经到位,但我在活动中遇到了一些麻烦。
我尝试使用 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
我希望我能在这里找到答案,提前致谢。
答案 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
,它只会覆盖所有其他文本值,并且您将只有一个文本。
参考文献:
注意:您可能还想在删除消息之前检查权限,可能会引发错误