无法在我的 for 循环中使用 add_roles discord.py 重写

Posted

技术标签:

【中文标题】无法在我的 for 循环中使用 add_roles discord.py 重写【英文标题】:Can't use add_roles in my for loop discord.py rewrite 【发布时间】:2021-05-18 10:00:21 【问题描述】:

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

我可以让它打印出需要角色的正确 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\Tranquility\cogs\roles.py”,第 339 行,在 assignRolesByExp 等待 user.add_roles(role_name) 文件“C:\Users\johnj\AppData\Roaming\Python\Python38\site-packages\discord\member.py”,第 676 行,在 add_roles 等待请求(guild_id,user_id,role.id,reason=reason) AttributeError:“str”对象没有属性“id”

【问题讨论】:

【参考方案1】:

您似乎将str 传递给Role,而不是discord.py documentation 中定义的add_roles。但是,如果不访问其余的源代码,就无法说明如何解决该问题,只需确保您将 Roles 作为实际的 Role 对象而不是它们的字符串名称来检索。

【讨论】:

以上是关于无法在我的 for 循环中使用 add_roles discord.py 重写的主要内容,如果未能解决你的问题,请参考以下文章

Java for 循环没有在我的代码中终止

返回for循环python

在我的 for 循环中找不到逻辑错误

如何在我的 for 循环中正确实现睡眠功能? (Ubuntu)

我无法在我的 Python 项目中使用多线程

Powershell写入第一行但无法将后续行写入for循环中的文件