В настоящее время я изучаю класс программирования на Java и недавно начал экспериментировать с инструментами JDA, чтобы создать базового бота Discord для моего сервера. В идеале я хочу, чтобы мой бот отвечал, когда кто-то говорит "Привет, яблоки!" спросив их имя, а затем ответив «Привет!» если это сообщение было отправлено тем же человеком, который сказал "Hello Apples!" Прямо сейчас мой бот не ожидает ввода пользователем после начального "Hello Apples!" сообщение и сразу выводит весь его текст. Я считаю, что мой текущий код настроен правильно, чтобы бот отвечал только "Привет!" если он получает сообщение от того же человека, который изначально послал «Привет, яблоки!», но я не могу быть полностью уверен, потому что он не ждет дополнительного сообщения и в результате дважды читает одно и то же сообщение и распечатывает :
Привет! Назовите свое имя или скажите «Стоп»!
Привет, привет, яблоки !!
Подождите своей очереди
Я действительно хотел бы знать, как создать какую-то «остановку» или метод, который заставил бы бот ждать добавления пользовательского ввода от пользователя, который первоначально приветствовал бота, и, если возможно, способ установить время limit, чтобы бот не оставался неработоспособным, если он не отвечает.
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 {
try {
JDA api = new JDABuilder(AccountType.BOT).setToken("NTQxMTMxMDc4MTY1ODU2MjYw.DzbGoQ.oFIM_py pLMOc60qU1PgeeUXU8Qo").build();
api.addEventListener(new MyEventListener());
} catch (Exception e) {
e.printStackTrace();
}
}
}
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.MessageChannel;
import net.dv8tion.jda.core.entities.Role;
import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
public class MyEventListener extends ListenerAdapter {
public void onMessageReceived(MessageReceivedEvent event) {
if (event.getAuthor().isBot()) return;
Message message = event.getMessage();
String content = message.getContentRaw();
MessageChannel channel = event.getChannel();
if (content.startsWith("Hi Apples!")) {
Member member = message.getMember();
channel.sendMessage("Hi! Tell me your name, or say \"Stop\"!").queue();
int n = 0;
while (n == 0) {
Message message2 = event.getMessage();
String content2 = message.getContentRaw();
Member member2 = message2.getMember();
String nick = member2.getNickname();
if (member == member2) {
channel.sendMessage("Hi " + content2 + "!").queue();
n = 1;
}
else {
}
channel.sendMessage("Wait your turn " + nick + "!").queue();
if (content2 == "Stop") {
channel.sendMessage("Understood!").queue();
n = 1;
}
}
}
}
}
Мои ожидаемые результаты:
ПОЛЬЗОВАТЕЛЬ: Привет, яблоки!
БОТ: Привет! Назовите свое имя или скажите стоп!
ПОЛЬЗОВАТЕЛЬ2: Привет!
БОТ: Подождите своей очереди. ПОЛЬЗОВАТЕЛЬ2!
ПОЛЬЗОВАТЕЛЬ: Джимми
БОТ: Привет, Джимми!
Фактические результаты: (Отправлено сразу)
Привет! Назовите мне свое имя или скажите «Стоп»!
Привет, привет, яблоки!
Подожди своей очереди (мой псевдоним Discord)!