具有 ADMINISTRATOR 权限的 Discord bot 缺少权限 MANAGE_CHANNEL

Discord bot with permission ADMINISTRATOR lacks of permission MANAGE_CHANNEL

当我使用 OAUTH2 URL GENERATOR 创建 join-url 时,我授予我的机器人权限 "ADMINISTRATOR"。我无法提供任何其他权限,因为 ADMINISTRATOR 应该授予机器人所有权限。

加入我的机器人后应该检查窗帘通道是否存在,如果不存在则创建它。有问题。我收到以下错误:

[JDA MainWS-ReadThread] ERROR net.dv8tion.jda.core.JDA - One of the             
EventListeners had an uncaught exception
net.dv8tion.jda.core.exceptions.InsufficientPermissionException: Cannot 
perform action due to a lack of Permission. Missing permission: MANAGE_CHANNEL
at net.dv8tion.jda.core.managers.GuildController.checkPermission(GuildController.java:2247)
at net.dv8tion.jda.core.managers.GuildController.createTextChannel(GuildController.java:1762)
at listeners.selfJoinListener.onGuildJoin(selfJoinListener.java:156)
at net.dv8tion.jda.core.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:513)
at net.dv8tion.jda.core.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:84)
at net.dv8tion.jda.core.handle.GuildSetupNode.completeSetup(GuildSetupNode.java:381)
at net.dv8tion.jda.core.handle.GuildSetupNode.handleMemberChunk(GuildSetupNode.java:284)
at net.dv8tion.jda.core.handle.GuildSetupNode.ensureMembers(GuildSetupNode.java:410)
at net.dv8tion.jda.core.handle.GuildSetupNode.handleCreate(GuildSetupNode.java:243)
at net.dv8tion.jda.core.handle.GuildSetupController.onCreate(GuildSetupController.java:185)
at net.dv8tion.jda.core.handle.GuildCreateHandler.handleInternally(GuildCreateHandler.java:40)
at net.dv8tion.jda.core.handle.SocketHandler.handle(SocketHandler.java:37)
at net.dv8tion.jda.core.requests.WebSocketClient.onDispatch(WebSocketClient.java:868)
at net.dv8tion.jda.core.requests.WebSocketClient.onEvent(WebSocketClient.java:766)
at net.dv8tion.jda.core.requests.WebSocketClient.handleEvent(WebSocketClient.java:745)
at net.dv8tion.jda.core.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:903)
at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:368)
at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:270)
at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:990)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:749)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)

这似乎是一个错误,因为正如我已经说过的那样,ADMINISTRATOR 权限应该允许机器人做基本上所有的事情(除了一些角色层次结构和服务器所有者的东西)。

有人知道如何解决这个问题吗?

//编辑1: 好的,我通过 OAuth2 向机器人授予了除 ADMINISTRATOR 之外的所有权限,但结果基本相同。机器人只是没有它应该拥有的权限。我是否对 OAuth2 和 url 生成器的工作方式有错误的理解?

机器人的权限是通过由 Discord 管理的角色添加的。不幸的是,此角色是在 加入事件触发后添加的,因此权限尚未准备就绪。 There is an open issue about this on GitHub.

您将不得不监听 GuildMemberRoleAddEvent,而不是监听加入事件。 该角色应具有应用程序的名称并具有 isManaged() return true.

更新: Discord 已经解决了上述问题,现在应该可以正常工作了。上述角色现在加入公会时出现,而不是稍后添加。