【问题标题】:Discord bot deleting message after sendingDiscord bot 发送后删除消息
【发布时间】: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')
    

【问题讨论】:

    标签: python discord discord.py


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2020-12-01
      • 2021-03-02
      • 2021-01-12
      • 2021-06-05
      • 2017-10-25
      • 2020-08-25
      • 2018-07-24
      • 2021-09-17
      相关资源
      最近更新 更多