如何检查触发用户的特定角色?(discord.py)

时间:2021-05-27 10:01:14

标签: python discord.py

我有一个不和谐的机器人,我为管理功能创建了一些“命令”,例如:

  • 重启
  • 停止
  • 静音等...

但是当这些命令运行时,bot会立即删除触发消息,让任何人都看不到。

但我需要另一个解决方案来检查成员是否具有名为“管理员”的角色

但是我的代码,没有使用ctx命令,只是@on_message和if检查...

所以我需要一个与此类似的代码(并且可以工作:D):

@client.event
async def on_message(message):
    if message.content == ".admin reset":
        user = message.author
        if "Admin" in user.roles():
            #only for admins
            await message.channel.send("Resetting...")
        else:
            await message.channel.send("You are not an admin")

1 个答案:

答案 0 :(得分:0)

那是因为 user.roles 是一个 role 对象的列表,这里没有名称是我会做的:

@client.event
async def on_message(message):
    if message.content == ".admin reset":
        user = message.author
        if "Admin" in [role.name for role in user.roles]:
            await message.channel.send("Resetting...")
        else:
            await message.channel.send("You are not an admin")

只需使用 List Comprehension 列出角色名称即可。此外,user.roles 是一个属性而不是一个方法,因此后面不应有括号。