From de77ee392bddea56ac78c377eb6c213f39b0c629 Mon Sep 17 00:00:00 2001 From: Slobodan Stojanovic Date: Sun, 12 Mar 2017 23:03:46 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=8E=AA=20=20Change=20the=20way=20plat?= =?UTF-8?q?forms=20are=20imported?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/alexa/platform.js | 32 +++++++++++++ lib/bot-builder.js | 98 ++++++++++++++++------------------------ lib/facebook/platform.js | 44 ++++++++++++++++++ lib/groupme/platform.js | 32 +++++++++++++ lib/kik/platform.js | 32 +++++++++++++ lib/line/platform.js | 32 +++++++++++++ lib/skype/platform.js | 38 ++++++++++++++++ lib/slack/platform.js | 40 ++++++++++++++++ lib/telegram/platform.js | 38 ++++++++++++++++ lib/twilio/platform.js | 32 +++++++++++++ lib/viber/platform.js | 37 +++++++++++++++ 11 files changed, 397 insertions(+), 58 deletions(-) create mode 100644 lib/alexa/platform.js create mode 100644 lib/facebook/platform.js create mode 100644 lib/groupme/platform.js create mode 100644 lib/kik/platform.js create mode 100644 lib/line/platform.js create mode 100644 lib/skype/platform.js create mode 100644 lib/slack/platform.js create mode 100644 lib/telegram/platform.js create mode 100644 lib/twilio/platform.js create mode 100644 lib/viber/platform.js diff --git a/lib/alexa/platform.js b/lib/alexa/platform.js new file mode 100644 index 0000000..0b3c7c9 --- /dev/null +++ b/lib/alexa/platform.js @@ -0,0 +1,32 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); +const AlexaTemplate = require('alexa-message-builder'); + +class AlexaPlatform { + constructor(options) { + this.options = options || {}; + this.export = { + AlexaTemplate: AlexaTemplate + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(botResponse, botName) { + const replyFunction = reply.bind(this); + return replyFunction(botResponse, botName).bind(this); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject).bind(this); + } +} + +module.exports = AlexaPlatform; diff --git a/lib/bot-builder.js b/lib/bot-builder.js index 97a44c4..8bb4214 100644 --- a/lib/bot-builder.js +++ b/lib/bot-builder.js @@ -1,28 +1,47 @@ 'use strict'; const ApiBuilder = require('claudia-api-builder'); -const fbSetup = require('./facebook/setup'); -const slackSetup = require('./slack/setup'); -const telegramSetup = require('./telegram/setup'); -const skypeSetup = require('./skype/setup'); -const twilioSetup = require('./twilio/setup'); -const kikSetup = require('./kik/setup'); -const groupmeSetup = require('./groupme/setup'); -const lineSetup = require('./line/setup'); -const viberSetup = require('./viber/setup'); -const alexaSetup = require('./alexa/setup'); -const fbTemplate = require('./facebook/format-message'); -const slackTemplate = require('./slack/format-message'); -const telegramTemplate = require('./telegram/format-message'); -const viberTemplate = require('./viber/format-message'); -const skypeTemplate = require('./skype/format-message'); -const AlexaTemplate = require('alexa-message-builder'); -const slackDelayedReply = require('./slack/delayed-reply'); +const AlexaPlatform = require('./alexa/platform'); +const FacebookPlatform = require('./facebook/platform'); +const GroupmePlatform = require('./groupme/platform'); +const KikPlatform = require('./kik/platform'); +const LinePlatform = require('./line/platform'); +const SkypePlatform = require('./skype/platform'); +const SlackPlatform = require('./slack/platform'); +const TelegramPlatform = require('./telegram/platform'); +const TwilioPlatform = require('./twilio/platform'); +const ViberPlatform = require('./viber/platform'); + +const platforms = { + alexa: new AlexaPlatform(), + facebook: new FacebookPlatform(), + groupme: new GroupmePlatform(), + kik: new KikPlatform(), + line: new LinePlatform(), + skype: new SkypePlatform(), + slackSlashCommand: new SlackPlatform(), + telegram: new TelegramPlatform(), + twilio: new TwilioPlatform(), + viber: new ViberPlatform() +}; let logError = function (err) { console.error(err); }; +function enablePlatforms(platformProviders, api, messageHandlerPromise, logError) { + platformProviders.forEach(platformProvider => { + let platform = platformProvider; + if (typeof platformProvider === 'string') { + platform = platforms[platformProvider]; + } + platform.setup(api, messageHandlerPromise, logError); + Object.keys(platform.export).forEach(exportItem => { + module.exports[exportItem] = platform.export[exportItem]; + }); + }); +} + module.exports = function botBuilder(messageHandler, options, optionalLogError) { logError = optionalLogError || logError; @@ -33,48 +52,11 @@ module.exports = function botBuilder(messageHandler, options, optionalLogError) api.get('/', () => 'Ok'); - let isEnabled = function isEnabled(platform) { - return !options || !options.platforms || options.platforms.indexOf(platform) > -1; - }; - - if (isEnabled('facebook')) { - fbSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('slackSlashCommand')) { - slackSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('telegram')) { - telegramSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('skype')) { - skypeSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('twilio')) { - twilioSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('kik')) { - kikSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('groupme')) { - groupmeSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('line')) { - lineSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('viber')) { - viberSetup(api, messageHandlerPromise, logError); - } - if (isEnabled('alexa')) { - alexaSetup(api, messageHandlerPromise, logError); + if (options && Array.isArray(options.platforms)) { + enablePlatforms(options.platforms, api, messageHandlerPromise, logError); + } else { + enablePlatforms(Object.keys(platforms), api, messageHandlerPromise, logError); } return api; }; - -module.exports.fbTemplate = fbTemplate; -module.exports.slackTemplate = slackTemplate; -module.exports.telegramTemplate = telegramTemplate; -module.exports.viberTemplate = viberTemplate; -module.exports.skypeTemplate = skypeTemplate; -module.exports.AlexaTemplate = AlexaTemplate; -module.exports.slackDelayedReply = slackDelayedReply; diff --git a/lib/facebook/platform.js b/lib/facebook/platform.js new file mode 100644 index 0000000..5e6813b --- /dev/null +++ b/lib/facebook/platform.js @@ -0,0 +1,44 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); +const template = require('./format-message'); + +class FacebookPlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + fbReply: this.reply, + fbTemplate: this.template + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(recipient, message, fbAccessToken) { + const replyFunction = reply.bind(this); + return replyFunction(recipient, message, fbAccessToken); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject); + } + + postDeploy() { + if (typeof this.options.persistentMenu === 'function') { + this.options.persistentMenu(); + } + } + + template() { + return template; + } +} + +module.exports = FacebookPlatform; diff --git a/lib/groupme/platform.js b/lib/groupme/platform.js new file mode 100644 index 0000000..99a916d --- /dev/null +++ b/lib/groupme/platform.js @@ -0,0 +1,32 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); + +class GroupmePlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + groupmeReply: this.reply + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(message, botId) { + const replyFunction = reply.bind(this); + return replyFunction(message, botId); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject); + } +} + +module.exports = GroupmePlatform; diff --git a/lib/kik/platform.js b/lib/kik/platform.js new file mode 100644 index 0000000..7434665 --- /dev/null +++ b/lib/kik/platform.js @@ -0,0 +1,32 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); + +class KikPlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + kikReply: this.reply + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(messageObject, message, username, kikApiKey) { + const replyFunction = reply.bind(this); + return replyFunction(messageObject, message, username, kikApiKey); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject); + } +} + +module.exports = KikPlatform; diff --git a/lib/line/platform.js b/lib/line/platform.js new file mode 100644 index 0000000..439dab2 --- /dev/null +++ b/lib/line/platform.js @@ -0,0 +1,32 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); + +class LinePlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + lineReply: this.reply + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(replyToken, message, lineChannelAccessToken) { + const replyFunction = reply.bind(this); + return replyFunction(replyToken, message, lineChannelAccessToken); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject); + } +} + +module.exports = LinePlatform; diff --git a/lib/skype/platform.js b/lib/skype/platform.js new file mode 100644 index 0000000..cf81ddb --- /dev/null +++ b/lib/skype/platform.js @@ -0,0 +1,38 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); +const template = require('./format-message'); + +class SkypePlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + skypeReply: this.reply, + skypeTemplate: this.template + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(conversationId, message, contextId, authToken) { + const replyFunction = reply.bind(this); + return replyFunction(conversationId, message, contextId, authToken); + } + + parse(messageObject, contextId) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject, contextId); + } + + template() { + return template; + } +} + +module.exports = SkypePlatform; diff --git a/lib/slack/platform.js b/lib/slack/platform.js new file mode 100644 index 0000000..1bd9267 --- /dev/null +++ b/lib/slack/platform.js @@ -0,0 +1,40 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); +const SlackTemplate = require('./format-message'); +const delayedReply = require('./delayed-reply'); + +class SlackPlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + SlackTemplate: SlackTemplate, + delayedReply: this.delayedReply + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(botResponse) { + const replyFunction = reply.bind(this); + return replyFunction(botResponse); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject); + } + + delayedReply(message, response) { + const delayedReplyFunction = delayedReply.bind(this); + return delayedReplyFunction(message, response); + } +} + +module.exports = SlackPlatform; diff --git a/lib/telegram/platform.js b/lib/telegram/platform.js new file mode 100644 index 0000000..1f1841a --- /dev/null +++ b/lib/telegram/platform.js @@ -0,0 +1,38 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); +const template = require('./format-message'); + +class TelegramPlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + telegramReply: this.reply, + telegramTemplate: this.template + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(messageObject, message, tlAccessToken) { + const replyFunction = reply.bind(this); + return replyFunction(messageObject, message, tlAccessToken); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject); + } + + template() { + return template; + } +} + +module.exports = TelegramPlatform; diff --git a/lib/twilio/platform.js b/lib/twilio/platform.js new file mode 100644 index 0000000..5ad3862 --- /dev/null +++ b/lib/twilio/platform.js @@ -0,0 +1,32 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); + +class TwilioPlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + twilioReply: this.reply + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(twilioAccountSid, twilioAuthToken, twilioSendingNumber, toNumber, message) { + const replyFunction = reply.bind(this); + return replyFunction(twilioAccountSid, twilioAuthToken, twilioSendingNumber, toNumber, message); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject); + } +} + +module.exports = TwilioPlatform; diff --git a/lib/viber/platform.js b/lib/viber/platform.js new file mode 100644 index 0000000..cb0c23a --- /dev/null +++ b/lib/viber/platform.js @@ -0,0 +1,37 @@ +'use strict'; + +const setup = require('./setup'); +const reply = require('./reply'); +const parse = require('./parse'); +const template = require('./format-message'); + +class ViberPlatform { + constructor(options) { + this.options = options || {}; + + this.export = { + viberReply: this.reply, + viberTemplate: this.template + }; + } + + setup(api, bot, logError, optionalParser, optionalResponder) { + const setupFunction = setup.bind(this); + return setupFunction(api, bot, logError, optionalParser, optionalResponder); + } + + reply(receiver, authToken, messageObj) { + return reply(receiver, authToken, messageObj); + } + + parse(messageObject) { + const parseFunction = parse.bind(this); + return parseFunction(messageObject); + } + + template() { + return template; + } +} + +module.exports = ViberPlatform; From 102859069281e9a0c30564073380cca64990e73d Mon Sep 17 00:00:00 2001 From: Slobodan Stojanovic Date: Sun, 12 Mar 2017 23:47:45 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=9A=9B=20=20Export=20platform=20class?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/bot-builder.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/bot-builder.js b/lib/bot-builder.js index 8bb4214..4adf1fc 100644 --- a/lib/bot-builder.js +++ b/lib/bot-builder.js @@ -60,3 +60,14 @@ module.exports = function botBuilder(messageHandler, options, optionalLogError) return api; }; + +module.exports.AlexaPlatform = AlexaPlatform; +module.exports.FacebookPlatform = FacebookPlatform; +module.exports.GroupmePlatform = GroupmePlatform; +module.exports.KikPlatform = KikPlatform; +module.exports.LinePlatform = LinePlatform; +module.exports.SkypePlatform = SkypePlatform; +module.exports.SlackPlatform = SlackPlatform; +module.exports.TelegramPlatform = TelegramPlatform; +module.exports.TwilioPlatform = TwilioPlatform; +module.exports.ViberPlatform = ViberPlatform;