Discord бота с разрешения ADMINISTRATOR не хватает разрешения MANAGE_CHANNEL - PullRequest
0 голосов
/ 10 июня 2019

Когда я создаю объединенный URL-адрес с OAUTH2 URL GENERATOR, я даю своему боту разрешение «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 должно позволять боту выполнять практически все (кроме некоторой иерархии ролей и вещей владельца сервера).

У кого-нибудь есть идеи, как решить эту проблему?

// EDIT1: Хорошо, я дал боту все разрешения, кроме ADMINISTRATOR через OAuth2, но результат в основном тот же. Бот просто не имеет разрешений, которые он должен иметь. У меня неправильное понимание того, как работают OAuth2 и генератор URL?

1 Ответ

1 голос
/ 10 июня 2019

Разрешения для бота добавляются через роль, которой управляет Discord. К сожалению, эта роль добавляется после событие присоединения запускается, и поэтому разрешения еще не готовы. Существует открытая проблема по этому поводу на GitHub .

Вместо прослушивания события соединения вы должны будете прослушивать GuildMemberRoleAddEvent. Роль должна иметь имя приложения и иметь isManaged() return true.

...