如何根据反应发送消息,然后根据用户消息发送另一个消息?使用 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:根据消息得到的反应来编辑机器人发送的消息