发送后Discord机器人删除消息

时间:2020-08-13 22:32:16

标签: python discord discord.py

我的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 个答案:

答案 0 :(得分:1)

'735893522032623646',而str(message.author.roles)是包含Role个对象而不是Role IDS的列表,因此您需要检查它是否在Role 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)
相关问题