背景:我目前正在开发一种用于管理用户权限的漫游器。为此,它为每个用户创建一个角色,在数据库中存储“假角色”(我未授予权限的角色)的权限,然后将用户角色修改为具有任何“假角色”的权限添加到用户。命令之一是角色转换命令,该命令将获取“真实角色”的权限,将其记录在数据库中,然后不协调地关闭该角色的所有权限,以将其转变为“伪角色”。 >
问题:但是,我的问题是,该机器人似乎无法编辑“真实角色”的权限,即使该机器人处于最高角色并且具有管理员权限。发生这种情况时,我没有收到任何错误消息,机器人只是拒绝继续执行特定的操作(我将在下面的代码中进行标记),但是整个程序仍在继续(我仍然可以运行其他命令)。我打开日志记录,发现以下警告:
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中),而不是在日志中显示警告。
问题:所以我的问题是
我的代码:
@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 :我的机器人无法编辑角色权限,这可能是由于速率限制所致