当前位置: 首页 > 知识库问答 >
问题:

#常规通道不协调-超时&JDA无法获取消息

隗驰
2023-03-14

我正在尝试做我的第一个不和谐的JDA机器人与Java。(我找到的StackOverflow的大部分教程和问题都使用了Javascript,所以我认为应该提到它)。

我无法收到任何我发送到#通用频道的消息。我按照本教程编写了代码,并试图用此链接中的代码修复问题。

JDA版本:4.2.0240 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个答案

施俊驰
2023-03-14

正如dan1st在评论中所说:

使用当前的jdabuilder构建器解决了这个问题:

public class Main extends ListenerAdapter {
    public static void main(String[] args) throws LoginException, IOException {
        JDABuilder builder = JDABuilder.createDefault("my_token");
 类似资料:
  • 我正在制作一个不和谐的JDA机器人,当用户发送消息:前缀($)hastebin他们的代码时,机器人将创建一个请求hastebin并粘贴他们的代码,之后他将粘贴网址并打印到控制台(我将在解决问题后将其作为消息发送)。 这是我的HastebinCommand类: 这是我的Hastebin请求类: 我的错误: C:\Users\user\Documents\Java\Java Projects\Disc

  • 我试图使用JDA编写一个discord bot,虽然我可以很容易地获得bot的存在,但我无法获得选定用户的存在。一个用例可能是用户输入类似的命令,然后机器人发送消息告诉用户他们正在玩什么游戏。据我所知,机器人不能在没有用户在场的情况下获得用户的游戏活动,我也看不到这样做的方法。如果我在文档中遗漏了它,请链接方法/类。

  • 我的机器人不能发送嵌入或常规文本信息,代码执行,但没有什么是发送在不和谐的通道。我遵循了JDA维基的设置,我不知道我做错了什么。 机器人登录码

  • 我目前正在使用Java和jda为discord制作一个机器人。我想让机器人向特定的通道发送消息。我该怎么做?

  • 我是Azure服务总线的新手。 我正在尝试将消息添加到Azure服务总线队列,如下所示 我收到如下MessageCommunication异常 当我初始化QueueClient时,我甚至将操作超时值配置为10分钟,仍然是相同的问题 在我出错的地方,任何方向或指针都会有很大的帮助。