使用 discordJDA 等待消息未按预期工作

Posted

技术标签:

【中文标题】使用 discordJDA 等待消息未按预期工作【英文标题】:Awaiting for message using discordJDA not working as intended 【发布时间】:2019-05-25 07:46:28 【问题描述】:

我目前正在开发我的不和谐机器人。我遇到的一个问题是,我不知道如何让机器人在发送消息后等待用户回复。

我也尝试过阅读关于在此处使用 RestAction 的 git 文档:https://github.com/DV8FromTheWorld/JDA/wiki/7)-Using-RestAction,但它似乎没有提到任何关于实现类似于 discord.js 的“等待”函数的任何内容

我尝试编写代码来模仿这种效果:

public class EventHandler extends ListenerAdapter 

        private static final String PREFIX = "&";
        public static String[] args;


        public void sendMessage(String s, GuildMessageReceivedEvent event) 
            event
                    .getChannel()
                    .sendMessage(s)
                    .queue();
        

        public void onGuildMessageReceived (GuildMessageReceivedEvent event) 

            args = event
                    .getMessage()
                    .getContentRaw()
                    .split(" "); 

        if (args[0].equalsIgnoreCase(PREFIX + "any_command")) 
            sendMessage("Type hello!");
            if (args[0].equalsIgnoreCase(PREFIX + "hello") 
               sendMessage("hello there!");
            
        
    

主类:

import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;


public class Main 

    public static void main(String[] args) throws Exception 
        JDA jda = new JDABuilder(AccountType.BOT)
                .setToken("token goes here")
                .setAutoReconnect(true).build();

        try 
            jda.addEventListener(new EventHandler());
         catch (Exception e) 
            e.printStackTrace();
        

    
 

这不会注册在给出提示后键入的 hello 命令。我最好的猜测是条件永远不会满足,因为原始条件覆盖了即将到来的条件(args[0] 已经是 any_command) 任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

我建议来自 JDA-Utilities (https://github.com/JDA-Applications/JDA-Utilities/) 的 EventWaiter

快速查看源代码,看起来你需要这样的东西

EventWaiter waiter = new EventWaiter();
// SO wouldn't let me insert new lines for some reason.
waiter.waitForEvent(GuildMessageReceivedEvent.class, (event) -> event.getMessage().getContentRaw().equalsIgnoreCase("hello"), (event) -> event.getChannel().sendMessage("hello!").queue()));

【讨论】:

我忘记添加的其他内容:您必须将 EventWaiter 添加为 JDA 的事件侦听器。 jda.addEventListener(waiter); 是的,我意识到,在阅读了有关该问题的更多信息后,我将它实现到了我的 EventListener 类中。非常感谢!

以上是关于使用 discordJDA 等待消息未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

WebDriver 隐式等待未按预期工作

无法从异步函数获取返回值,等待未按预期工作(Vue API 服务)

命名管道未按预期工作。一遍又一遍地阅读相同的消息

随机消息发送未按预期工作 discord.js

HttpURLConnection setReadTimeOut()未按预期工作

Azure API 管理集状态代码策略未按预期工作