大家好。我可以让我的 java 电报机器人等待用户的回复并继续提出另一个问题吗?
if(msg.contains("/register"))
{
SendMessage message = SendMessage
.builder()
.chatId(Long.toString(telegram_id))
.text("Please enter your name.\n" +
"/cancelReg To cancel Registration")
.build();
executeMessageMethod(message);
message = SendMessage
.builder()
.chatId(Long.toString(telegram_id))
.text("Please enter your handicap.\n" +
"/cancelReg To cancel Registration")
.build();
executeMessageMethod(message);
}
我的代码不能让我的机器人提出 1 个问题并等待用户的回复...所以我该如何解决它...
答案 0 :(得分:1)
您应该明白您的消息接收者线程不应该“等待”任何事情。它应该立即处理每条收入消息,否则您的所有收入消息都会卡在等待用户回复。
我会将“dialogId”字段添加到用户对象并以这种方式处理传入的消息:
public void process(Message message) {
User user = UserDAO.getOrCreateUserByChatId(message.fromId);
String msg = message.getMessage();
if (msg.contains("/register")) {
user.dialogId = Dialogs.REGISTER; // Dialogs - your enum or an interface/class with static final fields.
} else if (/*all other commands possible*/) {}
if (user.dialogId == null) {
return;
}
switch (user.dialogId) {
case REGISTER:
processRegister(user, msg);
break;
/*all other dialogs possible*/
}
}
private static final String PLEASE_ENTER_NAME_MESSAGE = "Please enter your name.\n/cancelReg To cancel Registration";
private static final String PLEASE_ENTER_HANDICAP_MESSAGE = "Please enter your handicap.\n/cancelReg To cancel Registration";
private static final String REGISTRATION_SUCCESSFULL_MESSAGE = "Registration successfull";
private void processRegister(User user, String msg) {
if (msg.equals("/register")) {
sendMessage(user.chatId, PLEASE_ENTER_NAME_MESSAGE);
return;
}
if (!user.hasName()) {
user.setName(msg);
sendMessage(user.chatId, PLEASE_ENTER_HANDICAP_MESSAGE);
return;
}
if (!user.hasHandicap()) {
user.setHandicap(msg);
user.dialogId = GENERAL; // for example
sendMessage(user.chatId, REGISTRATION_SUCCESSFULL_MESSAGE);
return;
}
}
private void sendMessage(long chatId, String msg) {
SendMessage message = new SendMessage
.builder()
.chatId(Long.toString(chatId))
.text(msg)
.build();
executeMessageMethod(message);
}
至少,这是我自己发现并成功使用的方式,如果有人能给出如何使其优雅的建议,我将不胜感激。