当前位置: 首页 > 知识库问答 >
问题:

不能在我的for循环中使用add_rolesdiscord.py重写

拓拔德馨
2023-03-14

我有一个命令,当被调用时,将从mongob集合中获取用户标识列表,从不同的mongob集合中获取角色名称列表,然后通过这些列表查看哪些角色需要分配给哪些标识。

我可以让它打印出需要角色的正确ID,但我无法通过实际分配角色的最后一步。

    @commands.command(
        name='assignRolesByExp',
        aliases =['arbe'],
        description="Assign all members roles based on their Exp Points",
        #usage='[Role Name]',
    )
    @commands.has_permissions(administrator=True)
    async def assignRolesByExp(self, ctx):
        people = await self.bot.expAcc.get_all()


        roles = await self.bot.stockroles.get_all()
        filtered_roles=[]
        for i in roles:
            if i["expRequired"]>0:
                filtered_roles.append(i)

        for i in filtered_roles:
            roll_to_add = []
            role_name = i["_id"]
            role_exp_required = i["expRequired"]
            #print(role_name)
            for i in people:
                if i["expValue"]>= role_exp_required:
                    roll_to_add.append(i["_id"])
            
            for i in roll_to_add:
                user= ctx.guild.get_member(i)
                await user.add_roles(role_name)

我得到的错误是:文件“D:\WORK\DISCORD BOT\tanquity\cogs\roles.py”,第339行,在assignRolesByExp等待用户。添加角色(角色名称)文件“C:\Users\johnj\AppData\Roaming\Python\Python38\site packages\discord\member.py”,第676行,在添加角色等待请求(guild\u id,user\u id,role.id,reason=reason)属性错误:“str”对象没有属性“id”

共有1个答案

冀弘济
2023-03-14

看起来你是在把str而不是角色传递给add_角色,正如discord中定义的那样。py文档。但是,如果不访问其余的源代码,就说不出如何解决这个问题,只需确保将角色作为实际的角色对象检索,而不仅仅是它们的字符串名称。

 类似资料:
  • 问题内容: 这有效: 但是,这不是: 在第二个示例中,数组未添加到自身。 问题答案: 是的,不是 您所做的可能也是有效的代码,但是现在您正在做 它适用于数字类型(我假设您有)。没有数组索引的简化示例: 样品: 输出: -5 -5 5 5 为了清晰起见,从评论中复制: 您基本上是在说。在这种情况下,仅需指示它是一个正整数即可。这是有效的代码,但这不是您想要的。

  • 我正在开发一个程序来提供用户输入的一组文本行的信息。我必须做的操作之一是写字符数最多的一行。如果输入是“”(可以小于10),程序最多只能得到10行,接受更少的行 唯一的问题是,如果输入不符合“”的要求,它会给我这个错误,这对我来说很奇怪,因为如果他们输入10行,它就可以正常工作。我想它可能在循环中。任何帮助都将不胜感激! 以下是代码:

  • 在循环中,我是否可以对循环使用相同的计数器变量? 或者这些变量会相互影响吗?以下代码应该为第二个循环使用不同的变量,例如,还是可以?

  • 问题内容: 当我的研究使我相信循环是PHP中最快的迭代构造…为了使它更清晰时,您认为以下哪个会更快? 示例一 示例二 我的逻辑是,在示例中的每次迭代中,在每次迭代中访问myLargeArray的长度比在示例二中访问简单的整数值要昂贵。那是对的吗? 问题答案: 第一种方法较慢,因为必须在循环的每次迭代中都调用该函数。该方法本身非常快,但是调用该函数仍然有一些开销。通过将其移动到循环之外,您正在执行所

  • 问题内容: 我正在努力理解为什么我的代码处于一种状态而不是另一种状态。自从我讲完指针已经有一段时间了,所以我可能会生锈! 基本上,我有一个用于将对象存储在内存中的具有功能的存储库结构。 因此,它所做的全部工作就是将RW互斥锁锁定在其上,并将指针添加到由标识符引用的映射中。 然后,我得到了一个功能,该功能将基本上遍历这些对象的一部分,并将它们全部存储在存储库中。 上面的方法不起作用,看起来一开始一切

  • 问题内容: 我有以下程序。 执行后,我得到: 我们可以看到,已经执行了2次。但是,如果我稍作修改,例如: 我将收到错误“左侧没有新变量”。为什么这个? 问题答案: 这里有几件事。首先,让我们解决您问题的下半部分。 声明变量的默认方法是使用关键字,然后由运算符分配给它。 Go为我们提供了一个快捷方式,既可以声明变量也可以分配值 在您的示例中,当您第二次使用时,您试图重新声明一个在相同作用域内命名的新