так что моя проблема в основном состоит в выполнении такой команды, как! Rolemenu [messageID]
Например:! Rolemenu 1234 @ Role1 @ Role2 @ Role3
Я в основном хочу сделать это так что я перебираю каждую роль, прося пользователя отреагировать на определенное сообщение (по идентификатору сообщения), а затем эта спецификация c сопоставляется с ролью, а затем любой на сервере может отреагировать на реакцию и получить эту c роль.
Чтобы было немного понятнее:
Бот спросит: «Какую реакцию вы хотите на @ Role1». Затем вы реагируете на сообщение с помощью: happy: emote so role1 отображается на: happy: так что любой, кто отреагирует на это сообщение с помощью: happy:, вы получите role1.
Проблема, с которой я столкнулся, заключается в том, что мой код проходит через l oop упомянутых ролей, но он не ждет ответа на конкретную роль, а просто получает 1 реакцию на все. Так что это не 1 к 1.
Чтобы было понятнее:
Я запускаю l oop и спрашиваю пользователя: «Какую реакцию вы хотите для @ Role1», но вместо ожидания для реакции он переходит к следующей итерации, спрашивает пользователя «Какую реакцию вы хотите для @ Role2» и завершает l oop. Но затем, когда я реагирую на сообщение, которое оно печатает, оно регистрирует его, но я не знаю, как сделать его 1 к 1.
Вот мой код:
import com.jagrosh.jdautilities.command.Command;
import com.jagrosh.jdautilities.command.CommandEvent;
import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionAddEvent;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ReactionsCommand extends Command {
private final EventWaiter waiter;
public ReactionsCommand(EventWaiter waiter) {
this.waiter = waiter;
super.name = "Reaction";
super.aliases = new String[]{"rolemenu", "reactionmenu"};
}
@Override
protected void execute(CommandEvent event) {
List<Role> roles = event.getMessage().getMentionedRoles();
String msg[] = event.getMessage().getContentRaw().split(" ");
String msgId = msg[1];
for (int i = 0; i < roles.size(); i++) {
event.reply("The reaction you want for " + roles.get(i).getName());
waiter.waitForEvent(GuildMessageReactionAddEvent.class,
e -> e.getChannel().equals(event.getChannel()) &&
e.getMessageId().equals(msgId),
e -> event.reply(e.getReactionEmote().getName()),
1, TimeUnit.MINUTES, () -> event.reply("Sorry, you took too long."));
}
}
}
Прямо сейчас я в целях тестирования попросите его ответить названием эмоции реакции. Может ли кто-нибудь помочь мне с моей проблемой?