JDA 获取所有渠道

Posted

技术标签:

【中文标题】JDA 获取所有渠道【英文标题】:JDA getting all channels 【发布时间】:2021-08-08 23:58:40 【问题描述】:

我需要将我的机器人可以看到的所有频道放入一个字符串数组中,例如 #general,#memes。我该怎么做呢。我滚动浏览了 JDA 类方法,但一无所获。

【问题讨论】:

【参考方案1】:

有很多方法可以做到这一点,没有任何代码很难帮助你。

首先,如果你有一个 JDA 实例,你可以这样做 jda.getGuildById("your_guild_id").getChannels();

其次,如果您有来自onMessageReceived 事件的event,您可以这样做:event.getGuild().getChannels()

     @Override
     public void onMessageReceived(MessageReceivedEvent event)
     
         System.out.println(String.join(",", event.getGuild().getChannels()));
     

第三,如果你有来自onReady 事件的event,你可以这样做:event.getJDA()getGuildById("your_guild_id").getChannels()

     @Override
     public void onReady(ReadyEvent event)
     
         System.out.println(String.join(",", event.getJDA().getGuildById("your_guild_id").getChannels()));
     

这是一个例子:

public class Main implements EventListener
    public static void main(String[] args) 
            JDABuilder builder = JDABuilder.createDefault("YOUR_BOT_TOKEN");
            builder.addEventListeners(new Main());
            builder.build();
    

    @Override
    public void onReady(ReadyEvent event)
        JDA jda = event.getJDA();
        Guild guild = jda.getGuildById("YOUR_GUILD_ID");
        System.out.println(String.join(",", guild.getChannels());
    



如果这没有帮助,请发布一些你所拥有的代码。

【讨论】:

不,这很有帮助。不过有一件事,我如何获得公会 ID? @SecretAgent guild.getGuildId()。 JDA 是用对象正确组织的。如果你想要 guildId,它只是 guild.getId()。如果您的 IDE 提供自动补全功能,那么当您在公会对象后添加一个点时,它应该会显示所有可用的操作。 @SecretAgent 要在 discord 中找到您的公会 ID,请查看此链接:support.discord.com/hc/en-us/articles/…

以上是关于JDA 获取所有渠道的主要内容,如果未能解决你的问题,请参考以下文章

JDA 事件获取器返回 null 并让所有成员在一个角色中只返回机器人本身

JDA getMembers() 只返回自机器人启动以来在聊天中写过的用户?

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

JDA - 获取自己消息的消息 ID

JDA - 机器人听取其他机器人的反应

获取 Embed-Discord API (JDA) 的提及用户