Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查成员是否具有特定的角色是if语句?仅当您具有特定角色时才需要执行elif吗?_Python_Discord.py - Fatal编程技术网

Python 如何检查成员是否具有特定的角色是if语句?仅当您具有特定角色时才需要执行elif吗?

Python 如何检查成员是否具有特定的角色是if语句?仅当您具有特定角色时才需要执行elif吗?,python,discord.py,Python,Discord.py,我正在我的discord机器人中制作一个自动删除消息的功能,当我使用从审查列表中删除单词命令时,它搁浅了。因为我想从列表中删除的单词在列表中,所以msg get被bot删除。我想通过在我的on message delete message事件中添加一个额外的if来避免这种情况,该事件检查用户是否具有Admin角色或Mod角色。我期望的结果是,如果他们确实拥有这个角色,它将返回,并且msg delete将永远不会执行 if any(word in message.content fo

我正在我的discord机器人中制作一个自动删除消息的功能,当我使用从审查列表中删除单词命令时,它搁浅了。因为我想从列表中删除的单词在列表中,所以msg get被bot删除。我想通过在我的on message delete message事件中添加一个额外的if来避免这种情况,该事件检查用户是否具有Admin角色或Mod角色。我期望的结果是,如果他们确实拥有这个角色,它将返回,并且msg delete将永远不会执行

       if any(word in message.content for word in censorlist):
        if message.author == client.user:
            
            return
        
        elif
            
            return

        else:

            await message.delete()
    await client.process_commands(message)```

获得该角色主要有两种方式,
discord.utils.get
,还有
guild.get_角色
。无论如何,这里有两个例子

获取角色(需要id)

#在所有if语句之上的某个地方
admin\u role=message.guild.get\u角色(此处为id\u)
mod_role=message.guild.get_角色(此处为id_)
#然后在你的elif里
message.author.roles中的elif mod_角色或message.author.roles中的admin_角色:
这将通过id获取角色,并检查成员是否具有这些角色

utils.get(需要名称)

#在所有if语句之上的某个地方
admin\u role=discord.utils.get(message.guild.roles,name=“admin”)
mod_角色=
#然后在你的elif里
message.author.roles中的elif mod_角色或message.author.roles中的admin_角色:
这将通过名称获取角色,并检查成员是否具有该角色

或者也可以在一行中完成(看起来很糟糕)

elif discord.utils.get(message.author.roles,name=“Mod”)或discord.utils.get(messages.author.roles,name=“Admin”):
这利用了一个事实,即如果找不到对象,utils.get将返回None。因此,它正在搜索成员的角色以查找名为Admin/Mod的角色,如果未找到该角色,则该成员不具有该角色

一些甚至更短的不推荐方式

elif any(message.author.roles中角色的[mod\u role\u id,admin\u role\u id]中的role.id):
这会将成员的每个角色的id角色与mod&admin角色的角色id进行比较