package won.bot.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.telegram.telegrambots.ApiContextInitializer;
import org.telegram.telegrambots.TelegramBotsApi;
import org.telegram.telegrambots.exceptions.TelegramApiRequestException;
import won.bot.framework.bot.base.EventBot;
import won.bot.framework.eventbot.EventListenerContext;
import won.bot.framework.eventbot.action.impl.mail.send.Connect2MailParserAction;
import won.bot.framework.eventbot.action.impl.mail.send.Hint2MailParserAction;
import won.bot.framework.eventbot.action.impl.mail.send.Message2MailAction;
import won.bot.framework.eventbot.action.impl.telegram.WonTelegramBotHandler;
import won.bot.framework.eventbot.action.impl.telegram.receive.TelegramMessageReceivedAction;
import won.bot.framework.eventbot.action.impl.telegram.send.*;
import won.bot.framework.eventbot.action.impl.telegram.util.TelegramContentExtractor;
import won.bot.framework.eventbot.action.impl.telegram.util.TelegramMessageGenerator;
import won.bot.framework.eventbot.action.impl.wonmessage.CloseConnectionUriAction;
import won.bot.framework.eventbot.action.impl.wonmessage.OpenConnectionUriAction;
import won.bot.framework.eventbot.action.impl.wonmessage.SendMessageOnConnectionAction;
import won.bot.framework.eventbot.bus.EventBus;
import won.bot.framework.eventbot.event.impl.command.SendTextMessageOnConnectionEvent;
import won.bot.framework.eventbot.event.impl.mail.CloseConnectionEvent;
import won.bot.framework.eventbot.event.impl.mail.OpenConnectionEvent;
import won.bot.framework.eventbot.event.impl.telegram.SendHelpEvent;
import won.bot.framework.eventbot.event.impl.telegram.TelegramCreateNeedEvent;
import won.bot.framework.eventbot.event.impl.telegram.TelegramMessageReceivedEvent;
import won.bot.framework.eventbot.event.impl.wonmessage.ConnectFromOtherNeedEvent;
import won.bot.framework.eventbot.event.impl.wonmessage.HintFromMatcherEvent;
import won.bot.framework.eventbot.event.impl.wonmessage.MessageFromOtherNeedEvent;
import won.bot.framework.eventbot.listener.impl.ActionOnEventListener;
/**
* This Bot checks the Telegram-Messages sent to a given telegram-bot and creates Needs that represent the sent messages
* Created by fsuda on 14.12.2016.
*/
public class Telegram2WonBot extends EventBot {
private String botName;
private String token;
private EventBus bus;
private WonTelegramBotHandler wonTelegramBotHandler;
@Autowired
private TelegramContentExtractor telegramContentExtractor;
@Autowired
private TelegramMessageGenerator telegramMessageGenerator;
@Override
protected void initializeEventListeners() {
EventListenerContext ctx = getEventListenerContext();
telegramMessageGenerator.setEventListenerContext(ctx);
bus = getEventBus();
//Initiate Telegram Bot Handler
ApiContextInitializer.init();
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try {
wonTelegramBotHandler = new WonTelegramBotHandler(bus, telegramMessageGenerator, botName, token);
logger.debug("botName: "+wonTelegramBotHandler.getBotUsername());
logger.debug("botTokn: "+wonTelegramBotHandler.getBotToken());
telegramBotsApi.registerBot(wonTelegramBotHandler);
//Telegram initiated Events
bus.subscribe(TelegramMessageReceivedEvent.class,
new ActionOnEventListener(
ctx,
"TelegramMessageReceived",
new TelegramMessageReceivedAction(ctx, wonTelegramBotHandler, telegramContentExtractor)
));
bus.subscribe(SendHelpEvent.class,
new ActionOnEventListener(
ctx,
"TelegramHelpAction",
new TelegramHelpAction(ctx, wonTelegramBotHandler)
));
bus.subscribe(TelegramCreateNeedEvent.class,
new ActionOnEventListener(
ctx,
"TelegramCreateAction",
new TelegramCreateAction(ctx, wonTelegramBotHandler, telegramContentExtractor)
));
bus.subscribe(CloseConnectionEvent.class,
new ActionOnEventListener(
ctx,
"CloseCommandEvent",
new CloseConnectionUriAction(ctx)
));
bus.subscribe(OpenConnectionEvent.class,
new ActionOnEventListener(
ctx,
"OpenCommandEvent",
new OpenConnectionUriAction(ctx)
));
bus.subscribe(SendTextMessageOnConnectionEvent.class,
new ActionOnEventListener(
ctx,
"SendTextMessage",
new SendMessageOnConnectionAction(ctx)
));
//WON initiated Events
bus.subscribe(HintFromMatcherEvent.class,
new ActionOnEventListener(
ctx,
"HintReceived",
new Hint2TelegramAction(ctx, wonTelegramBotHandler)
));
bus.subscribe(ConnectFromOtherNeedEvent.class,
new ActionOnEventListener(
ctx,
"ConnectReceived",
new Connect2TelegramAction(ctx, wonTelegramBotHandler)
));
bus.subscribe(MessageFromOtherNeedEvent.class,
new ActionOnEventListener(
ctx,
"ReceivedTextMessage",
new Message2TelegramAction(ctx, wonTelegramBotHandler)
));
} catch (TelegramApiRequestException e) {
logger.error(e.getMessage());
}
}
public void setBotName(final String botName) {
this.botName = botName;
}
public void setToken(final String token) {
this.token = token;
}
public void setTelegramContentExtractor(TelegramContentExtractor telegramContentExtractor) {
this.telegramContentExtractor = telegramContentExtractor;
}
public void setTelegramMessageGenerator(TelegramMessageGenerator telegramMessageGenerator) {
this.telegramMessageGenerator = telegramMessageGenerator;
}
}