diff --git a/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java b/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java index 1a1ffb9..835d588 100644 --- a/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java +++ b/src/main/java/org/telegram/updateshandlers/DirectionsHandlers.java @@ -52,112 +52,30 @@ public class DirectionsHandlers implements UpdatesCallback { Message message = update.getMessage(); if (message != null && message.hasText()) { if (languageMessages.contains(message.getFrom().getId())) { - String[] parts = message.getText().split("-->", 2); - SendMessage sendMessageRequest = new SendMessage(); - sendMessageRequest.setChatId(message.getChatId()); - if (LocalisationService.getInstance().supportedLanguages.containsKey(parts[0].trim())) { - DatabaseManager.getInstance().putUserLanguage(message.getFrom().getId(), parts[0].trim()); - sendMessageRequest.setText(LocalisationService.getInstance().getString("languageModified", parts[0].trim())); - } else { - sendMessageRequest.setText(LocalisationService.getInstance().getString("errorLanguage")); - } - sendMessageRequest.setReplayToMessageId(message.getMessageId()); - ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); - replyKeyboardHide.setHideKeyboard(true); - replyKeyboardHide.setSelective(true); - sendMessageRequest.setReplayMarkup(replyKeyboardHide); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); - languageMessages.remove(message.getFrom().getId()); + onLanguageSelected(message); } else { String language = DatabaseManager.getInstance().getUserLanguage(update.getMessage().getFrom().getId()); if (message.getText().startsWith(Commands.setLanguageCommand)) { - SendMessage sendMessageRequest = new SendMessage(); - sendMessageRequest.setChatId(message.getChatId()); - ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); - HashMap languages = LocalisationService.getInstance().supportedLanguages; - List> commands = new ArrayList<>(); - for (Map.Entry entry : languages.entrySet()) { - List commandRow = new ArrayList<>(); - commandRow.add(entry.getKey() + " --> " + entry.getValue()); - commands.add(commandRow); - } - replyKeyboardMarkup.setResizeKeyboard(true); - replyKeyboardMarkup.setOneTimeKeyboad(true); - replyKeyboardMarkup.setKeyboard(commands); - replyKeyboardMarkup.setSelective(true); - sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); - sendMessageRequest.setText(LocalisationService.getInstance().getString("chooselanguage", language)); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); - languageMessages.add(message.getFrom().getId()); + onSetLanguageCommand(message, language); } else if (message.getText().startsWith(Commands.startDirectionCommand)) { - SendMessage sendMessageRequest = new SendMessage(); - sendMessageRequest.setChatId(message.getChatId()); - sendMessageRequest.setReplayToMessageId(message.getMessageId()); - ForceReply forceReply = new ForceReply(); - forceReply.setSelective(true); - sendMessageRequest.setReplayMarkup(forceReply); - sendMessageRequest.setText(LocalisationService.getInstance().getString("initDirections", language)); - Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); - if (sentMessage != null) { - DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_ORIGIN_STATUS, - sentMessage.getMessageId(), null); - } + onStartdirectionsCommand(message, language); } else if ((message.getText().startsWith(Commands.help) || (message.getText().startsWith(Commands.startCommand) || !message.isGroupMessage())) && DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == -1) { - SendMessage sendMessageRequest = new SendMessage(); - String helpDirectionsFormated = String.format( - LocalisationService.getInstance().getString("helpDirections", language), - Commands.startDirectionCommand); - sendMessageRequest.setText(helpDirectionsFormated); - sendMessageRequest.setChatId(message.getChatId()); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); + sendHelpMessage(message, language); } else if (!message.getText().startsWith("/")) { if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == WATING_ORIGIN_STATUS && message.hasReplayMessage() && DatabaseManager.getInstance().getUserDestinationMessageId(message.getFrom().getId()) == message.getReplyToMessage().getMessageId()) { - SendMessage sendMessageRequest = new SendMessage(); - sendMessageRequest.setChatId(message.getChatId()); - sendMessageRequest.setReplayToMessageId(message.getMessageId()); - ForceReply forceReply = new ForceReply(); - forceReply.setSelective(true); - sendMessageRequest.setReplayMarkup(forceReply); - sendMessageRequest.setText(LocalisationService.getInstance().getString("sendDestination", language)); - Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); - if (sentMessage != null) { - DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_DESTINY_STATUS, - sentMessage.getMessageId(), message.getText()); - } + onOriginReceived(message, language); } else if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == WATING_DESTINY_STATUS && message.hasReplayMessage() && DatabaseManager.getInstance().getUserDestinationMessageId(message.getFrom().getId()) == message.getReplyToMessage().getMessageId()) { - String origin = DatabaseManager.getInstance().getUserOrigin(message.getFrom().getId()); - String destiny = message.getText(); - List directions = DirectionsService.getInstance().getDirections(origin, destiny, language); - SendMessage sendMessageRequest = new SendMessage(); - sendMessageRequest.setChatId(message.getChatId()); - ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); - replyKeyboardHide.setSelective(true); - sendMessageRequest.setReplayMarkup(replyKeyboardHide); - sendMessageRequest.setReplayToMessageId(message.getMessageId()); - Message sentMessage = null; - for (String direction : directions) { - sendMessageRequest.setText(direction); - sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); - } - if (sentMessage != null) { - DatabaseManager.getInstance().deleteUserForDirections(message.getFrom().getId()); - } + onDestinationReceived(message, language); } else if (!message.hasReplayMessage()) { if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == -1) { - SendMessage sendMessageRequest = new SendMessage(); - String helpDirectionsFormated = String.format( - LocalisationService.getInstance().getString("helpDirections", language), - Commands.startDirectionCommand); - sendMessageRequest.setText(helpDirectionsFormated); - sendMessageRequest.setChatId(message.getChatId()); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); + sendHelpMessage(message, language); } else { SendMessage sendMessageRequest = new SendMessage(); sendMessageRequest.setText(LocalisationService.getInstance().getString("youNeedReplyDirections", language)); @@ -169,4 +87,104 @@ public class DirectionsHandlers implements UpdatesCallback { } } } + + private void onDestinationReceived(Message message, String language) { + String origin = DatabaseManager.getInstance().getUserOrigin(message.getFrom().getId()); + String destiny = message.getText(); + List directions = DirectionsService.getInstance().getDirections(origin, destiny, language); + SendMessage sendMessageRequest = new SendMessage(); + sendMessageRequest.setChatId(message.getChatId()); + ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); + replyKeyboardHide.setSelective(true); + sendMessageRequest.setReplayMarkup(replyKeyboardHide); + sendMessageRequest.setReplayToMessageId(message.getMessageId()); + Message sentMessage = null; + for (String direction : directions) { + sendMessageRequest.setText(direction); + sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); + } + if (sentMessage != null) { + DatabaseManager.getInstance().deleteUserForDirections(message.getFrom().getId()); + } + } + + private void onOriginReceived(Message message, String language) { + SendMessage sendMessageRequest = new SendMessage(); + sendMessageRequest.setChatId(message.getChatId()); + sendMessageRequest.setReplayToMessageId(message.getMessageId()); + ForceReply forceReply = new ForceReply(); + forceReply.setSelective(true); + sendMessageRequest.setReplayMarkup(forceReply); + sendMessageRequest.setText(LocalisationService.getInstance().getString("sendDestination", language)); + Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); + if (sentMessage != null) { + DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_DESTINY_STATUS, + sentMessage.getMessageId(), message.getText()); + } + } + + private void sendHelpMessage(Message message, String language) { + SendMessage sendMessageRequest = new SendMessage(); + String helpDirectionsFormated = String.format( + LocalisationService.getInstance().getString("helpDirections", language), + Commands.startDirectionCommand); + sendMessageRequest.setText(helpDirectionsFormated); + sendMessageRequest.setChatId(message.getChatId()); + SenderHelper.SendMessage(sendMessageRequest, TOKEN); + } + + private void onStartdirectionsCommand(Message message, String language) { + SendMessage sendMessageRequest = new SendMessage(); + sendMessageRequest.setChatId(message.getChatId()); + sendMessageRequest.setReplayToMessageId(message.getMessageId()); + ForceReply forceReply = new ForceReply(); + forceReply.setSelective(true); + sendMessageRequest.setReplayMarkup(forceReply); + sendMessageRequest.setText(LocalisationService.getInstance().getString("initDirections", language)); + Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); + if (sentMessage != null) { + DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_ORIGIN_STATUS, + sentMessage.getMessageId(), null); + } + } + + private void onSetLanguageCommand(Message message, String language) { + SendMessage sendMessageRequest = new SendMessage(); + sendMessageRequest.setChatId(message.getChatId()); + ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); + HashMap languages = LocalisationService.getInstance().supportedLanguages; + List> commands = new ArrayList<>(); + for (Map.Entry entry : languages.entrySet()) { + List commandRow = new ArrayList<>(); + commandRow.add(entry.getKey() + " --> " + entry.getValue()); + commands.add(commandRow); + } + replyKeyboardMarkup.setResizeKeyboard(true); + replyKeyboardMarkup.setOneTimeKeyboad(true); + replyKeyboardMarkup.setKeyboard(commands); + replyKeyboardMarkup.setSelective(true); + sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); + sendMessageRequest.setText(LocalisationService.getInstance().getString("chooselanguage", language)); + SenderHelper.SendMessage(sendMessageRequest, TOKEN); + languageMessages.add(message.getFrom().getId()); + } + + private void onLanguageSelected(Message message) { + String[] parts = message.getText().split("-->", 2); + SendMessage sendMessageRequest = new SendMessage(); + sendMessageRequest.setChatId(message.getChatId()); + if (LocalisationService.getInstance().supportedLanguages.containsKey(parts[0].trim())) { + DatabaseManager.getInstance().putUserLanguage(message.getFrom().getId(), parts[0].trim()); + sendMessageRequest.setText(LocalisationService.getInstance().getString("languageModified", parts[0].trim())); + } else { + sendMessageRequest.setText(LocalisationService.getInstance().getString("errorLanguage")); + } + sendMessageRequest.setReplayToMessageId(message.getMessageId()); + ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); + replyKeyboardHide.setHideKeyboard(true); + replyKeyboardHide.setSelective(true); + sendMessageRequest.setReplayMarkup(replyKeyboardHide); + SenderHelper.SendMessage(sendMessageRequest, TOKEN); + languageMessages.remove(message.getFrom().getId()); + } }