#general 频道 Discord - 超时和 JDA 未收到消息

时间:2021-03-14 21:30:32

标签: java intellij-idea discord-jda

我正在尝试使用 Java 做我的第一个 Discord JDA 机器人。 (我发现 StackOverflow 上的大部分教程和问题都使用了 Javascript,所以我认为应该提及)。

我无法收到发送到#general 频道的任何消息。我按照 this tutorial 编写了代码,并尝试使用 this link 中的代码解决该问题。

JDA 版本:4.2.0_240 IntelliJ 版本:2020.3.2 JDK 11.0.9 Java SE 8

我的 Main 课:

import com.neovisionaries.ws.client.WebSocket;
import com.neovisionaries.ws.client.WebSocketFactory;
import net.dv8tion.jda.api.AccountType;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

import javax.security.auth.login.LoginException;
import java.io.IOException;
import java.util.Objects;

public class Main extends ListenerAdapter {
    public static void main(String[] args) throws LoginException, IOException {
        JDABuilder builder = new JDABuilder(AccountType.BOT);
        String token = "my_token";
        
        WebSocketFactory factory = new WebSocketFactory();
        WebSocket ws = factory.createSocket("ws://discord.com/channels/817842449882939392/817842449882939396", 30000);

        builder.setToken(token);
        builder.addEventListeners(new Main());
        builder.build();
    }

    @Override
    public void onMessageReceived(MessageReceivedEvent event){

        for(Guild guild : event.getJDA().getGuilds()) {
            System.out.println(guild.getName());
        }

        if (event.isFromType(ChannelType.PRIVATE)) {
            System.out.printf("[PM] %s: %s\n", event.getAuthor().getName(),
                event.getMessage().getContentDisplay());
        } else {
            System.out.printf("[%s][%s] %s: %s\n", event.getGuild().getName(),
                event.getTextChannel().getName(), Objects.requireNonNull(event.getMember()).getEffectiveName(),
                event.getMessage().getContentDisplay());

        }
    }

}

我在输出中收到的警告之一是:

[JDA MainWS-ReadThread] INFO WebSocketClient - Connected to WebSocket
[JDA Gateway-Worker 1] WARN GuildSetupController - Automatically marking 1 guilds as unavailable due to timeout!

我只在一个公会 (#general) 上使用我的男孩,所以它没有连接到它。这是我的问题的原因吗?如果不是,那是什么?是因为我的 JDABuilder 被弃用了吗? (我没有找到如何使用 GitHub 上官方文档中显示的当前 JDABuilder 实例)。

1 个答案:

答案 0 :(得分:0)

正如 dan1st 在评论中所说:

使用当前的 JDABuilder 构建器可以解决问题:

public class Main extends ListenerAdapter {
    public static void main(String[] args) throws LoginException, IOException {
        JDABuilder builder = JDABuilder.createDefault("my_token");