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

Posted

技术标签:

【中文标题】如何使用 JDA 在 Discord 服务器(不是用户/机器人 DM)中创建私人频道:Java Discord API【英文标题】:How to create a private channel in a Discord server (not a user/bot DM) using JDA: Java Discord API 【发布时间】:2020-05-22 02:40:53 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

您可以使用权限覆盖来创建“私人”频道。为此,您首先需要使用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。有关如何迁移的更多信息,请参阅the migration guide。

【讨论】:

以上是关于如何使用 JDA 在 Discord 服务器(不是用户/机器人 DM)中创建私人频道:Java Discord API的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JDA 在 Discord 中创建文本通道:Java Discord Api

如何使用 Java 中的 Discord JDA 在 Discord 上的特定时间发送消息

如何获取 Bot 消息 ID 并编辑消息 - Discord JDA Java

如何在 Discord JDA 嵌入式消息中使用本地文件作为缩略图?

如何添加多个反应以嵌入 Discord JDA

如何修复此 JDA discord bot 错误?