discord py - 在多个服务器上删除具有相同内容的消息(原始删除)

Posted

技术标签:

【中文标题】discord py - 在多个服务器上删除具有相同内容的消息(原始删除)【英文标题】:discord py - Delete a message with same content on multiple servers (raw delete) 【发布时间】:2021-04-09 01:59:05 【问题描述】:

我正在编写一个全球聊天不和谐机器人(如this)

全局聊天是一个机器人,它与所有其他服务器共享来自特定频道的频道消息,使用该机器人并设置一个频道。如果用户在此频道中写了一条消息,机器人会以完全相同的消息布局将其发布到所有其他服务器上。

像这样的全球聊天需要良好的审核功能,例如快速轻松地删除消息。

现在这是我的问题:我想使用 on_raw_message_delete 事件,如果来自 global-bot 的版主在没有命令但使用 Discord 功能本身的情况下删除了频道消息,就会发生这种情况。

当用户删除一条不和谐的消息时,如何在所有其他服务器上删除完全相同的消息? 我认为我必须将消息保存在数据库中并且必须使用相似性检查,但我没有计划如何做到这一点。我真的需要帮助,我尽力了几天但不知道。我想要代码函数。

【问题讨论】:

【参考方案1】:

我会创建一个字典,键是用户制作的消息,值是您的机器人将发送到其他服务器的消息列表。

这样,当用户删除一条消息时,您可以在 on_raw_message_delete 方法中捕获该事件,获取已删除消息的 id,并在您的 dict 中获取该消息的值。

完成的代码可能如下所示:

messages = 

async def on_message(self, message):
    self.messages[message.id] = [await chan.send(message.content) for chan in linked_channels]

async def on_raw_message_delete(self, payload):
    for msg in self.messages[payload.message_id]:
        await msg.delete()
    

【讨论】:

以上是关于discord py - 在多个服务器上删除具有相同内容的消息(原始删除)的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py 以间隔将 dm 发送给多个特定成员

Discord.py 在命令方法上使用多个权限检查装饰器

Discord.py如何删除服务器中的所有角色

在python中同时运行多个协程[Discord.py]

Discord.py 重新上传图片

任务不删除消息,discord.py