From a25493b29414e0e899d8e02b5996237a78bc50ab Mon Sep 17 00:00:00 2001 From: Rubenlagu Date: Thu, 19 Nov 2015 22:17:15 +0100 Subject: [PATCH] 1. Improved support for channels --- src/main/java/org/telegram/SenderHelper.java | 11 ++----- .../telegram/api/methods/SendDocument.java | 15 ++-------- .../java/org/telegram/api/objects/Chat.java | 6 ++-- .../org/telegram/api/objects/Message.java | 2 +- .../telegram/database/CreationStrings.java | 4 +-- .../telegram/database/DatabaseManager.java | 18 +++++++---- .../updateshandlers/FilesHandlers.java | 8 ++--- .../updateshandlers/TransifexHandlers.java | 13 ++++---- .../updateshandlers/WeatherHandlers.java | 30 +++++++++---------- 9 files changed, 51 insertions(+), 56 deletions(-) diff --git a/src/main/java/org/telegram/SenderHelper.java b/src/main/java/org/telegram/SenderHelper.java index f65eb8b..06972de 100644 --- a/src/main/java/org/telegram/SenderHelper.java +++ b/src/main/java/org/telegram/SenderHelper.java @@ -16,7 +16,6 @@ import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.json.JSONObject; -import org.telegram.api.objects.Message; import org.telegram.api.methods.*; import org.telegram.services.BotLogger; import org.telegram.updateshandlers.SentCallback; @@ -24,10 +23,8 @@ import org.telegram.updateshandlers.SentCallback; import java.io.File; import java.io.IOException; import java.io.InvalidObjectException; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -49,11 +46,7 @@ public class SenderHelper { if (sendDocument.isNewDocument()) { MultipartEntityBuilder builder = MultipartEntityBuilder.create(); - if (sendDocument.getChatId() == null) { - builder.addTextBody(SendDocument.CHATID_FIELD, sendDocument.getChannelId()); - } else { - builder.addTextBody(SendDocument.CHATID_FIELD, sendDocument.getChatId().toString()); - } + builder.addTextBody(SendDocument.CHATID_FIELD, sendDocument.getChatId()); builder.addBinaryBody(SendDocument.DOCUMENT_FIELD, new File(sendDocument.getDocument()), ContentType.APPLICATION_OCTET_STREAM, sendDocument.getDocumentName()); if (sendDocument.getReplayMarkup() != null) { builder.addTextBody(SendDocument.REPLYMARKUP_FIELD, sendDocument.getReplayMarkup().toJson().toString()); @@ -65,7 +58,7 @@ public class SenderHelper { httppost.setEntity(multipart); } else { List nameValuePairs = new ArrayList<>(); - nameValuePairs.add(new BasicNameValuePair(SendDocument.CHATID_FIELD, sendDocument.getChatId().toString())); + nameValuePairs.add(new BasicNameValuePair(SendDocument.CHATID_FIELD, sendDocument.getChatId())); nameValuePairs.add(new BasicNameValuePair(SendDocument.DOCUMENT_FIELD, sendDocument.getDocument())); if (sendDocument.getReplayMarkup() != null) { nameValuePairs.add(new BasicNameValuePair(SendDocument.REPLYMARKUP_FIELD, sendDocument.getReplayMarkup().toString())); diff --git a/src/main/java/org/telegram/api/methods/SendDocument.java b/src/main/java/org/telegram/api/methods/SendDocument.java index a106ecb..0345d66 100644 --- a/src/main/java/org/telegram/api/methods/SendDocument.java +++ b/src/main/java/org/telegram/api/methods/SendDocument.java @@ -12,8 +12,7 @@ public class SendDocument { public static final String PATH = "senddocument"; public static final String CHATID_FIELD = "chat_id"; - private Integer chatId; ///< Unique identifier for the chat to send the message to - private String channelId; ///< Username for the channel to send the message to + private String chatId; ///< Unique identifier for the chat to send the message to or Username for the channel to send the message to public static final String DOCUMENT_FIELD = "document"; private String document; ///< File file to send. file_id as String to resend a file that is already on the Telegram servers public static final String REPLYTOMESSAGEID_FIELD = "reply_to_message_id"; @@ -28,22 +27,14 @@ public class SendDocument { super(); } - public Integer getChatId() { + public String getChatId() { return chatId; } - public void setChatId(Integer chatId) { + public void setChatId(String chatId) { this.chatId = chatId; } - public void setChatId(String channelId) { - this.channelId = channelId; - } - - public String getChannelId() { - return channelId; - } - public String getDocument() { return document; } diff --git a/src/main/java/org/telegram/api/objects/Chat.java b/src/main/java/org/telegram/api/objects/Chat.java index c718c03..c797a58 100644 --- a/src/main/java/org/telegram/api/objects/Chat.java +++ b/src/main/java/org/telegram/api/objects/Chat.java @@ -22,7 +22,7 @@ public class Chat implements BotApiObject { public static final String ID_FIELD = "id"; @JsonProperty(ID_FIELD) - private Integer id; ///< Unique identifier for this chat, not exciding 1e13 by absolute value + private Long id; ///< Unique identifier for this chat, not exciding 1e13 by absolute value public static final String TYPE_FIELD = "type"; @JsonProperty(TYPE_FIELD) private String type; ///< Type of the chat, one of “private”, “group” or “channel” @@ -45,7 +45,7 @@ public class Chat implements BotApiObject { public Chat(JSONObject jsonObject) { super(); - this.id = jsonObject.getInt(ID_FIELD); + this.id = jsonObject.getLong(ID_FIELD); this.type = jsonObject.getString(TYPE_FIELD); if (jsonObject.has(TITLE_FIELD)) { this.title = jsonObject.getString(TITLE_FIELD); @@ -61,7 +61,7 @@ public class Chat implements BotApiObject { } } - public Integer getId() { + public Long getId() { return id; } diff --git a/src/main/java/org/telegram/api/objects/Message.java b/src/main/java/org/telegram/api/objects/Message.java index 7702c95..d3fc531 100644 --- a/src/main/java/org/telegram/api/objects/Message.java +++ b/src/main/java/org/telegram/api/objects/Message.java @@ -198,7 +198,7 @@ public class Message implements BotApiObject { return chat.isChannelChat(); } - public Integer getChatId() { + public Long getChatId() { return chat.getId(); } diff --git a/src/main/java/org/telegram/database/CreationStrings.java b/src/main/java/org/telegram/database/CreationStrings.java index 59a2fb5..8b56782 100644 --- a/src/main/java/org/telegram/database/CreationStrings.java +++ b/src/main/java/org/telegram/database/CreationStrings.java @@ -7,7 +7,7 @@ package org.telegram.database; * @date 15 of May of 2015 */ public class CreationStrings { - public static final int version = 6; + public static final int version = 7; public static final String createVersionTable = "CREATE TABLE IF NOT EXISTS Versions(ID INTEGER PRIMARY KEY AUTO_INCREMENT, Version INTEGER);"; public static final String insertCurrentVersion = "INSERT IGNORE INTO Versions (Version) VALUES(%d);"; public static final String createFilesTable = "CREATE TABLE IF NOT EXISTS Files (fileId VARCHAR(100) PRIMARY KEY, userId INTEGER NOT NULL, caption TEXT NOT NULL)"; @@ -21,7 +21,7 @@ public class CreationStrings { public static final String createUserLanguageDatabase = "CREATE TABLE IF NOT EXISTS UserLanguage (userId INTEGER PRIMARY KEY, languageCode VARCHAR(10) NOT NULL)"; public static final String createUserWeatherOptionDatabase = "CREATE TABLE IF NOT EXISTS UserWeatherOptions (userId INTEGER PRIMARY KEY, languageCode VARCHAR(10) NOT NULL DEFAULT 'en', " + "units VARCHAR(10) NOT NULL DEFAULT 'metric')"; - public static final String createWeatherStateTable = "CREATE TABLE IF NOT EXISTS WeatherState (userId INTEGER NOT NULL, chatId INTEGER NOT NULL, state INTEGER NOT NULL DEFAULT 0, " + + public static final String createWeatherStateTable = "CREATE TABLE IF NOT EXISTS WeatherState (userId INTEGER NOT NULL, chatId BIGINT NOT NULL, state INTEGER NOT NULL DEFAULT 0, " + "languageCode VARCHAR(10) NOT NULL DEFAULT 'en', " + "CONSTRAINT `watherPrimaryKey` PRIMARY KEY(userId,chatId));"; public static final String createWeatherAlertTable = "CREATE TABLE IF NOT EXISTS WeatherAlert (id INTEGER PRIMARY KEY AUTO_INCREMENT, userId INTEGER NOT NULL, cityId INTEGER NOT NULL, " + diff --git a/src/main/java/org/telegram/database/DatabaseManager.java b/src/main/java/org/telegram/database/DatabaseManager.java index 295ee25..861ed4c 100644 --- a/src/main/java/org/telegram/database/DatabaseManager.java +++ b/src/main/java/org/telegram/database/DatabaseManager.java @@ -9,7 +9,6 @@ package org.telegram.database; import org.telegram.services.BotLogger; import org.telegram.structure.WeatherAlert; -import org.telegram.updateshandlers.WeatherHandlers; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -87,6 +86,9 @@ public class DatabaseManager { if (currentVersion == 5) { currentVersion = updateToVersion6(); } + if (currentVersion == 6) { + currentVersion = updateToVersion7(); + } connetion.commitTransaction(); } catch (SQLException e) { BotLogger.error(LOGTAG, e); @@ -125,6 +127,12 @@ public class DatabaseManager { return 6; } + private int updateToVersion7() throws SQLException { + connetion.executeQuery("ALTER TABLE WeatherState MODIFY chatId BIGINT NOT NULL"); + connetion.executeQuery(String.format(CreationStrings.insertCurrentVersion, 7)); + return 7; + } + private int createNewTables() throws SQLException { connetion.executeQuery(CreationStrings.createVersionTable); connetion.executeQuery(CreationStrings.createFilesTable); @@ -412,12 +420,12 @@ public class DatabaseManager { return updatedRows > 0; } - public int getWeatherState(Integer userId, Integer chatId) { + public int getWeatherState(Integer userId, Long chatId) { int state = 0; try { final PreparedStatement preparedStatement = connetion.getPreparedStatement("SELECT state FROM WeatherState WHERE userId = ? AND chatId = ?"); preparedStatement.setInt(1, userId); - preparedStatement.setInt(2, chatId); + preparedStatement.setLong(2, chatId); final ResultSet result = preparedStatement.executeQuery(); if (result.next()) { state = result.getInt("state"); @@ -428,12 +436,12 @@ public class DatabaseManager { return state; } - public boolean insertWeatherState(Integer userId, Integer chatId, int state) { + public boolean insertWeatherState(Integer userId, Long chatId, int state) { int updatedRows = 0; try { final PreparedStatement preparedStatement = connetion.getPreparedStatement("REPLACE INTO WeatherState (userId, chatId, state) VALUES (?, ?, ?)"); preparedStatement.setInt(1, userId); - preparedStatement.setInt(2, chatId); + preparedStatement.setLong(2, chatId); preparedStatement.setInt(3, state); updatedRows = preparedStatement.executeUpdate(); } catch (SQLException e) { diff --git a/src/main/java/org/telegram/updateshandlers/FilesHandlers.java b/src/main/java/org/telegram/updateshandlers/FilesHandlers.java index fce8398..a30a727 100644 --- a/src/main/java/org/telegram/updateshandlers/FilesHandlers.java +++ b/src/main/java/org/telegram/updateshandlers/FilesHandlers.java @@ -4,14 +4,14 @@ import org.telegram.BotConfig; import org.telegram.BuildVars; import org.telegram.Commands; import org.telegram.SenderHelper; +import org.telegram.api.methods.BotApiMethod; +import org.telegram.api.methods.SendDocument; +import org.telegram.api.methods.SendMessage; import org.telegram.api.objects.Message; import org.telegram.api.objects.ReplyKeyboardHide; import org.telegram.api.objects.ReplyKeyboardMarkup; import org.telegram.api.objects.Update; import org.telegram.database.DatabaseManager; -import org.telegram.api.methods.BotApiMethod; -import org.telegram.api.methods.SendDocument; -import org.telegram.api.methods.SendMessage; import org.telegram.services.BotLogger; import org.telegram.services.Emoji; import org.telegram.services.LocalisationService; @@ -208,7 +208,7 @@ public class FilesHandlers implements UpdatesCallback { if (DatabaseManager.getInstance().doesFileExists(part.trim())) { SendDocument sendDocumentRequest = new SendDocument(); sendDocumentRequest.setDocument(part.trim()); - sendDocumentRequest.setChatId(message.getChatId()); + sendDocumentRequest.setChatId(message.getChatId().toString()); SenderHelper.SendDocument(sendDocumentRequest, TOKEN); } else { SendMessage sendMessageRequest = new SendMessage(); diff --git a/src/main/java/org/telegram/updateshandlers/TransifexHandlers.java b/src/main/java/org/telegram/updateshandlers/TransifexHandlers.java index 56b3297..fba2bed 100644 --- a/src/main/java/org/telegram/updateshandlers/TransifexHandlers.java +++ b/src/main/java/org/telegram/updateshandlers/TransifexHandlers.java @@ -1,12 +1,15 @@ package org.telegram.updateshandlers; -import org.telegram.*; -import org.telegram.api.objects.Message; -import org.telegram.api.objects.Update; -import org.telegram.database.DatabaseManager; +import org.telegram.BotConfig; +import org.telegram.BuildVars; +import org.telegram.Commands; +import org.telegram.SenderHelper; import org.telegram.api.methods.BotApiMethod; import org.telegram.api.methods.SendDocument; import org.telegram.api.methods.SendMessage; +import org.telegram.api.objects.Message; +import org.telegram.api.objects.Update; +import org.telegram.database.DatabaseManager; import org.telegram.services.BotLogger; import org.telegram.services.LocalisationService; import org.telegram.services.TransifexService; @@ -87,7 +90,7 @@ public class TransifexHandlers implements UpdatesCallback { } if (sendDocument != null) { - sendDocument.setChatId(message.getChatId()); + sendDocument.setChatId(message.getChatId().toString()); SenderHelper.SendDocument(sendDocument, TOKEN); } } else if (parts[0].startsWith(Commands.help) || diff --git a/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java b/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java index d30480b..b803e40 100644 --- a/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java +++ b/src/main/java/org/telegram/updateshandlers/WeatherHandlers.java @@ -119,7 +119,7 @@ public class WeatherHandlers implements UpdatesCallback { return null; } - private static BotApiMethod onCancelCommand(Integer chatId, Integer userId, Integer messageId, ReplyKeyboard replyKeyboard, String language) { + private static BotApiMethod onCancelCommand(Long chatId, Integer userId, Integer messageId, ReplyKeyboard replyKeyboard, String language) { SendMessage sendMessage = new SendMessage(); sendMessage.setChatId(chatId.toString()); sendMessage.enableMarkdown(true); @@ -181,7 +181,7 @@ public class WeatherHandlers implements UpdatesCallback { return botApiMethod; } - private static void sendHideKeyboard(Integer userId, Integer chatId, Integer messageId) { + private static void sendHideKeyboard(Integer userId, Long chatId, Integer messageId) { SendMessage sendMessage = new SendMessage(); sendMessage.setChatId(chatId.toString()); sendMessage.enableMarkdown(true); @@ -484,7 +484,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendMessage; } - private static BotApiMethod onUnitsError(Integer chatId, Integer messageId, String language) { + private static BotApiMethod onUnitsError(Long chatId, Integer messageId, String language) { SendMessage sendMessageRequest = new SendMessage(); sendMessageRequest.enableMarkdown(true); sendMessageRequest.setChatId(chatId.toString()); @@ -495,7 +495,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendMessageRequest; } - private static BotApiMethod onUnitsChosen(Integer userId, Integer chatId, Integer messageId, String units, String language) { + private static BotApiMethod onUnitsChosen(Integer userId, Long chatId, Integer messageId, String units, String language) { DatabaseManager.getInstance().putUserWeatherUnitsOption(userId, units); SendMessage sendMessageRequest = new SendMessage(); @@ -542,7 +542,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendMessage; } - private static BotApiMethod onLanguageError(Integer chatId, Integer messageId, String language) { + private static BotApiMethod onLanguageError(Long chatId, Integer messageId, String language) { SendMessage sendMessageRequest = new SendMessage(); sendMessageRequest.enableMarkdown(true); sendMessageRequest.setChatId(chatId.toString()); @@ -553,7 +553,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendMessageRequest; } - private static BotApiMethod onLanguageChosen(Integer userId, Integer chatId, Integer messageId, String language) { + private static BotApiMethod onLanguageChosen(Integer userId, Long chatId, Integer messageId, String language) { String languageCode = LocalisationService.getInstance().getLanguageCodeByName(language); DatabaseManager.getInstance().putUserWeatherLanguageOption(userId, languageCode); @@ -614,7 +614,7 @@ public class WeatherHandlers implements UpdatesCallback { } } - private static BotApiMethod onForecastWeatherCityReceived(Integer chatId, Integer userId, Integer messageId, String text, String language) { + private static BotApiMethod onForecastWeatherCityReceived(Long chatId, Integer userId, Integer messageId, String text, String language) { Integer cityId = DatabaseManager.getInstance().getRecentWeatherIdByCity(userId, text); if (cityId != null) { String unitsSystem = DatabaseManager.getInstance().getUserWeatherOptions(userId)[1]; @@ -633,7 +633,7 @@ public class WeatherHandlers implements UpdatesCallback { } } - private static BotApiMethod onLocationForecastWeatherCommand(Integer chatId, Integer userId, Integer messageId, String language) { + private static BotApiMethod onLocationForecastWeatherCommand(Long chatId, Integer userId, Integer messageId, String language) { ForceReplyKeyboard forceReplyKeyboard = getForceReply(); SendMessage sendMessage = new SendMessage(); @@ -647,7 +647,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendMessage; } - private static BotApiMethod onNewForecastWeatherCommand(Integer chatId, Integer userId, Integer messageId, String language) { + private static BotApiMethod onNewForecastWeatherCommand(Long chatId, Integer userId, Integer messageId, String language) { ForceReplyKeyboard forceReplyKeyboard = getForceReply(); SendMessage sendMessage = new SendMessage(); @@ -716,7 +716,7 @@ public class WeatherHandlers implements UpdatesCallback { } } - private static BotApiMethod onCurrentWeatherCityReceived(Integer chatId, Integer userId, Integer messageId, String text, String language) { + private static BotApiMethod onCurrentWeatherCityReceived(Long chatId, Integer userId, Integer messageId, String text, String language) { Integer cityId = DatabaseManager.getInstance().getRecentWeatherIdByCity(userId, text); if (cityId != null) { String unitsSystem = DatabaseManager.getInstance().getUserWeatherOptions(userId)[1]; @@ -734,7 +734,7 @@ public class WeatherHandlers implements UpdatesCallback { } } - private static BotApiMethod onLocationCurrentWeatherCommand(Integer chatId, Integer userId, Integer messageId, String language) { + private static BotApiMethod onLocationCurrentWeatherCommand(Long chatId, Integer userId, Integer messageId, String language) { ForceReplyKeyboard forceReplyKeyboard = getForceReply(); SendMessage sendMessage = new SendMessage(); @@ -748,7 +748,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendMessage; } - private static BotApiMethod onNewCurrentWeatherCommand(Integer chatId, Integer userId, Integer messageId, String language) { + private static BotApiMethod onNewCurrentWeatherCommand(Long chatId, Integer userId, Integer messageId, String language) { ForceReplyKeyboard forceReplyKeyboard = getForceReply(); SendMessage sendMessage = new SendMessage(); @@ -1156,7 +1156,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendHelpMessage(message.getChatId().toString(), message.getMessageId(), replyKeyboardMarkup, language); } - private static BotApiMethod sendChooseOptionMessage(Integer chatId, Integer messageId, + private static BotApiMethod sendChooseOptionMessage(Long chatId, Integer messageId, ReplyKeyboard replyKeyboard, String language) { SendMessage sendMessage = new SendMessage(); sendMessage.enableMarkdown(true); @@ -1212,7 +1212,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendMessageRequest; } - private static BotApiMethod onForecastWeatherReceived(Integer chatId, Integer userId, Integer messageId, String text, String language) { + private static BotApiMethod onForecastWeatherReceived(Long chatId, Integer userId, Integer messageId, String text, String language) { String unitsSystem = DatabaseManager.getInstance().getUserWeatherOptions(userId)[1]; String weather = WeatherService.getInstance().fetchWeatherForecast(text, userId, language, unitsSystem); SendMessage sendMessageRequest = new SendMessage(); @@ -1241,7 +1241,7 @@ public class WeatherHandlers implements UpdatesCallback { return sendMessageRequest; } - private static BotApiMethod onCurrentWeatherReceived(Integer chatId, Integer userId, Integer messageId, String text, String language) { + private static BotApiMethod onCurrentWeatherReceived(Long chatId, Integer userId, Integer messageId, String text, String language) { String unitsSystem = DatabaseManager.getInstance().getUserWeatherOptions(userId)[1]; String weather = WeatherService.getInstance().fetchWeatherCurrent(text, userId, language, unitsSystem); SendMessage sendMessageRequest = new SendMessage();