Discord JDA OnReady 不起作用

Posted

技术标签:

【中文标题】Discord JDA OnReady 不起作用【英文标题】:Discord JDA OnReady doesn't work 【发布时间】:2017-12-22 15:21:57 【问题描述】:

我正在使用 JDA (Java) 为 Discord 创建一个机器人。我在尝试在 java 控制台上简单调试消息时遇到问题。 我想打印“Bot running”但不起作用。它不打印。

问题出在 onReady() 中,请看代码。

public class MessageListener extends ListenerAdapter

   public static void main(String[] args)
        throws LoginException, RateLimitedException, InterruptedException
   
     JDA jda = new  JDABuilder(AccountType.BOT).setToken("x").buildBlocking();
    jda.addEventListener(new MessageListener());


@Override
public void onMessageReceived(MessageReceivedEvent event)

    if (event.isFromType(ChannelType.PRIVATE))
    
        System.out.printf("[PM] %s: %s\n", event.getAuthor().getName(),
                                event.getMessage().getContent());
    

@Override
public void onReady(ReadyEvent e)

            String server = "bot running\n";
            System.out.println(server);
       

编辑: 代码更新 抱歉,我弄乱了代码,但“OnReady”不起作用。它应该在加载机器人时工作

【问题讨论】:

你在哪里打电话给ReadyListener?请提供最低、完整、可验证的示例以获得更好的答案 - ***.com/help/mcve 对不起,我搞砸了代码 欢迎来到 Stack Overflow!在尝试提出更多问题之前,请阅读How do I ask a good question?。 欢迎来到 Stack Overflow!在尝试提出更多问题之前,请阅读Why is “Can someone help me?” not an actual question?。 【参考方案1】:

因为您在 Bot 启动后添加了侦听器。当您在 jda 上调用 buildBlocking 时,Bot 会启动并阻止该线程。所以监听器永远不会被添加。

JDABuilder builder = new JDABuilder(AccountType.BOT);
builder.setToken("x");
builder.addEventListener(new MessageListener());
JDA jda = builder.buildBlocking();

【讨论】:

您应该将其编辑到您的答案中。答案(和问题)应该是独立的,无需阅读 cmets;您可能还注意到 cmets 并不真正适合代码块。 在尝试回答更多问题之前,请阅读How do I write a good answer?。

以上是关于Discord JDA OnReady 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何修复不和谐的 jda bot 垃圾邮件

Discord JDA getOnlineStatus() 未检查服务器上的在线成员

在 Heroku 成功的机器人上部署不起作用 - JDA

Java Discord API 命令不打印任何内容

Discord JDA 依赖缺失

使用 JDA 制作的 Discord 机器人正在删除不正确的消息