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

时间:2020-02-06 05:45:36

标签: discord-jda

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

目前,我正在使用以下方法创建一个文本通道:

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

但我需要将其设为私人频道。我做了一些尝试来尝试编写自己的createPrivateChannel()方法的尝试,但总会回到需要在JDA GuildController.java中实现该方法的地方。我还查看了openPrivateChannel(),但这是针对用户和漫游器之间的DM的,我需要在服务器/行会中使用一个专用通道。

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

1 个答案:

答案 0 :(得分:1)

您可以使用权限覆盖来创建“私人”频道。为此,您首先需要使用createTextChannel(name)创建该频道,该频道将返回ChannelAction<TextChannel>

此界面使您可以进行一些其他配置,例如权限覆盖(我们需要这样做)。您需要拒绝对公共角色VIEW_CHANNEL的{​​{1}}权限,并将其授予您要授予访问权限的特定角色/成员。

@everyone

在JDA 3.X中,您需要使用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. } ,但是不再支持该版本,您现在应该使用JDA4.X。有关如何迁移的更多信息,请参见the migration guide