【问题标题】:How can I update the voice channel when a user enters the guild with JDA用户使用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
}

【问题讨论】:

  • 你的问题是什么,用英语?
  • 如果您能提供一些有关错误的信息,那就太好了。

标签: java discord-jda


【解决方案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() 所做的。

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 2021-03-20
    • 2021-01-28
    • 2022-07-07
    • 1970-01-01
    • 2019-09-23
    • 2020-09-07
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多