如何允许 java telegram bot 等待用户回复?
how to allow java telegram bot wait user reply?
大家好。我可以让我的 java telegram bot 等待用户回复并继续问另一个问题吗?
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 个问题并等待用户的回复...所以我该如何解决...
您应该明白您的消息接收线程不应该“等待”任何东西。它应该立即处理每条收入消息,否则你所有的收入消息都会卡住等待用户回复。
我将向用户对象添加“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);
}
至少,这是我自己找到并成功使用的方式,如果有人能给出如何使它优雅的建议,我将不胜感激。
大家好。我可以让我的 java telegram bot 等待用户回复并继续问另一个问题吗?
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 个问题并等待用户的回复...所以我该如何解决...
您应该明白您的消息接收线程不应该“等待”任何东西。它应该立即处理每条收入消息,否则你所有的收入消息都会卡住等待用户回复。
我将向用户对象添加“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);
}
至少,这是我自己找到并成功使用的方式,如果有人能给出如何使它优雅的建议,我将不胜感激。