不和谐的bot代码无法超越角色更新

时间:2020-06-27 03:57:49

标签: discord.py discord.py-rewrite

背景:我目前正在开发一种用于管理用户权限的漫游器。为此,它为每个用户创建一个角色,在数据库中存储“假角色”(我未授予权限的角色)的权限,然后将用户角色修改为具有任何“假角色”的权限添加到用户。命令之一是角色转换命令,该命令将获取“真实角色”的权限,将其记录在数据库中,然后不协调地关闭该角色的所有权限,以将其转变为“伪角色”。 >

问题:但是,我的问题是,该机器人似乎无法编辑“真实角色”的权限,即使该机器人处于最高角色并且具有管理员权限。发生这种情况时,我没有收到任何错误消息,机器人只是拒绝继续执行特定的操作(我将在下面的代码中进行标记),但是整个程序仍在继续(我仍然可以运行其他命令)。我打开日志记录,发现以下警告: WARNING:discord.http: We are being rate limited. Retrying in 11326.73 seconds. Handled under the bucket "None:314497807501361154:/guilds/{guild_id}/roles/{role_id}"奇怪的是,我能够创建没有错误/警告的角色,并且如果漫游器仅位于一台服务器中,则该命令可以正常工作

我的想法:从日志警告中看,机器人似乎受到速率的限制,但是我的理解是,如果确实如此,那么就会出现实际错误(例如发现的错误) this question中),而不是在日志中显示警告。

问题:所以我的问题是

  1. 我是否假设机器人受到速率限制会出现错误?
  2. 如果机器人受到速率限制,可以采取哪些措施阻止这种情况的发生?
  3. 如果没有限制漫游器的速度,那么将导致此错误的原因是什么?如何解决该错误?

我的代码

    @pseudoRole.command(pass_context=True, hidden=True, name="convert")
    async def updateRole(self, ctx, *name):
            #assemble role name
            roleName = self.createName(name)
            logging.warning("BEGINNING CONVERT")
            #check if role exists
            roleObject = discord.utils.get(ctx.message.guild.roles, name=roleName)
            if roleObject == None:
                    await ctx.send("There is no role with the name **{0}**".format(roleName))
            else:
                    #add role to database
                    try:
                            server = "server"
                            self.connection.execute("""INSERT INTO roles (roleID, guildID, roleType, roleName, rolePermissions) VALUES (?,?,?,?,?)""", (roleObject.id, ctx.message.guild.id, server, roleObject.name, roleObject.permissions.value))
                            print("editing permissions")
                            logging.warning("EDITING PERMISSIONS")
                            await roleObject.edit(permissions=discord.Permissions(permissions=0)) #THIS IS THE LINE WHERE THE BOT STOPS
                            print("edit complete")
                            logging.warning("EDIT FINISHED")
                            await ctx.send("**{0}** has been converted".format(roleName))

                    except sqlite3.IntegrityError:
                            await ctx.send("No need to convert **{0}**, it already exists as a pseudo role".format(roleObject.name))

TL; DR :我的机器人无法编辑角色权限,这可能是由于速率限制所致

0 个答案:

没有答案