Discord JDA-如何等待下一条消息

Discord JDA-如何等待下一条消息,discord,discord-jda,Discord,Discord Jda,我正在用JDA制作一个不和谐的机器人,我想知道如何等待消息。像这样的 import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; 导入net.dv8tion.jda.api.hooks.ListenerAdapter; 公共类侦听器扩展ListenerAdapter{ 已接收公共无效OnGuildMessage(GuildMessageReceivedEvent事件){ 字符串消息=event.getMes

我正在用JDA制作一个不和谐的机器人,我想知道如何等待消息。像这样的

import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
导入net.dv8tion.jda.api.hooks.ListenerAdapter;
公共类侦听器扩展ListenerAdapter{
已接收公共无效OnGuildMessage(GuildMessageReceivedEvent事件){
字符串消息=event.getMessage().getContentRaw();
布尔值isBot=event.getAuthor().isBot();
//检查消息是否不是来自bot
如果(!isBot){
if(message.equalsIgnoreCase(“hi”)){
event.getChannel().sendMessage(“你好,你叫什么名字?”).queue();
//等待第二条消息
String name=event.getMessage().getContentRaw();//保存第二条消息的内容
event.getChannel().sendMessage(“您的名字是:“+name.queue()”;
}
}
}
}
用户:你好

机器人:你好,你叫什么名字

用户:发送名称

机器人:你的名字是:name

如何获得第二条消息?

如评论中所述。您可以使用线程中给出的方法。但是,我建议使用JDA实用程序EventWater

如果您使用的是Maven或Gradle,请使用以下任一选项:


中心的
垃圾箱
http://jcenter.bintray.com

com.jagrosh
为了给它添加你自己的东西。因为我只会解释让EventWater工作的基本原理

这将是启动bot的主要类,当您运行它时,它将使用这些命令启动bot。ShutdownCommand和PingCommand是实用程序的一部分。因此,这些将自动添加

publicstaticvoidmain(String[]args)抛出IOException、LoginException、illegargumentexception、ratelimitedeexception
{
//第一个是bot令牌
String token=“您的机器人的令牌”
//第二个是bot的所有者id
String ownerId=“用户帐户的ID”
//定义一个EventWater,别忘了将其添加到JDABuilder!
EventWaiter=新EventWaiter();
//定义命令客户端
CommandClientBuilder客户端=新建CommandClientBuilder();
//设置bot的所有者
client.setOwnerId(ownerId);
//设置机器人前缀
client.setPrefix(“!!”);
//添加命令
client.add命令(
//打招呼的命令
新HelloCommand(服务员),
//用于检查bot延迟的命令
新建PingCommand(),
//关闭bot的命令
新的关机命令());
//开始设置bot帐户
新JDABuilder(AccountType.BOT)
//设置令牌
.setToken(令牌)
//设置机器人加载时的游戏
.setStatus(联机状态。请勿打扰)
.setActivity(活动.播放(“加载…”))
//添加侦听器
.addEventListeners(服务员,客户端.build())
//启动它!
.build();
}
现在,为下一步。首先创建一个名为“HelloCommand”的新类。在这个类中,您将扩展实用程序的“命令”部分

公共类HelloCommand扩展命令
{
private final EventWaiter;//此变量用于定义waiter,并在此类中的任何位置调用它。
公共Hello命令(事件服务员)
{
this.water=water;//定义服务生
this.name=“hello”//命令
this.aliases=新字符串[]{“hi”};//关于该命令的任何别名
this.help=“打招呼并等待响应”;//命令说明
}
@凌驾
受保护的无效执行(CommandEvent事件)
{
//询问用户的姓名
event.reply(“你好,你叫什么名字?”);//用消息响应命令。
//等待答复
waiter.waitForEvent(MessageReceivedEvent.class,
//确保它是由同一用户、同一频道发送的,并且为了安全起见,发送不同的消息
e->e.getAuthor().equals(event.getAuthor())
&&e.getChannel().equals(event.getChannel())
&&!e.getMessage().equals(event.getMessage()),
//响应,在响应中插入他们列出的名称
e->event.reply(“你好,`+e.getMessage().getContentRaw()+”`!我是`+e.getJDA().getSelfUser().getName()+”),
//如果用户花费的时间超过一分钟,则超时
1,TimeUnit.MINUTES,()->event.reply(“对不起,您用的时间太长了”);
}
}
现在,这是我们开始讨论朱西的东西的地方。使用事件服务程序时。你需要检查几个区域

//等待响应
waiter.waitForEvent(MessageReceivedEvent.class,
//确保它是由同一用户、同一频道发送的,并且为了安全起见,发送不同的消息
e->e.getAuthor().equals(event.getAuthor())
&&e.getChannel().equals(event.getChannel())
&&!e.getMessage().equals(event.getMessage()),
//响应,在响应中插入他们列出的名称
e->event.reply(“你好,`+e.getMessage().getContentRaw()+”`!我是`+e.getJDA().getSelfUser().getName()+”),
//如果用户花费的时间超过一分钟,则超时
1,TimeUnit.MINUTES,()->event.reply(“对不起,您用的时间太长了”);
详细解释如下:

waiter.waitForEvent(GuildMessageReceivedEvent.class,//您要等待什么事件?
p->p.getAuthor().equals(message.g

# Add this to the dependencies (What's inside this block, not the block itself.

dependencies {
    compile 'com.jagrosh:jda-utilities:JDA-UTILITIES-VERSION'
    compile 'net.dv8tion:JDA:JDA-VERSION'
}

# Same story for the repo's
repositories {
    jcenter()
}