【问题标题】:Command raised an exception: AttributeError: 'User' object has no attribute 'roles'命令引发异常:AttributeError:“用户”对象没有属性“角色”
【发布时间】:2021-12-04 21:01:23
【问题描述】:

以下代码在服务器内部运行:

@client.command()
async def test(ctx):
    await ctx.send(len(ctx.author.roles))

通过 PM 我得到:

Command raised an exception: AttributeError: 'User' object has no attribute 'roles'

好像看不懂角色,知道怎么解决吗?

【问题讨论】:

  • 你应该如何阅读 DM 中的角色?角色是每个公会的,你可以在不同的服务器上拥有不同的角色布局。
  • 我要定义服务器?

标签: python discord.py roles


【解决方案1】:

Member 视为“公会用户”,将User 视为“不和谐用户”。

正如例外所说:'User' object has no attribute 'roles'roles 只是公会不和谐的东西;没有这种东西叫User.roles,因为“Discord”本身没有“角色”。

您要查找的是Member,因为他们是“公会用户”,只有“公会用户”才能拥有roles

所以当你的命令在 DM(又名 PM)中被调用时,你的 Member 也会消失,因为就像我说的,它们存在于公会中,而在 DM 中则不存在。

在 DM 中,您留下的是 User。这就是你不能在 DM 中使用 ctx.author.roles 的原因,因为 ctx.authorUserUser 对象没有任何 role

您可以尝试获得Member,但同样Member 是公会的一部分,因此您需要Guild

一旦你有了Guild:你可以查看Guild 的所有Members 并在Guild 中找到你的命令作者(又名ctx.author's)Member 版本,这样你就可以寻找它的角色。

整个过程分为3部分:

  • 找到Guild。 (这是最难的部分。)
  • Guild 中找到UserMember 版本。
  • 终于得到了你的MemberRoles

第一个流程,我可以给你链接: User.mutual_guilds, Guild.text_channels, TextChannel.history, Context.prefix and Context.invoked_with

对于第二个流程,我可以链接: utils.getUser.id

而对于第三个进程:您可以简单地使用Member.roles

哒哒!现在您拥有使该命令正常工作的所有资源。

【讨论】:

    猜你喜欢
    • 2021-01-30
    • 2021-12-07
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2021-02-05
    • 2021-07-18
    相关资源
    最近更新 更多