Как создать частный канал на сервере Discord (не DM пользователя или бота), используя JDA: Java API Discord - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь заставить бота создать частный канал в гильдии, но не могу найти ничего в документации JDA, которая позволила бы этому случиться. ChannelAction, который возвращается при вызове createTextChannel(), имеет текст в качестве типа канала явно в возвращаемом виде (return new ChannelAction(route, name, guild, ChannelType.TEXT);).

В настоящее время у меня работает только создание текстового канала с:

guild.getController().createTextChannel(channelName).complete();

но мне нужно, чтобы это был частный канал. Я немного поэкспериментировал с попыткой написать собственный метод createPrivateChannel(), но он всегда возвращается к необходимости его реализации уже в JDA GuildController. java. Я также посмотрел на openPrivateChannel(), но это для DM между пользователем и ботом, и мне нужен частный канал в сервере / гильдии.

Есть идеи? Мне просто нужно go длинный маршрут и создать текстовый канал, а затем связываться с разрешениями, чтобы сделать его видимым для правильных пользователей?

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете создать «частный» канал, используя переопределения разрешений. Для этого вам сначала нужно создать этот канал, используя createTextChannel(name), который будет возвращать ChannelAction<TextChannel>.

. Этот интерфейс позволяет вам выполнить некоторые дополнительные настройки, такие как разрешение отменяет (нам это нужно). Вам нужно отказать в разрешении VIEW_CHANNEL для роли publi c роль @everyone и разрешить его для указанной роли / члена c, к которой вы хотите предоставить доступ.

public static void createTextChannel(Member member, String name) {
    Guild guild = member.getGuild();
    guild.createTextChannel(name)
         .addPermissionOverride(member, EnumSet.of(Permission.VIEW_CHANNEL), null)
         .addPermissionOverride(guild.getPublicRole(), null, EnumSet.of(Permission.VIEW_CHANNEL))
         .queue(); // this actually sends the request to discord.
}

В JDA 3.X вам нужно использовать guild.getController().createTextChannel(), но эта версия больше не поддерживается, и вы должны использовать JDA 4.X сейчас. Для получения дополнительной информации о миграции см. руководство по миграции .

...