/// namespace EasySlackBot { export class Main { private debug: debug.IDebug = require("debug")("SlackBot.Main"); private Helpers: EasySlackBot.Helpers; private Items: EasySlackBot.Items; private Message: EasySlackBot.Message; private Slack: EasySlackBot.Slack; private bot: ISlackbots; constructor( botItems: any, botOptions: IMainOptions, callBack?: any ) { this.debug("__constructor"); this.Helpers = new EasySlackBot.Helpers(); this.Items = new EasySlackBot.Items(); this.Message = new EasySlackBot.Message(); this.Slack = new EasySlackBot.Slack(botOptions); this.start(botItems, botOptions, !callBack ? () => { // Fake callback } : callBack); } private start( botItems: any, options: EasySlackBot.IMainOptions | EasySlackBot.IMainOnSlackMessageCallBack, callBack?: EasySlackBot.IMainOnSlackMessageCallBack ): void { if ( typeof options === "function" ) { callBack = options; } this.Items.setBotItems(botItems); this.Slack.start(( bot: ISlackbots ) => { this.bot = bot; this.Items.setBot(this.bot); this.onSlackMessage(callBack); }); } /** * Handling Slack messages * * @param callBack */ private onSlackMessage( callBack: EasySlackBot.IMainOnSlackMessageCallBack ): void { this.debug("Connected"); this.bot.on("message", ( slackMessage: ISlackbotsMessage ) => { this.Message.onMessage(slackMessage, ( message: ISlackbotsMessage ) => { if ( message.type === "message" && message.subtype !== "bot_message" ) { this.Items.onMessage(message, ( text: string, params: any, err: any ) => { this.bot.postMessage(message.channel, text, params); }); } }); }); callBack(this.bot); } } } module.exports = EasySlackBot;