|
|
|
|
package org.telegram.updateshandlers;
|
|
|
|
|
|
|
|
|
|
import org.telegram.*;
|
|
|
|
|
import org.telegram.api.ForceReply;
|
|
|
|
|
import org.telegram.api.Message;
|
|
|
|
|
import org.telegram.api.ReplyKeyboardHide;
|
|
|
|
|
import org.telegram.api.Update;
|
|
|
|
|
import org.telegram.database.DatabaseManager;
|
|
|
|
|
import org.telegram.methods.SendMessage;
|
|
|
|
|
import org.telegram.services.DirectionsService;
|
|
|
|
|
import org.telegram.updatesreceivers.UpdatesThread;
|
|
|
|
|
import org.telegram.updatesreceivers.Webhook;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author Ruben Bermudez
|
|
|
|
|
* @version 1.0
|
|
|
|
|
* @brief Handler for updates to Directions Bot
|
|
|
|
|
* @date 24 of June of 2015
|
|
|
|
|
*/
|
|
|
|
|
public class DirectionsHandlers implements UpdatesCallback {
|
|
|
|
|
private static final String TOKEN = BotConfig.TOKENDIRECTIONS;
|
|
|
|
|
private static final String webhookPath = "directionsBot";
|
|
|
|
|
private final Webhook webhook;
|
|
|
|
|
private final UpdatesThread updatesThread;
|
|
|
|
|
private static final int WATING_ORIGIN_STATUS = 0;
|
|
|
|
|
private static final int WATING_DESTINY_STATUS = 1;
|
|
|
|
|
|
|
|
|
|
public DirectionsHandlers() {
|
|
|
|
|
if (BuildVars.useWebHook) {
|
|
|
|
|
webhook = new Webhook(this, webhookPath);
|
|
|
|
|
updatesThread = null;
|
|
|
|
|
SenderHelper.SendWebhook(webhook.getURL(), TOKEN);
|
|
|
|
|
} else {
|
|
|
|
|
webhook = null;
|
|
|
|
|
SenderHelper.SendWebhook("", TOKEN);
|
|
|
|
|
updatesThread = new UpdatesThread(TOKEN, this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void onUpdateReceived(Update update) {
|
|
|
|
|
handleDirections(update);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void handleDirections(Update update) {
|
|
|
|
|
Message message = update.getMessage();
|
|
|
|
|
if (message != null && message.hasText()) {
|
|
|
|
|
if (message.getText().startsWith(Commands.startDirectionCommand)) {
|
|
|
|
|
SendMessage sendMessageRequest = new SendMessage();
|
|
|
|
|
sendMessageRequest.setChatId(message.getChatId());
|
|
|
|
|
sendMessageRequest.setReplayToMessageId(message.getMessageId());
|
|
|
|
|
ForceReply forceReply = new ForceReply();
|
|
|
|
|
forceReply.setSelective(true);
|
|
|
|
|
sendMessageRequest.setReplayMarkup(forceReply);
|
|
|
|
|
sendMessageRequest.setText(CustomMessages.initDirections);
|
|
|
|
|
Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN);
|
|
|
|
|
if (sentMessage != null) {
|
|
|
|
|
DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_ORIGIN_STATUS,
|
|
|
|
|
sentMessage.getMessageId(),null);
|
|
|
|
|
}
|
|
|
|
|
} else if ((message.getText().startsWith(Commands.help) ||
|
|
|
|
|
(message.getText().startsWith(Commands.startCommand) || !message.isGroupMessage())) &&
|
|
|
|
|
DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == -1) {
|
|
|
|
|
SendMessage sendMessageRequest = new SendMessage();
|
|
|
|
|
sendMessageRequest.setText(CustomMessages.helpDirections);
|
|
|
|
|
sendMessageRequest.setChatId(message.getChatId());
|
|
|
|
|
SenderHelper.SendMessage(sendMessageRequest, TOKEN);
|
|
|
|
|
} else if (!message.getText().startsWith("/")){
|
|
|
|
|
if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == WATING_ORIGIN_STATUS &&
|
|
|
|
|
message.hasReplayMessage() &&
|
|
|
|
|
DatabaseManager.getInstance().getUserDestinationMessageId(message.getFrom().getId()) == message.getReplyToMessage().getMessageId()) {
|
|
|
|
|
SendMessage sendMessageRequest = new SendMessage();
|
|
|
|
|
sendMessageRequest.setChatId(message.getChatId());
|
|
|
|
|
sendMessageRequest.setReplayToMessageId(message.getMessageId());
|
|
|
|
|
ForceReply forceReply = new ForceReply();
|
|
|
|
|
forceReply.setSelective(true);
|
|
|
|
|
sendMessageRequest.setReplayMarkup(forceReply);
|
|
|
|
|
sendMessageRequest.setText(CustomMessages.sendDestination);
|
|
|
|
|
Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN);
|
|
|
|
|
if (sentMessage != null) {
|
|
|
|
|
DatabaseManager.getInstance().addUserForDirection(message.getFrom().getId(), WATING_DESTINY_STATUS,
|
|
|
|
|
sentMessage.getMessageId(), message.getText());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == WATING_DESTINY_STATUS &&
|
|
|
|
|
message.hasReplayMessage() &&
|
|
|
|
|
DatabaseManager.getInstance().getUserDestinationMessageId(message.getFrom().getId()) == message.getReplyToMessage().getMessageId()) {
|
|
|
|
|
String origin = DatabaseManager.getInstance().getUserOrigin(message.getFrom().getId());
|
|
|
|
|
String destiny = message.getText();
|
|
|
|
|
String directions = DirectionsService.getInstance().getDirections(origin, destiny);
|
|
|
|
|
SendMessage sendMessageRequest = new SendMessage();
|
|
|
|
|
sendMessageRequest.setChatId(message.getChatId());
|
|
|
|
|
ReplyKeyboardHide replyKeyboardHide = new ReplyKeyboardHide();
|
|
|
|
|
replyKeyboardHide.setSelective(true);
|
|
|
|
|
sendMessageRequest.setReplayMarkup(replyKeyboardHide);
|
|
|
|
|
sendMessageRequest.setReplayToMessageId(message.getMessageId());
|
|
|
|
|
sendMessageRequest.setText(directions);
|
|
|
|
|
Message sentMessage = SenderHelper.SendMessage(sendMessageRequest, TOKEN);
|
|
|
|
|
if (sentMessage != null) {
|
|
|
|
|
DatabaseManager.getInstance().deleteUserForDirections(message.getFrom().getId());
|
|
|
|
|
}
|
|
|
|
|
} else if (!message.hasReplayMessage()) {
|
|
|
|
|
if (DatabaseManager.getInstance().getUserDestinationStatus(message.getFrom().getId()) == -1) {
|
|
|
|
|
SendMessage sendMessageRequest = new SendMessage();
|
|
|
|
|
sendMessageRequest.setText(CustomMessages.helpDirections);
|
|
|
|
|
sendMessageRequest.setChatId(message.getChatId());
|
|
|
|
|
SenderHelper.SendMessage(sendMessageRequest, TOKEN);
|
|
|
|
|
} else {
|
|
|
|
|
SendMessage sendMessageRequest = new SendMessage();
|
|
|
|
|
sendMessageRequest.setText(CustomMessages.youNeedReplyDirections);
|
|
|
|
|
sendMessageRequest.setChatId(message.getChatId());
|
|
|
|
|
SenderHelper.SendMessage(sendMessageRequest, TOKEN);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|