Browse Source

1. Improved support for channels

master
Rubenlagu 11 years ago
committed by Rubenlagus
parent
commit
a25493b294
  1. 11
      src/main/java/org/telegram/SenderHelper.java
  2. 15
      src/main/java/org/telegram/api/methods/SendDocument.java
  3. 6
      src/main/java/org/telegram/api/objects/Chat.java
  4. 2
      src/main/java/org/telegram/api/objects/Message.java
  5. 4
      src/main/java/org/telegram/database/CreationStrings.java
  6. 18
      src/main/java/org/telegram/database/DatabaseManager.java
  7. 8
      src/main/java/org/telegram/updateshandlers/FilesHandlers.java
  8. 13
      src/main/java/org/telegram/updateshandlers/TransifexHandlers.java
  9. 30
      src/main/java/org/telegram/updateshandlers/WeatherHandlers.java

11
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<NameValuePair> 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()));

15
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;
}

6
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;
}

2
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();
}

4
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, " +

18
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) {

8
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();

13
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) ||

30
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();

Loading…
Cancel
Save