如何使用JDA:Java Discord API在Discord服务器(不是用户/机器人DM)中创建专用通道



我试图让机器人在公会中创建一个私有频道,但在JDA文档中找不到任何允许这种情况发生的内容。调用createTextChannel()时返回的通道操作在返回 (return new ChannelAction(route, name, guild, ChannelType.TEXT);( 中将文本显式作为通道类型。

目前,我的工作是创建一个文本通道:

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

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

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

您可以使用权限覆盖创建"专用"频道。为此,您首先需要使用createTextChannel(name)创建该通道,这将返回一个ChannelAction<TextChannel>

此接口允许您执行一些其他配置,例如权限覆盖(我们需要这个(。您需要拒绝公共角色@everyoneVIEW_CHANNEL权限,并允许要授予访问权限的特定角色/成员的权限。

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。有关如何迁移的详细信息,请参阅迁移指南。

最新更新