如何根据反应发送消息,然后根据用户消息发送另一个消息?使用 JDA

Posted

技术标签:

【中文标题】如何根据反应发送消息,然后根据用户消息发送另一个消息?使用 JDA【英文标题】:How can I send message bassed on react and then send another bassed on user message? Using 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();
            

        
    

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

提前致谢。

【问题讨论】:

【参考方案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,该消息来自正在使用的频道以及机器人的用户正在与之交互。

【讨论】:

以上是关于如何根据反应发送消息,然后根据用户消息发送另一个消息?使用 JDA的主要内容,如果未能解决你的问题,请参考以下文章

当用户对消息做出反应时,机器人会在 discord.js 中发送另一条消息

如何根据 Discord.js 中的反应编辑消息(创建列表和切换页面)

Discord.py:根据消息得到的反应来编辑机器人发送的消息

Discord py 将在一个频道上发送的消息(带有嵌入)转发到另一个频道以及如何确定服务器中的成员数量?

Discord.js 向另一个频道发送消息

如何让bot在反应后将消息发送到另一个频道|不和谐.js