SOLVED -类别/通道被设置为私有,这就是为什么即使有正确的权限也不能更改它们的原因。我的解决方案是告诉用户哪些是权限,并手动添加具有权限的角色。我添加了一条消息,说他们可以给机器人管理员权限,它会为他们做。希望这对将来遇到这种情况的人有所帮助。
我正在尝试使用以下代码更改多个类别和通道的权限:
role = get(guild.roles, name="Fun")
for channel in guild.channels:
overwrites = channel.overwrites_for(role)
overwrites.view_channel = False
await channel.set_permissions(role, overwrite=overwrites)
我得到以下错误:
await channel.set_permissions(role, overwrite=overwrites)
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
如果我给机器人管理员权限,它将工作。然而,如果我给机器人每一个其他的权限,它将无法工作,机器人是在角色的顶部,它有每一个类别的权限。我错过了什么?我用的是Novus (discord.py的分支,所以基本上是一样的)。
编辑:我已经问过discord.py、Novus和discord服务器的开发人员了,他们也帮不了我。除了不和谐的开发者服务器,他们只是没有回答我的问题。编辑2:当我手动将bot的角色添加到类别并启用view_channel时,我能够使其工作。但是,这行不通,因为这意味着服务器所有者必须为每个类别和频道手动执行此操作,这非常不方便。
这就是Discord的工作原理,如果通道是私有的,并且bot没有管理员权限或具有查看通道权限的角色,则无法查看它。
你可以创建一个机器人可以访问的新类别:
role = await guild.create_role(name="Fun")
category = await guild.create_category("category_name")
await category.set_permissions(role, read_messages=True, send_messages=True, connect=True, speak=True)
await category.set_permissions(ctx.guild.me, read_messages=True, send_messages=True, speak=True)
(如何给自己的bot权限查看类别?)