【问题标题】:How do I add multiple roles form a list to a user?如何将列表中的多个角色添加到用户?
【发布时间】:2022-11-27 09:26:25
【问题描述】:

我有一个命令将用户的所有当前角色添加到数据库 (MongoDB)。

编码:

def add_roles_to_db(self):

    check = cursor.find_one({"_id": self.ctx.author.id})

    if check is None:
        cursor.insert_one({"_id": self.ctx.author.id, "roles": [str(r) for r in self.ctx.author.roles[1:]]})
    else:
        cursor.update_one({"_id": self.ctx.author.id}, {"$set": {"roles": [str(r) for r in self.ctx.author.roles[1:]]}})

获取角色的代码:

    def get_roles_from_db(self):
        return cursor.find_one({"_id": self.ctx.author.id})["roles"]

当我从数据库中获取角色时,我得到了一个列表,我尝试的所有操作都导致了错误。错误:“AttributeError:‘str’对象没有属性‘id’”

if len(roles) != 0:
    await author.add_roles(*roles)

我看到了另一篇帖子,其中有人通过列表添加了角色,但这没有用

【问题讨论】:

  • 你遇到了什么错误?您如何从数据库中获取角色?
  • @moinierer3000 我编辑了带有错误的帖子以及我如何获得角色

标签: discord.py pycord


【解决方案1】:

您传递的是字符串列表,而不是Roles 的列表。首先使用 id 将它们变成 discord.Role 实例,然后然后将它们传递给add_roles

您可以使用Guild.get_roleGuild.roles 获取它们。

【讨论】:

  • 要么我对此很愚蠢,要么它不起作用,但我无法让它工作
  • @Dr.Troll 好吧,我无法确切地闻到你试过的东西或错误是什么,所以这不是很有用的信息
【解决方案2】:
await author.add_roles(*[discord.Object(role_id) for role_id in roles])

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多