用户使用JDA进入公会时如何更新语音通道

Posted

技术标签:

【中文标题】用户使用JDA进入公会时如何更新语音通道【英文标题】:How can I update the voice channel when a user enters the guild with JDA 【发布时间】:2019-10-12 09:34:42 【问题描述】:

我基本上是想把这段代码转换成JDA

javascript

bot.channels.get(serverStats.totalUserID).setName(`Total Users: $member.guild.memberCount`);

Java(错误)

public void onGuildJoin(GuildJoinEvent event) 
     event.getGuild().getTextChannelById(573629024102776853L).setName("Total Users:" + event.getGuild().getMembers().size()); //<---- Error

【问题讨论】:

你的问题是什么,用英语? 如果您能提供一些有关错误的信息,那就太好了。 【参考方案1】:

要重命名 TextChannel,您必须使用管理器。 例如:

  event.getGuild().getTextChannelById(573629024102776853L).getManager().setName("Total Users:" + event.getGuild().getMembers().size());

查看Channel#getManager()了解更多信息。

【讨论】:

后缀L 表示它是一个长文本。 ID 对于整数文字来说太大了,因此需要使用L 后缀,否则编译器会说它对于整数来说太大了。【参考方案2】:

要修改 JDA 中的实体,您通常必须使用管理器。您几乎可以在每个实体上通过getManager() 获取管理器实例。

TextChannel channel = guild.getTextChannelById(573629024102776853L);
channel.getManager()
       .setName("Total Users:" + guild.getMemberCache().size())
       .queue(); // this is needed, otherwise the request won't be made to discord

如果频道的 ID 不正确,它将在 channel.getManager() 上抛出 NPE,因为 getTextChannelById 将返回 null。 我使用getMemberCache() 而不是getMembers(),因为它对这种代码更有效。该大小在缓存视图实例上直接可用,不需要将整个缓存复制到一个列表中,这实际上是 getMembers() 所做的。

【讨论】:

以上是关于用户使用JDA进入公会时如何更新语音通道的主要内容,如果未能解决你的问题,请参考以下文章

JDA:如何检测成员是如何从公会中移除的?

JDA 在通过 id 获取公会时返回 null

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

如何授予新创建的角色权限以使用 JDA 库加入新创建的语音聊天?

Discord JDA - 有时有效,有时无效

机器人加入公会的所有语音频道并播放文件