【问题标题】:How can I send message bassed on react and then send another bassed on user message? Using JDA如何根据反应发送消息,然后根据用户消息发送另一个消息?使用 JDA
【发布时间】:2020-07-21 13:28:57
【问题描述】:

我正在创建我的第一个 Discord Bot。该机器人适用于学生社团服务器。我想根据某些问题分配角色/允许用户加入服务器。

此刻,当有新成员加入时,我会在欢迎频道中发送一条带有欢迎消息的消息。我还发送了一个带有问题的嵌入。我有它,如果他们竖起大拇指做出反应,它会发送另一个嵌入请求他们的学生证。如果他们不赞成,我会发送一个嵌入询问他们是否是学生,如果他们反对,我会询问他们的学生。

我怎样才能得到他们的消息并检查它是否等于一个字符串?例如(用户输入学生 ID: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();
            }

        }
    }
}

附言。首先嵌入询问他们是否为社会成员,在成员加入方法上。这就是第一反应正在听的内容。

提前致谢。

【问题讨论】:

    标签: java discord discord-jda


    【解决方案1】:

    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,858 的值

    所以就大小而言,它只能装进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

    如果您的学生 ID 有一个特定公式,假设每个学生 ID 都以一个特定数字开头,并且有一个确切的长度,那么您可以使用 Regular expression 来根据一组预定义的标准验证所提供的数据。

    因此,如果String =>> long 转换成功,或者消息匹配正则表达式pattern,则该ID 对您有效。

    编辑:如果我完全误解了您的问题,那么我能想到的另一件事是您需要收听GuildMessageReceivedEvent,该消息来自正在使用的频道以及机器人的用户正在与之交互。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多