Discord bot 发送后删除消息

Posted

技术标签:

【中文标题】Discord bot 发送后删除消息【英文标题】:Discord bot deleting message after sending 【发布时间】:2020-12-03 19:54:17 【问题描述】:

我的 discord 机器人上有一个过滤器,可以删除来​​自所有人的消息,包括“discord.gg、@everyone、@here”,除非他们具有管理员角色。我的过滤器检查发送的每条消息,它首先检查该用户是否具有管理员角色,然后检查内容。如果某人在具有管理员角色时发送消息(包含这 3 个黑名单单词中的一个或全部),机器人将允许发送消息。 不知何故,过滤器停止工作,我不知道。该机器人是用 discord.py 编写的。 问题是过滤器阻止机器人发送任何类型的消息。我已经缩小到第 2 行(来自这段代码)。

@client.event
async def on_message(message):
    if '735893522032623646' not in str(message.author.roles):
        if 'discord.gg' in message.content:
            await message.channel.purge(limit=1)
            print('had inv link')
        if '@everyone' in message.content:
            await message.channel.purge(limit=1)
            print('had everyone')
        if '@here' in message.content:
            await message.channel.purge(limit=1)
            print('had here')
    

【问题讨论】:

【参考方案1】:

'735893522032623646' 而 str(message.author.roles) 是带有Role 对象的列表,而不是Role IDS,因此您需要检查它是否在角色IDS 列表中。

也可以使用message.delete() 代替purge() 来删除消息,有时purge 也可以删除其他消息

@client.event
async def on_message(message):
    if 735893522032623646 not in [i.id for i in message.author.roles]:
        if 'discord.gg' in message.content:
            await message.delete()
            print('had inv link')
        elif '@everyone' in message.content:
            await message.delete()
            print('had everyone')
        elif '@here' in message.content:
            await message.delete()
            print('had here')
    await client.process_commands(message)

【讨论】:

以上是关于Discord bot 发送后删除消息的主要内容,如果未能解决你的问题,请参考以下文章

discord.py Bot 并不总是删除消息

用户执行命令后,如何删除 discord.py 中的消息?

discord.js 发送自定义消息而不是镜像消息

Discord Bot 删除特定频道中的消息

如何让bot在反应后将消息发送到另一个频道|不和谐.js

使用 TypeScript 在 Discord Bot 开始/按时发送消息