From 777bcfb72f929d5e12f0aa0ed6748d11c7a8c1a8 Mon Sep 17 00:00:00 2001 From: Rubenlagus Date: Fri, 29 Apr 2016 17:46:33 +0200 Subject: [PATCH] 1. Fix users blocked the bot --- .idea/workspace.xml | 263 +++++++++++------- .../telegram/database/DatabaseManager.java | 12 + .../updateshandlers/FilesHandlers.java | 119 +++----- .../updateshandlers/WeatherHandlers.java | 24 +- 4 files changed, 225 insertions(+), 193 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 8731757..81bb26a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,16 +2,12 @@ - - - + - - @@ -55,69 +51,68 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + + - + + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -165,7 +160,6 @@ @@ -375,6 +370,7 @@ + @@ -514,7 +510,6 @@ - @@ -1206,14 +1201,8 @@ - - - - 1434928139587 - 1434932225092 @@ -1551,11 +1540,18 @@ - - @@ -1572,7 +1568,6 @@ - @@ -1586,6 +1581,7 @@ + @@ -1595,8 +1591,8 @@ - + @@ -1646,7 +1642,6 @@ - @@ -1671,7 +1666,8 @@ - @@ -1709,13 +1705,13 @@ file://$PROJECT_DIR$/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java - 1182 + 1178 file://$PROJECT_DIR$/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java - 1175 + 1171 @@ -1744,8 +1740,6 @@ - - @@ -1871,16 +1865,6 @@ - - - - - - - - - - @@ -1919,14 +1903,24 @@ - + - - + + + + + + + + + + + + @@ -1935,19 +1929,17 @@ - + - - - - - + + + - + @@ -1957,22 +1949,83 @@ - + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/telegram/database/DatabaseManager.java b/src/main/java/org/telegram/database/DatabaseManager.java index 861ed4c..4dbe43a 100644 --- a/src/main/java/org/telegram/database/DatabaseManager.java +++ b/src/main/java/org/telegram/database/DatabaseManager.java @@ -566,6 +566,18 @@ public class DatabaseManager { return updatedRows > 0; } + public boolean deleteAlertsForUser(Integer userId) { + int updatedRows = 0; + try { + final PreparedStatement preparedStatement = connetion.getPreparedStatement("DELETE FROM WeatherAlert WHERE userId=?"); + preparedStatement.setInt(1, userId); + updatedRows = preparedStatement.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + } + return updatedRows > 0; + } + public List getAllAlerts() { List allAlerts = new ArrayList<>(); diff --git a/src/main/java/org/telegram/updateshandlers/FilesHandlers.java b/src/main/java/org/telegram/updateshandlers/FilesHandlers.java index 24dae27..52e95c6 100644 --- a/src/main/java/org/telegram/updateshandlers/FilesHandlers.java +++ b/src/main/java/org/telegram/updateshandlers/FilesHandlers.java @@ -45,7 +45,17 @@ public class FilesHandlers extends TelegramLongPollingBot { @Override public void onUpdateReceived(Update update) { try { - handleFileUpdate(update); + if (update.hasMessage()) { + try { + handleFileUpdate(update); + } catch (TelegramApiException e) { + if (e.getApiResponse().contains("Bot was blocked by the user")) { + if (update.getMessage().getFrom() != null) { + DatabaseManager.getInstance().deleteUserForFile(update.getMessage().getFrom().getId()); + } + } + } + } } catch (Exception e) { BotLogger.error(LOGTAG, e); } @@ -56,7 +66,7 @@ public class FilesHandlers extends TelegramLongPollingBot { return BotConfig.USERNAMEFILES; } - private void handleFileUpdate(Update update) throws InvalidObjectException { + private void handleFileUpdate(Update update) throws InvalidObjectException, TelegramApiException { Message message = update.getMessage(); if (message != null && message.hasText()) { if (languageMessages.contains(message.getFrom().getId())) { @@ -96,15 +106,11 @@ public class FilesHandlers extends TelegramLongPollingBot { sendMessageRequest.setText(LocalisationService.getInstance().getString("fileUploaded", language) + LocalisationService.getInstance().getString("uploadedFileURL", language) + message.getDocument().getFileId()); sendMessageRequest.setChatId(message.getChatId().toString()); - try { - sendMessage(sendMessageRequest); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + sendMessage(sendMessageRequest); } } - private void onListCommand(Message message, String language) throws InvalidObjectException { + private void onListCommand(Message message, String language) throws InvalidObjectException, TelegramApiException { HashMap files = DatabaseManager.getInstance().getFilesByUser(message.getFrom().getId()); SendMessage sendMessageRequest = new SendMessage(); if (files.size() > 0) { @@ -121,14 +127,10 @@ public class FilesHandlers extends TelegramLongPollingBot { ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide(); replyKeyboardHide.setHideKeyboard(true); sendMessageRequest.setReplayMarkup(replyKeyboardHide); - try { - sendMessage(sendMessageRequest); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + sendMessage(sendMessageRequest); } - private void onDeleteCommand(Message message, String language, String[] parts) throws InvalidObjectException { + private void onDeleteCommand(Message message, String language, String[] parts) throws InvalidObjectException, TelegramApiException { if (DatabaseManager.getInstance().getUserStatusForFile(message.getFrom().getId()) == DELETE_UPLOADED_STATUS && parts.length == 2) { onDeleteCommandWithParameters(message, language, parts[1]); @@ -137,7 +139,7 @@ public class FilesHandlers extends TelegramLongPollingBot { } } - private void onDeleteCommandWithoutParameters(Message message, String language) throws InvalidObjectException { + private void onDeleteCommandWithoutParameters(Message message, String language) throws InvalidObjectException, TelegramApiException { DatabaseManager.getInstance().addUserForFile(message.getFrom().getId(), DELETE_UPLOADED_STATUS); SendMessage sendMessageRequest = new SendMessage(); sendMessageRequest.setText(LocalisationService.getInstance().getString("deleteUploadedFile", language)); @@ -157,14 +159,10 @@ public class FilesHandlers extends TelegramLongPollingBot { replyKeyboardMarkup.setKeyboard(commands); } sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); - try { - sendMessage(sendMessageRequest); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + sendMessage(sendMessageRequest); } - private void onDeleteCommandWithParameters(Message message, String language, String part) throws InvalidObjectException { + private void onDeleteCommandWithParameters(Message message, String language, String part) throws InvalidObjectException, TelegramApiException { String[] innerParts = part.split(Emoji.LEFT_RIGHT_ARROW.toString(), 2); boolean removed = DatabaseManager.getInstance().deleteFile(innerParts[0].trim()); SendMessage sendMessageRequest = new SendMessage(); @@ -174,40 +172,29 @@ public class FilesHandlers extends TelegramLongPollingBot { sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language)); } sendMessageRequest.setChatId(message.getChatId().toString()); - try { - sendMessage(sendMessageRequest); - DatabaseManager.getInstance().deleteUserForFile(message.getFrom().getId()); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + + sendMessage(sendMessageRequest); + DatabaseManager.getInstance().deleteUserForFile(message.getFrom().getId()); } - private void onCancelCommand(Message message, String language) throws InvalidObjectException { + private void onCancelCommand(Message message, String language) throws InvalidObjectException, TelegramApiException { DatabaseManager.getInstance().deleteUserForFile(message.getFrom().getId()); SendMessage sendMessageRequest = new SendMessage(); sendMessageRequest.setText(LocalisationService.getInstance().getString("processFinished", language)); sendMessageRequest.setChatId(message.getChatId().toString()); - try { - sendMessage(sendMessageRequest); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + sendMessage(sendMessageRequest); } - private void onUploadCommand(Message message, String language) throws InvalidObjectException { + private void onUploadCommand(Message message, String language) throws InvalidObjectException, TelegramApiException { DatabaseManager.getInstance().addUserForFile(message.getFrom().getId(), INITIAL_UPLOAD_STATUS); SendMessage sendMessageRequest = new SendMessage(); sendMessageRequest.setText(LocalisationService.getInstance().getString("sendFileToUpload", language)); sendMessageRequest.setChatId(message.getChatId().toString()); - try { - sendMessage(sendMessageRequest); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + sendMessage(sendMessageRequest); } - private void sendHelpMessage(Message message, String language) throws InvalidObjectException { + private void sendHelpMessage(Message message, String language) throws InvalidObjectException, TelegramApiException { SendMessage sendMessageRequest = new SendMessage(); String formatedString = String.format( LocalisationService.getInstance().getString("helpFiles", language), @@ -215,32 +202,24 @@ public class FilesHandlers extends TelegramLongPollingBot { Commands.listCommand); sendMessageRequest.setText(formatedString); sendMessageRequest.setChatId(message.getChatId().toString()); - try { - sendMessage(sendMessageRequest); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + sendMessage(sendMessageRequest); } - private void onStartWithParameters(Message message, String language, String part) throws InvalidObjectException { - try { - if (DatabaseManager.getInstance().doesFileExists(part.trim())) { - SendDocument sendDocumentRequest = new SendDocument(); - sendDocumentRequest.setDocument(part.trim()); - sendDocumentRequest.setChatId(message.getChatId().toString()); - sendDocument(sendDocumentRequest); - } else { - SendMessage sendMessageRequest = new SendMessage(); - sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language)); - sendMessageRequest.setChatId(message.getChatId().toString()); - sendMessage(sendMessageRequest); - } - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); + private void onStartWithParameters(Message message, String language, String part) throws InvalidObjectException, TelegramApiException { + if (DatabaseManager.getInstance().doesFileExists(part.trim())) { + SendDocument sendDocumentRequest = new SendDocument(); + sendDocumentRequest.setDocument(part.trim()); + sendDocumentRequest.setChatId(message.getChatId().toString()); + sendDocument(sendDocumentRequest); + } else { + SendMessage sendMessageRequest = new SendMessage(); + sendMessageRequest.setText(LocalisationService.getInstance().getString("wrongFileId", language)); + sendMessageRequest.setChatId(message.getChatId().toString()); + sendMessage(sendMessageRequest); } } - private void onSetLanguageCommand(Message message, String language) throws InvalidObjectException { + private void onSetLanguageCommand(Message message, String language) throws InvalidObjectException, TelegramApiException { SendMessage sendMessageRequest = new SendMessage(); sendMessageRequest.setChatId(message.getChatId().toString()); ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); @@ -257,15 +236,11 @@ public class FilesHandlers extends TelegramLongPollingBot { replyKeyboardMarkup.setSelective(true); sendMessageRequest.setReplayMarkup(replyKeyboardMarkup); sendMessageRequest.setText(LocalisationService.getInstance().getString("chooselanguage", language)); - try { - sendMessage(sendMessageRequest); - languageMessages.add(message.getFrom().getId()); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + sendMessage(sendMessageRequest); + languageMessages.add(message.getFrom().getId()); } - private void onLanguageReceived(Message message) throws InvalidObjectException { + private void onLanguageReceived(Message message) throws InvalidObjectException, TelegramApiException { String[] parts = message.getText().split(Emoji.LEFT_RIGHT_ARROW.toString(), 2); SendMessage sendMessageRequest = new SendMessage(); sendMessageRequest.setChatId(message.getChatId().toString()); @@ -280,11 +255,7 @@ public class FilesHandlers extends TelegramLongPollingBot { replyKeyboardHide.setHideKeyboard(true); replyKeyboardHide.setSelective(true); sendMessageRequest.setReplayMarkup(replyKeyboardHide); - try { - sendMessage(sendMessageRequest); - languageMessages.remove(message.getFrom().getId()); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } + sendMessage(sendMessageRequest); + languageMessages.remove(message.getFrom().getId()); } } diff --git a/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java b/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java index 00d7193..cdd25be 100644 --- a/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java +++ b/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java @@ -113,7 +113,12 @@ public class WeatherHandlers extends TelegramLongPollingBot { try { sendMessage(sendMessage); } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); + BotLogger.warn(LOGTAG, e); + if (e.getApiResponse().contains("Can't access the chat") || e.getApiResponse().contains("Bot was blocked by the user")) { + DatabaseManager.getInstance().deleteAlertsForUser(weatherAlert.getUserId()); + } + } catch (Exception e) { + BotLogger.severe(LOGTAG, e); } } } @@ -133,7 +138,7 @@ public class WeatherHandlers extends TelegramLongPollingBot { // region Incoming messages handlers - private void handleIncomingMessage(Message message) { + private void handleIncomingMessage(Message message) throws TelegramApiException { final int state = DatabaseManager.getInstance().getWeatherState(message.getFrom().getId(), message.getChatId()); final String language = DatabaseManager.getInstance().getUserWeatherOptions(message.getFrom().getId())[0]; if (!message.isUserMessage() && message.hasText()) { @@ -178,14 +183,10 @@ public class WeatherHandlers extends TelegramLongPollingBot { break; } - try { sendMessage(sendMessageRequest); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } } - private void sendHideKeyboard(Integer userId, Long chatId, Integer messageId) { + private void sendHideKeyboard(Integer userId, Long chatId, Integer messageId) throws TelegramApiException { SendMessage sendMessage = new SendMessage(); sendMessage.setChatId(chatId.toString()); sendMessage.enableMarkdown(true); @@ -197,13 +198,8 @@ public class WeatherHandlers extends TelegramLongPollingBot { replyKeyboardHide.setHideKeyboard(true); sendMessage.setReplayMarkup(replyKeyboardHide); - try { - sendMessage(sendMessage); - DatabaseManager.getInstance().insertWeatherState(userId, chatId, STARTSTATE); - } catch (TelegramApiException e) { - BotLogger.error(LOGTAG, e); - } - + sendMessage(sendMessage); + DatabaseManager.getInstance().insertWeatherState(userId, chatId, STARTSTATE); } private static boolean isCommandForOther(String text) {