Как я могу отправить сообщение, основанное на реакции, а затем отправить другое, основанное на сообщении пользователя? Использование JDA - PullRequest
0 голосов
/ 09 апреля 2020

Я создаю свой первый бот Discord. Бот для сервера студенческого общества. Я хочу назначить роль / разрешить пользователю присоединяться к серверу на основе определенных вопросов.

В момент, когда присоединяется новый участник, я отправляю сообщение в приветственном канале с приветственным сообщением. Я также отправляю код для вставки с вопросом. У меня есть это, где, если они реагируют большими пальцами, это посылает другую вставку, просящую их студенческий идентификатор Если они отказываются, я посылаю код для вставки, спрашивающий, являются ли они студентами, реагирует ли он большим пальцем, тогда я спрашиваю их ученика.

Как я могу получить их сообщение и проверить, что оно равно String? Например (пользователь вводит идентификатор студента: 32984230875, тогда проверка равна строке.)

Мой текущий метод прослушивания реакции:

public void onGuildMessageReactionAdd(GuildMessageReactionAddEvent event) {

    Guild guild = event.getGuild();

    if(event.getMember().equals(member)) {

        if(event.getChannel().getId().equals("ChannelID") && event.getReactionEmote().getName().equals("?")) {
            EmbedBuilder enterStudentID = new EmbedBuilder();
            enterStudentID.setTitle("Enter your Student ID:");

            guild.getTextChannelById("ChannelID").sendMessage(enterStudentID.build()).queue();

        } else {
            EmbedBuilder isMemberStudent = new EmbedBuilder();
            isMemberStudent.setTitle("Are you a Student?");

            guild.getTextChannelById("ChannelID").sendMessage(isMemberStudent.build()).queue(message -> {
                message.addReaction("?").queue();
                message.addReaction("?").queue();
            });

            if(event.getChannel().getId().equals("ChannelID") && event.getReactionEmote().getName().equals("?")) {
                EmbedBuilder enterStudentID = new EmbedBuilder();
                enterStudentID.setTitle("Enter your Student ID:");

                guild.getTextChannelById("channelID").sendMessage(enterStudentID.build()).queue();
            }

        }
    }
}

Ps. Сначала вставьте, спрашивая, являются ли они членом общества, на методе присоединения члена. Вот что слушает первая реакция.

Заранее спасибо.

1 Ответ

0 голосов
/ 14 апреля 2020

Каждое обычное сообщение в Discord - String. Идентификатор студента, который вам нужен, также String, но может быть преобразован в long.

Почему бы не int?
int: использует четыре байта для хранения значений от -2 147 483 648 до 2 147 483 647.
long: использует восемь байтов для хранения значений от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

Таким образом, с точки зрения размера, он может вписываться только в long.

String myString = "123124";
long myLong;
try {
    myLong = Long.parseLong(myString);
    // You can do more stuff here  
} catch (NumberFormatException ex) {
    ex.printStackTrace();
    // You can do other stuff here to handle the exception.
}

идентификатор студента: 32984230875

Если есть конкретный c формула для вашего студенческого идентификатора, скажем, каждый студенческий идентификатор начинается с указанного c числа и имеет точную длину, затем вы можете использовать Регулярное выражение , которое проверяет предоставленные данные по набору предопределенных критерий.

Таким образом, если преобразование String = >> long прошло успешно, или сообщение соответствует регулярному выражению pattern , тогда идентификатор действителен для использования.

РЕДАКТИРОВАТЬ: Если я полностью неправильно понял вашу проблему, то еще одна вещь, о которой я могу подумать, это то, что вам нужно прослушать GuildMessageReceivedEvent, сообщение от канала, который используется, и от пользователя, который является ботом. это взаимодействие cting с.

...