#general 频道 Discord - 超时和 JDA 未收到消息
Posted
技术标签:
【中文标题】#general 频道 Discord - 超时和 JDA 未收到消息【英文标题】:#general channel Discord - Timeout & JDA not getting messages 【发布时间】:2021-06-12 05:37:40 【问题描述】:我正在尝试使用 Java 实现我的第一个 Discord JDA 机器人。 (我发现 *** 上的大部分教程和问题都使用了 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实例)。
【问题讨论】:
您可能应该审查帖子中的令牌 ID。有人可以使用这些 ID 值用他们自己的代码冒充您的机器人。 谢谢!做到了。也重新生成了令牌。 您需要指定网关意图。您可以使用JDABuilder.createDefault("token here")
创建JDABuilder
。
成功了!谢谢!
【参考方案1】:
正如dan1st在cmets上所说:
使用当前的JDABuilder
构建器可以解决问题:
public class Main extends ListenerAdapter
public static void main(String[] args) throws LoginException, IOException
JDABuilder builder = JDABuilder.createDefault("my_token");
【讨论】:
以上是关于#general 频道 Discord - 超时和 JDA 未收到消息的主要内容,如果未能解决你的问题,请参考以下文章