From 74ab0d38a4fc942c2ce74fcf26a06f5e8b834a0a Mon Sep 17 00:00:00 2001 From: Rubenlagu Date: Mon, 29 Jun 2015 23:11:48 +0200 Subject: [PATCH] 1. Refactor weatherbot --- .idea/workspace.xml | 166 ++++----- .../updateshandlers/WeatherHandlers.java | 346 ++++++++++-------- 2 files changed, 264 insertions(+), 248 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 6b962b7..cf96fb8 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -36,9 +36,7 @@ - - - + @@ -46,8 +44,8 @@ - - + + @@ -57,7 +55,7 @@ - + @@ -67,7 +65,7 @@ - + @@ -168,9 +166,9 @@ @@ -303,7 +301,8 @@ - + + @@ -480,8 +479,7 @@ - - + @@ -508,6 +506,8 @@ + + @@ -904,7 +904,8 @@ - + + 1434854005227 @@ -1068,11 +1069,17 @@ - - @@ -1085,7 +1092,7 @@ - + @@ -1097,38 +1104,38 @@ - - - + + + - + - + - + @@ -1140,8 +1147,8 @@ - + @@ -1178,7 +1185,8 @@ - @@ -1412,7 +1397,6 @@ - @@ -1504,7 +1488,6 @@ - @@ -1558,23 +1541,6 @@ - - - - - - - - - - - - - - - - - @@ -1584,15 +1550,14 @@ + + + - - - - @@ -1613,24 +1578,6 @@ - - - - - - - - - - - - - - - - - - @@ -1654,9 +1601,7 @@ - - - + @@ -1681,10 +1626,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + diff --git a/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java b/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java index 330ff3d..24ed89e 100644 --- a/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java +++ b/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java @@ -58,181 +58,217 @@ public class WeatherHandlers 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()); + onLanguageReceived(message); } else { String language = DatabaseManager.getInstance().getUserLanguage(update.getMessage().getFrom().getId()); String text = message.getText(); String[] parts = text.split(" ", 2); 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 (parts[0].startsWith(Commands.WEATHERCOMMAND)) { if (parts.length == 2) { - String citywithoutdescription = parts[1].split("-->", 2)[0].trim(); - String weather = WeatherService.getInstance().fetchWeatherForecast(citywithoutdescription, - message.getFrom().getId(), language); - SendMessage sendMessageRequest = new SendMessage(); - ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); - replyKeyboardHide.setSelective(true); - replyKeyboardHide.setHideKeyboard(true); - sendMessageRequest.setReplayMarkup(replyKeyboardHide); - sendMessageRequest.setReplayToMessageId(update.getMessage().getMessageId()); - sendMessageRequest.setText(weather); - sendMessageRequest.setChatId(message.getChatId()); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); + onWeatherWithParameter(update, message, language, parts[1].split("-->", 2)[0]); } else { - HashMap recentWeather = DatabaseManager.getInstance().getRecentWeather(message.getFrom().getId()); - SendMessage sendMessageRequest = new SendMessage(); - if (recentWeather.size() > 0) { - ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); - List> commands = new ArrayList<>(); - for (Map.Entry entry : recentWeather.entrySet()) { - List commandRow = new ArrayList<>(); - commandRow.add(Commands.WEATHERCOMMAND + " " + entry.getKey() + " --> " + entry.getValue()); - commands.add(commandRow); - } - replyKeyboardMarkup.setResizeKeyboard(true); - replyKeyboardMarkup.setOneTimeKeyboad(true); - replyKeyboardMarkup.setSelective(true); - replyKeyboardMarkup.setKeyboard(commands); - sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); - sendMessageRequest.setText(LocalisationService.getInstance().getString("chooseFromRecentWeather", language)); - } else { - sendMessageRequest.setText(LocalisationService.getInstance().getString("pleaseSendMeCityWeather", language)); - ForceReply forceReply = new ForceReply(); - forceReply.setForceReply(true); - forceReply.setSelective(true); - sendMessageRequest.setReplayMarkup(forceReply); - } - sendMessageRequest.setReplayToMessageId(message.getMessageId()); - sendMessageRequest.setChatId(message.getChatId()); - Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); - try { - listOfSentMessages.put(sentMessage.getMessageId(), FORECASTWEATHERID); - } catch (NullPointerException e) { - log.error(e); - } + onWeatherWithoutParameters(message, language); } } else if (parts[0].startsWith(Commands.CURRENTWEATHERCOMMAND)) { if (parts.length == 2) { - String citywithoutdescription = parts[1].split("-->", 2)[0].trim(); - String weather = WeatherService.getInstance().fetchWeatherCurrent(citywithoutdescription, - message.getFrom().getId(), language); - SendMessage sendMessageRequest = new SendMessage(); - ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); - replyKeyboardHide.setSelective(true); - replyKeyboardHide.setHideKeyboard(true); - sendMessageRequest.setReplayMarkup(replyKeyboardHide); - sendMessageRequest.setReplayToMessageId(update.getMessage().getMessageId()); - sendMessageRequest.setText(weather); - sendMessageRequest.setChatId(message.getChatId()); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); + onCurrentWithParameters(update, message, language, parts[1].split("-->", 2)[0]); } else { - HashMap recentWeather = DatabaseManager.getInstance().getRecentWeather(message.getFrom().getId()); - SendMessage sendMessageRequest = new SendMessage(); - if (recentWeather.size() > 0) { - ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); - List> commands = new ArrayList<>(); - for (Map.Entry entry : recentWeather.entrySet()) { - List commandRow = new ArrayList<>(); - commandRow.add(Commands.CURRENTWEATHERCOMMAND + " " + entry.getKey() + " --> " + entry.getValue()); - commands.add(commandRow); - } - replyKeyboardMarkup.setResizeKeyboard(true); - replyKeyboardMarkup.setOneTimeKeyboad(true); - replyKeyboardMarkup.setSelective(true); - replyKeyboardMarkup.setKeyboard(commands); - sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); - sendMessageRequest.setText(LocalisationService.getInstance().getString("chooseFromRecentWeather", language)); - } else { - sendMessageRequest.setText(LocalisationService.getInstance().getString("pleaseSendMeCityWeather", language)); - ForceReply forceReply = new ForceReply(); - forceReply.setForceReply(true); - forceReply.setSelective(true); - sendMessageRequest.setReplayMarkup(forceReply); - } - sendMessageRequest.setChatId(message.getChatId()); - sendMessageRequest.setReplayToMessageId(message.getMessageId()); - Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); - try { - listOfSentMessages.put(sentMessage.getMessageId(), CURRENTWEATHERID); - } catch (NullPointerException e) { - log.error(e); - } + onCurrentWithoutParameters(message, language); } } else if (message.isReply() && listOfSentMessages.containsKey(message.getReplyToMessage().getMessageId())) { - SendMessage sendMessageRequest = new SendMessage(); - if (listOfSentMessages.remove(message.getReplyToMessage().getMessageId()) == CURRENTWEATHERID) { - String weather = WeatherService.getInstance().fetchWeatherCurrent(message.getText(), - message.getFrom().getId(), language); - sendMessageRequest.setText(weather); - } else { - String weather = WeatherService.getInstance().fetchWeatherForecast(message.getText(), - message.getFrom().getId(), language); - sendMessageRequest.setText(weather); - } - ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); - replyKeyboardHide.setSelective(true); - replyKeyboardHide.setHideKeyboard(true); - sendMessageRequest.setReplayMarkup(replyKeyboardHide); - sendMessageRequest.setReplayToMessageId(update.getMessage().getMessageId()); - sendMessageRequest.setChatId(message.getChatId()); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); + onReplyForPreviousCommnad(update, message, language); } else if (parts[0].startsWith(Commands.help) || (message.getText().startsWith(Commands.startCommand) || !message.isGroupMessage())) { - SendMessage sendMessageRequest = new SendMessage(); - String formatedHelp = String.format( - LocalisationService.getInstance().getString("helpWeather", language), - Commands.WEATHERCOMMAND, Commands.CURRENTWEATHERCOMMAND); - sendMessageRequest.setText(formatedHelp); - sendMessageRequest.setChatId(message.getChatId()); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); + sendHelpMessage(message, language); } } } else if (message != null && message.hasLocation()) { - String language = DatabaseManager.getInstance().getUserLanguage(update.getMessage().getFrom().getId()); - String weather = WeatherService.getInstance().fetchWeatherForecastByLocation(message.getLocation().getLongitude(), - message.getLocation().getLatitude(), message.getFrom().getId(), language); - SendMessage sendMessageRequest = new SendMessage(); - ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); - replyKeyboardHide.setSelective(true); - replyKeyboardHide.setHideKeyboard(true); - sendMessageRequest.setReplayMarkup(replyKeyboardHide); - sendMessageRequest.setReplayToMessageId(update.getMessage().getMessageId()); + onLocationReceived(update, message); + } + } + + private void onLocationReceived(Update update, Message message) { + String language = DatabaseManager.getInstance().getUserLanguage(update.getMessage().getFrom().getId()); + String weather = WeatherService.getInstance().fetchWeatherForecastByLocation(message.getLocation().getLongitude(), + message.getLocation().getLatitude(), message.getFrom().getId(), language); + SendMessage sendMessageRequest = new SendMessage(); + ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); + replyKeyboardHide.setSelective(true); + replyKeyboardHide.setHideKeyboard(true); + sendMessageRequest.setReplayMarkup(replyKeyboardHide); + sendMessageRequest.setReplayToMessageId(update.getMessage().getMessageId()); + sendMessageRequest.setText(weather); + sendMessageRequest.setChatId(message.getChatId()); + SenderHelper.SendMessage(sendMessageRequest, TOKEN); + } + + private void sendHelpMessage(Message message, String language) { + SendMessage sendMessageRequest = new SendMessage(); + String formatedHelp = String.format( + LocalisationService.getInstance().getString("helpWeather", language), + Commands.WEATHERCOMMAND, Commands.CURRENTWEATHERCOMMAND); + sendMessageRequest.setText(formatedHelp); + sendMessageRequest.setChatId(message.getChatId()); + SenderHelper.SendMessage(sendMessageRequest, TOKEN); + } + + private void onReplyForPreviousCommnad(Update update, Message message, String language) { + SendMessage sendMessageRequest = new SendMessage(); + if (listOfSentMessages.remove(message.getReplyToMessage().getMessageId()) == CURRENTWEATHERID) { + String weather = WeatherService.getInstance().fetchWeatherCurrent(message.getText(), + message.getFrom().getId(), language); sendMessageRequest.setText(weather); - sendMessageRequest.setChatId(message.getChatId()); - SenderHelper.SendMessage(sendMessageRequest, TOKEN); + } else { + String weather = WeatherService.getInstance().fetchWeatherForecast(message.getText(), + message.getFrom().getId(), language); + sendMessageRequest.setText(weather); + } + ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); + replyKeyboardHide.setSelective(true); + replyKeyboardHide.setHideKeyboard(true); + sendMessageRequest.setReplayMarkup(replyKeyboardHide); + sendMessageRequest.setReplayToMessageId(update.getMessage().getMessageId()); + sendMessageRequest.setChatId(message.getChatId()); + SenderHelper.SendMessage(sendMessageRequest, TOKEN); + } + + private void onCurrentWithoutParameters(Message message, String language) { + HashMap recentWeather = DatabaseManager.getInstance().getRecentWeather(message.getFrom().getId()); + SendMessage sendMessageRequest = new SendMessage(); + if (recentWeather.size() > 0) { + ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); + List> commands = new ArrayList<>(); + for (Map.Entry entry : recentWeather.entrySet()) { + List commandRow = new ArrayList<>(); + commandRow.add(Commands.CURRENTWEATHERCOMMAND + " " + entry.getKey() + " --> " + entry.getValue()); + commands.add(commandRow); + } + replyKeyboardMarkup.setResizeKeyboard(true); + replyKeyboardMarkup.setOneTimeKeyboad(true); + replyKeyboardMarkup.setSelective(true); + replyKeyboardMarkup.setKeyboard(commands); + sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); + sendMessageRequest.setText(LocalisationService.getInstance().getString("chooseFromRecentWeather", language)); + } else { + sendMessageRequest.setText(LocalisationService.getInstance().getString("pleaseSendMeCityWeather", language)); + ForceReply forceReply = new ForceReply(); + forceReply.setForceReply(true); + forceReply.setSelective(true); + sendMessageRequest.setReplayMarkup(forceReply); + } + sendMessageRequest.setChatId(message.getChatId()); + sendMessageRequest.setReplayToMessageId(message.getMessageId()); + Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); + try { + listOfSentMessages.put(sentMessage.getMessageId(), CURRENTWEATHERID); + } catch (NullPointerException e) { + log.error(e); + } + } + + private void onCurrentWithParameters(Update update, Message message, String language, String s) { + String citywithoutdescription = s.trim(); + String weather = WeatherService.getInstance().fetchWeatherCurrent(citywithoutdescription, + message.getFrom().getId(), language); + SendMessage sendMessageRequest = new SendMessage(); + ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); + replyKeyboardHide.setSelective(true); + replyKeyboardHide.setHideKeyboard(true); + sendMessageRequest.setReplayMarkup(replyKeyboardHide); + sendMessageRequest.setReplayToMessageId(update.getMessage().getMessageId()); + sendMessageRequest.setText(weather); + sendMessageRequest.setChatId(message.getChatId()); + SenderHelper.SendMessage(sendMessageRequest, TOKEN); + } + + private void onWeatherWithoutParameters(Message message, String language) { + HashMap recentWeather = DatabaseManager.getInstance().getRecentWeather(message.getFrom().getId()); + SendMessage sendMessageRequest = new SendMessage(); + if (recentWeather.size() > 0) { + ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); + List> commands = new ArrayList<>(); + for (Map.Entry entry : recentWeather.entrySet()) { + List commandRow = new ArrayList<>(); + commandRow.add(Commands.WEATHERCOMMAND + " " + entry.getKey() + " --> " + entry.getValue()); + commands.add(commandRow); + } + replyKeyboardMarkup.setResizeKeyboard(true); + replyKeyboardMarkup.setOneTimeKeyboad(true); + replyKeyboardMarkup.setSelective(true); + replyKeyboardMarkup.setKeyboard(commands); + sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); + sendMessageRequest.setText(LocalisationService.getInstance().getString("chooseFromRecentWeather", language)); + } else { + sendMessageRequest.setText(LocalisationService.getInstance().getString("pleaseSendMeCityWeather", language)); + ForceReply forceReply = new ForceReply(); + forceReply.setForceReply(true); + forceReply.setSelective(true); + sendMessageRequest.setReplayMarkup(forceReply); + } + sendMessageRequest.setReplayToMessageId(message.getMessageId()); + sendMessageRequest.setChatId(message.getChatId()); + Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN); + try { + listOfSentMessages.put(sentMessage.getMessageId(), FORECASTWEATHERID); + } catch (NullPointerException e) { + log.error(e); + } + } + + private void onWeatherWithParameter(Update update, Message message, String language, String s) { + String citywithoutdescription = s.trim(); + String weather = WeatherService.getInstance().fetchWeatherForecast(citywithoutdescription, + message.getFrom().getId(), language); + SendMessage sendMessageRequest = new SendMessage(); + ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); + replyKeyboardHide.setSelective(true); + replyKeyboardHide.setHideKeyboard(true); + sendMessageRequest.setReplayMarkup(replyKeyboardHide); + sendMessageRequest.setReplayToMessageId(update.getMessage().getMessageId()); + sendMessageRequest.setText(weather); + sendMessageRequest.setChatId(message.getChatId()); + SenderHelper.SendMessage(sendMessageRequest, TOKEN); + } + + 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 onLanguageReceived(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()); } }