Bagaimana saya bisa mengirim pesan berdasarkan reaksi dan kemudian mengirim pesan pengguna berdasarkan lainnya? Menggunakan JDA

Saya membuat Bot Perselisihan pertama saya. Bot ini untuk server perkumpulan mahasiswa. Saya ingin menetapkan peran/mengizinkan pengguna bergabung dengan server berdasarkan pertanyaan tertentu.

Saat ini, ketika ada anggota baru yang bergabung, saya mengirim pesan di saluran selamat datang dengan pesan selamat datang. Saya juga mengirimkan Embed dengan pertanyaan. Saya memilikinya di mana jika mereka bereaksi dengan jempol, itu akan mengirimkan embed lain yang meminta ID siswa mereka. Kalau mereka jempol ke bawah saya kirim embed menanyakan apakah mereka pelajar, jika mereka jempol bereaksi maka saya tanya muridnya.

Bagaimana saya bisa mendapatkan pesan mereka dan memeriksanya sama dengan sebuah String? misal (Pengguna memasukkan id siswa: 32984230875 kemudian dicentang sama dengan string.)

Metode pendengar reaksi saya saat ini:

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();
            }

        }
    }
}

hal. Penyematan pertama menanyakan apakah mereka anggota masyarakat, menggunakan metode anggota bergabung. Itulah yang didengarkan oleh reaksi pertama.

Terima kasih sebelumnya.


person Danielglenn18    schedule 09.04.2020    source sumber


Jawaban (1)


Setiap pesan reguler di Discord adalah String. ID pelajar yang Anda perlukan juga String, namun dapat diubah menjadi long.

Mengapa tidak int?
int: menggunakan empat byte untuk menyimpan nilai dari -2,147,483,648 hingga 2,147,483,647.
long: menggunakan delapan byte untuk menyimpan nilai dari -9,223,372,036,854,775,808 hingga 9,223,372,036,854,775,807

Jadi dari segi ukurannya hanya bisa muat di 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.
}

id pelajar: 32984230875

Jika ada rumus khusus untuk ID pelajar Anda, misalkan setiap ID pelajar dimulai dengan nomor tertentu, dan memiliki panjang yang pasti, maka Anda dapat menggunakan Ekspresi reguler yang memvalidasi data yang diberikan berdasarkan serangkaian kriteria yang telah ditentukan sebelumnya.

Jadi jika konversi String =>> long berhasil, atau pesan cocok dengan regex pola maka ID tersebut valid untuk Anda gunakan.

EDIT: Jika saya benar-benar salah memahami masalah Anda, maka hal lain yang dapat saya pikirkan adalah Anda perlu mendengarkan GuildMessageReceivedEvent, pesan yang berasal dari saluran yang sedang digunakan, dan dari pengguna yang berinteraksi dengan bot.

person lireoy    schedule 14.04.2020