Пишу Discord бот с помощью библиотеки JDA и столкнулся с достаточно банальной проблемой.
Требуется метод, который принимал бы команду "/add_server" (без каких либо добавлений после /add_server), далее отправлял бы в тот же чат сообщение "Какой сервер вы хотите добавить?"
Бот в этот момент ожидает ответа от Юзера (при этом не мешая другим юзерам пользоваться функционалом бота в соседних TextChannels).
Если Юзер отправил ему правильное имя сервера (допустим,
Google), то бот выводить в командной строке имя сервера
(System.out.println(serverName);)
Если Юзер отправил ему неправильное имя сервера (допустим,
21324), то бот повторно спрашивает название сервера или ждет
команды /end
Если Юзер не отвечает боту в течение X секунд - бот перестает ожидать ответа от юзера и уведомляет его о том, что бот больше не ожидает от юзера ответа
Пытался адаптировать под свой проект код из это бота, но не смог реализовать цикл
P.S Если требуется уточнение - скажите об этом мне в комментариях.
Update №1Добавил в свой проект код из ExampleBot (ссылка на него выше). Т.к. сложно найти информацию по библиотеке JDA-Utilities, я написал пример кода для multiple questions:
public class TestLoop extends Command {
private EventWaiter waiter;
private Database database;
public TestLoop(Database database, EventWaiter waiter) {
this.waiter = waiter;
this.name = "addperson";
this.help = "add person to server";
this.database = database;
}
@Override
protected void execute(CommandEvent event)
{
// ask what the user's name is
event.reply("What is your name?");
// wait for a response
waiter.waitForEvent(MessageReceivedEvent.class,
e -> e.getAuthor().equals(event.getAuthor()) && e.getChannel().equals(event.getChannel()),
e -> {
e.getChannel().sendMessage("Thank you, `" + e.getMessage().getContentRaw() + "`. What is your age?").queue();
waiter.waitForEvent(MessageReceivedEvent.class,
w -> w.getAuthor().equals(e.getAuthor()) && w.getChannel().equals(e.getChannel()),
w -> w.getChannel().sendMessage("So, you,re `" + e.getMessage().getContentRaw() + "` and your age is `" + w.getMessage().getContentRaw() + "`").queue());
},
// if the user takes more than a minute, time out
10, TimeUnit.SECONDS, () -> event.reply("Sorry, you took too long."));
}
}
Код не идеален, но зато это моя попытка решить мою же проблему.
Продвижение своими сайтами как стратегия роста и независимости