如何使用 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 角色 @everyone
的 VIEW_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。
我试图让机器人在公会中创建一个私人频道,但在 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 角色 @everyone
的 VIEW_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。