【问题标题】:How to get user's roles, Discord, Python如何获取用户的角色,不和谐,Python
【发布时间】:2017-12-07 03:55:32
【问题描述】:

我一直在改进和改进我的机器人。 现在,我已经弄清楚了如何让机器人清除消息,但是清除消息不应该允许任何成员,只允许具有特定角色的人。

我已经完成了这段代码:

if author.roles.has("BotModerator"):

我在这个网站(https://anidiotsguide.gitbooks.io/discord-js-bot-guide/information/understanding_roles.html) 上找过它,但似乎他们是用 Java 编码的,我怎么能用 Python 做呢?

顺便说一下,输出中显示的错误是'list' object has no atribute 'has'

【问题讨论】:

    标签: python discord


    【解决方案1】:

    User 的角色是role 对象的列表,您需要访问角色的名称属性。您可以使用列表推导。

    if "botmoderator" in [y.name.lower() for y in author.roles]:
    

    但是,当然,这会将命令仅限于具有特定角色的人,即 BotModerators。它不能在另一个服务器中使用,除非它们也有一个名为 BotModerator 的角色。我建议您改用 id。如果您不知道如何操作,请标记角色,然后在名称前加上反斜杠,然后发送。应该向您显示角色的 ID。然后你可以改用它。

    if "role_id" in [y.id for y in author.roles]:
    

    【讨论】:

    • 它一直说我没有这个角色,当我有的时候。 ._.
    • 没关系,我忘了保存。感谢您的帮助!
    • 嗯。实际上,只有在脚本上将角色名称设置为“botmoderator”时它才有效,如果我尝试其他方法,它会说我没有这个角色,即使我有。
    • 还要确保您拥有正确的角色名称,包括表情符号(如果有)。我建议你使用角色的 id 而不是 @Norby
    • 当我尝试为角色使用不同的名称时,会发生什么:prnt.sc/frluhh | prnt.sc/frlu50
    【解决方案2】:

    看起来author.roles 是python list。您可以像这样检查您的“BotModerator”角色是否存在:

    if "BotModerator" in author.roles:
    

    自己没试过,暂时无法验证。

    或者,如果每个角色都是一个对象,您可能需要类似:

    role_names = [role.name for role in author.roles]
    if "BotModerator" in role_names
    

    如果每个角色都是 dict,请尝试与上述相同,但使用 role['name']role.get('name') 而不是 role.name。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2022-09-27
      • 2022-09-29
      • 2021-01-05
      • 2018-09-11
      • 2021-01-18
      • 2020-11-08
      相关资源
      最近更新 更多