如何使用 JDA 在 Discord 服务器(不是 user/bot DM)中创建私人频道:Java Discord API

How to create a private channel in a Discord server (not a user/bot DM) using JDA: Java Discord API

我试图让机器人在公会中创建一个私人频道,但在 JDA 文档中找不到任何允许这样做的内容。当您调用 createTextChannel() 时获得 returned 的 ChannelAction 在 return (return new ChannelAction(route, name, guild, ChannelType.TEXT);).

中明确将文本作为频道类型

目前我正在努力创建一个文本频道:

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

但我需要它是一个私人频道。我尝试了一些尝试编写自己的 createPrivateChannel() 方法,但它总是需要在 JDA GuildController.java 中已经实现它的一些实现。我也看过 openPrivateChannel() 但那是针对用户和机器人之间的 DM,我需要 server/guild.

中的私人频道

有什么想法吗?我是否只需要走很长的路并创建文本通道,然后弄乱权限以使其对正确的用户可见?

您可以使用权限覆盖创建 "private" 频道。为此,您首先需要使用 createTextChannel(name) which will return a ChannelAction<TextChannel>.

创建该频道

此界面允许您进行一些额外的配置,例如权限覆盖(我们需要这个)。您需要拒绝 public 角色 @everyoneVIEW_CHANNEL 权限,并允许您想要授予访问权限的特定 role/member。

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。有关如何迁移的更多信息,请参阅 the migration guide