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

2024-05-09

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

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

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

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

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


您可以使用权限覆盖来创建“私人”频道。为此,您首先需要使用创建该通道createTextChannel(name) https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/entities/Guild.html#createTextChannel(java.lang.String)这将返回一个ChannelAction<TextChannel> https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/requests/restaction/ChannelAction.html.

该接口允许您进行一些额外的配置,例如权限覆盖(我们需要这个)。你需要否认VIEW_CHANNEL公共角色的许可@everyone并允许您想要授予访问权限的特定角色/成员。

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。有关如何迁移的更多信息,请参阅迁移指南 https://github.com/DV8FromTheWorld/JDA/wiki/0)-Migrating-to-V4.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JDA 在 Discord 服务器(不是用户/机器人 DM)中创建私有频道:Java Discord API 的相关文章

随机推荐