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 @@
1435524383549
-
+
+ 1435531042174
+
+
+ 1435531042174
+
+
-
+
@@ -1085,7 +1092,7 @@
-
+
@@ -1097,38 +1104,38 @@
-
-
-
+
+
+
-
+
-
+
-
+
@@ -1140,8 +1147,8 @@
-
+
@@ -1178,7 +1185,8 @@
-
+
+
@@ -1201,12 +1209,6 @@
-
- file://$PROJECT_DIR$/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java
- 171
-
-
-
file://$PROJECT_DIR$/src/main/java/org/telegram/updatesreceivers/UpdatesThread.java
105
@@ -1262,24 +1264,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -1401,10 +1390,6 @@
-
-
-
-
@@ -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());
}
}