From 50951b3fe2e64969da14934bf2c82dfa7cefe7a4 Mon Sep 17 00:00:00 2001
From: Evan Feenstra <evan@evanfeenstra.com>
Date: Mon, 14 Sep 2020 15:45:38 -0700
Subject: [PATCH] hosted bots

---
 api/bots/index.ts                 |  2 --
 api/bots/mother.ts                |  4 ----
 api/network/intercept.ts          | 33 +++++++++++++++++++++++++----
 dist/api/bots/index.js            |  3 ---
 dist/api/bots/index.js.map        |  2 +-
 dist/api/bots/mother.js           |  4 ----
 dist/api/bots/mother.js.map       |  2 +-
 dist/api/network/intercept.js     | 35 +++++++++++++++++++++++++++----
 dist/api/network/intercept.js.map |  2 +-
 9 files changed, 63 insertions(+), 24 deletions(-)

diff --git a/api/bots/index.ts b/api/bots/index.ts
index 6c6c4a6..d117d7f 100644
--- a/api/bots/index.ts
+++ b/api/bots/index.ts
@@ -2,7 +2,6 @@
 import * as SphinxBot from 'sphinx-bot'
 import * as MotherBot from './mother'
 import * as WelcomeBot from './welcome'
-import * as BitcoinBot from './btc'
 import * as LoopBot from './loop'
 import {Msg} from '../network/interfaces'
 import * as path from 'path'
@@ -20,7 +19,6 @@ async function init(){
 
     builtInBots.forEach(b=>{
         if(b.botPrefix==='/welcome') WelcomeBot.init()
-        if(b.botPrefix==='/btc') BitcoinBot.init()
         if(b.botPrefix==='/loopout') LoopBot.init()
     })
 }
diff --git a/api/bots/mother.ts b/api/bots/mother.ts
index f0c01f0..c56f401 100644
--- a/api/bots/mother.ts
+++ b/api/bots/mother.ts
@@ -3,7 +3,6 @@ import * as Sphinx from 'sphinx-bot'
 import { finalAction } from '../controllers/actions'
 import * as path from 'path'
 import * as WelcomeBot from './welcome'
-import * as BitcoinBot from './btc'
 import * as LoopBot from './loop'
 import { models } from '../models'
 import fetch from 'node-fetch'
@@ -75,9 +74,6 @@ export function init() {
           if(botName==='welcome') {
             WelcomeBot.init()
           }
-          if(botName==='btc') {
-            BitcoinBot.init()
-          }
           if(botName==='loopout') {
             LoopBot.init()
           }
diff --git a/api/network/intercept.ts b/api/network/intercept.ts
index 2a09537..bada0a7 100644
--- a/api/network/intercept.ts
+++ b/api/network/intercept.ts
@@ -2,6 +2,7 @@ import {Msg} from './interfaces'
 import { models } from '../models'
 import {builtinBotEmit} from '../bots'
 import * as path from 'path'
+import fetch from 'node-fetch'
 
 const constants = require(path.join(__dirname,'../../config/constants.json'))
 
@@ -44,13 +45,11 @@ export async function isBotMsg(msg:Msg, sentByMe:boolean): Promise<boolean> {
         try {
           const msgTypes = JSON.parse(botInTribe.msgTypes)
           if(msgTypes.includes(msgType)){
-            builtinBotEmit(msg)
-            didEmit = true
+            didEmit = await emitMessageToBot(msg, botInTribe)
           }
         } catch(e){}
       } else { // no message types defined, do all?
-        builtinBotEmit(msg)
-        didEmit = true
+        didEmit = await emitMessageToBot(msg, botInTribe)
       }
     }
   })
@@ -58,6 +57,32 @@ export async function isBotMsg(msg:Msg, sentByMe:boolean): Promise<boolean> {
   return didEmit
 }
 
+async function emitMessageToBot(msg, botInTribe): Promise<boolean> {
+  console.log("EMIT MSG TO BOT",msg,botInTribe)
+  switch (botInTribe.type) {
+    case constants.bot_types.builtin:
+      builtinBotEmit(msg)
+      return true
+    case constants.bot_types.local:
+      return postToBotServer(msg, botInTribe)
+    default:
+      return false
+  }
+  
+}
+
+async function postToBotServer(msg, botInTribe): Promise<boolean> {
+  if(!botInTribe.webhook || !botInTribe.secret) return false
+  const r = await fetch(botInTribe.webhook, {
+    method:'POST',
+    body:JSON.stringify(msg),
+    headers:{
+      'x-secret': botInTribe.secret
+    }
+  })
+  return r.ok
+}
+
 async function asyncForEach(array, callback) {
 	for (let index = 0; index < array.length; index++) {
 	  await callback(array[index], index, array);
diff --git a/dist/api/bots/index.js b/dist/api/bots/index.js
index c9c75a2..d8ce0d3 100644
--- a/dist/api/bots/index.js
+++ b/dist/api/bots/index.js
@@ -13,7 +13,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
 const SphinxBot = require("sphinx-bot");
 const MotherBot = require("./mother");
 const WelcomeBot = require("./welcome");
-const BitcoinBot = require("./btc");
 const LoopBot = require("./loop");
 const path = require("path");
 const models_1 = require("../models");
@@ -29,8 +28,6 @@ function init() {
         builtInBots.forEach(b => {
             if (b.botPrefix === '/welcome')
                 WelcomeBot.init();
-            if (b.botPrefix === '/btc')
-                BitcoinBot.init();
             if (b.botPrefix === '/loopout')
                 LoopBot.init();
         });
diff --git a/dist/api/bots/index.js.map b/dist/api/bots/index.js.map
index e35a1eb..35bac58 100644
--- a/dist/api/bots/index.js.map
+++ b/dist/api/bots/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../api/bots/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mDAAmD;AACnD,wCAAuC;AACvC,sCAAqC;AACrC,wCAAuC;AACvC,oCAAmC;AACnC,kCAAiC;AAEjC,6BAA4B;AAC5B,sCAAkC;AAElC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC,CAAA;AAE9E,SAAe,IAAI;;QACf,SAAS,CAAC,IAAI,EAAE,CAAA;QAEhB,MAAM,WAAW,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAC,KAAK,EAAC;gBACpD,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO;aACvC,EAAC,CAAC,CAAA;QACH,IAAG,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC;YAAE,OAAM;QAE/C,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA,EAAE;YACnB,IAAG,CAAC,CAAC,SAAS,KAAG,UAAU;gBAAE,UAAU,CAAC,IAAI,EAAE,CAAA;YAC9C,IAAG,CAAC,CAAC,SAAS,KAAG,MAAM;gBAAE,UAAU,CAAC,IAAI,EAAE,CAAA;YAC1C,IAAG,CAAC,CAAC,SAAS,KAAG,UAAU;gBAAE,OAAO,CAAC,IAAI,EAAE,CAAA;QAC/C,CAAC,CAAC,CAAA;IACN,CAAC;CAAA;AA0BO,oBAAI;AAxBZ,SAAS,cAAc,CAAC,GAAO;IAC3B,MAAM,CAAC,GAAsB;QACzB,OAAO,EAAC;YACJ,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;YACjB,IAAI,EAAC,cAAW,CAAC;SACpB;QACD,KAAK,EAAC,cAAW,CAAC;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO;QAC5B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE;YACJ,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO;YACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;YAC1B,KAAK,EAAC,EAAE;SACX;KACJ,CAAA;IACD,IAAG,GAAG,CAAC,MAAM,CAAC,IAAI,KAAG,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE;QAC7C,IAAG,CAAC,CAAC,MAAM;YAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAC,CAAC;oBACzB,IAAI,EAAC,OAAO;iBACf,CAAC,CAAA;KACL;IACD,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AACjC,CAAC;AAEY,wCAAc"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../api/bots/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,mDAAmD;AACnD,wCAAuC;AACvC,sCAAqC;AACrC,wCAAuC;AACvC,kCAAiC;AAEjC,6BAA4B;AAC5B,sCAAkC;AAElC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC,CAAA;AAE9E,SAAe,IAAI;;QACf,SAAS,CAAC,IAAI,EAAE,CAAA;QAEhB,MAAM,WAAW,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAC,KAAK,EAAC;gBACpD,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO;aACvC,EAAC,CAAC,CAAA;QACH,IAAG,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC;YAAE,OAAM;QAE/C,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA,EAAE;YACnB,IAAG,CAAC,CAAC,SAAS,KAAG,UAAU;gBAAE,UAAU,CAAC,IAAI,EAAE,CAAA;YAC9C,IAAG,CAAC,CAAC,SAAS,KAAG,UAAU;gBAAE,OAAO,CAAC,IAAI,EAAE,CAAA;QAC/C,CAAC,CAAC,CAAA;IACN,CAAC;CAAA;AA0BO,oBAAI;AAxBZ,SAAS,cAAc,CAAC,GAAO;IAC3B,MAAM,CAAC,GAAsB;QACzB,OAAO,EAAC;YACJ,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;YACjB,IAAI,EAAC,cAAW,CAAC;SACpB;QACD,KAAK,EAAC,cAAW,CAAC;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO;QAC5B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE;YACJ,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO;YACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;YAC1B,KAAK,EAAC,EAAE;SACX;KACJ,CAAA;IACD,IAAG,GAAG,CAAC,MAAM,CAAC,IAAI,KAAG,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE;QAC7C,IAAG,CAAC,CAAC,MAAM;YAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAC,CAAC;oBACzB,IAAI,EAAC,OAAO;iBACf,CAAC,CAAA;KACL;IACD,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AACjC,CAAC;AAEY,wCAAc"}
\ No newline at end of file
diff --git a/dist/api/bots/mother.js b/dist/api/bots/mother.js
index 2ee44f0..874510b 100644
--- a/dist/api/bots/mother.js
+++ b/dist/api/bots/mother.js
@@ -14,7 +14,6 @@ const Sphinx = require("sphinx-bot");
 const actions_1 = require("../controllers/actions");
 const path = require("path");
 const WelcomeBot = require("./welcome");
-const BitcoinBot = require("./btc");
 const LoopBot = require("./loop");
 const models_1 = require("../models");
 const node_fetch_1 = require("node-fetch");
@@ -81,9 +80,6 @@ function init() {
                     if (botName === 'welcome') {
                         WelcomeBot.init();
                     }
-                    if (botName === 'btc') {
-                        BitcoinBot.init();
-                    }
                     if (botName === 'loopout') {
                         LoopBot.init();
                     }
diff --git a/dist/api/bots/mother.js.map b/dist/api/bots/mother.js.map
index c773a14..32f2a9a 100644
--- a/dist/api/bots/mother.js.map
+++ b/dist/api/bots/mother.js.map
@@ -1 +1 @@
-{"version":3,"file":"mother.js","sourceRoot":"","sources":["../../../api/bots/mother.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"mother.js","sourceRoot":"","sources":["../../../api/bots/mother.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/api/network/intercept.js b/dist/api/network/intercept.js
index f45a3a5..481d3cf 100644
--- a/dist/api/network/intercept.js
+++ b/dist/api/network/intercept.js
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
 const models_1 = require("../models");
 const bots_1 = require("../bots");
 const path = require("path");
+const node_fetch_1 = require("node-fetch");
 const constants = require(path.join(__dirname, '../../config/constants.json'));
 /*
 default show or not
@@ -49,15 +50,13 @@ function isBotMsg(msg, sentByMe) {
                     try {
                         const msgTypes = JSON.parse(botInTribe.msgTypes);
                         if (msgTypes.includes(msgType)) {
-                            bots_1.builtinBotEmit(msg);
-                            didEmit = true;
+                            didEmit = yield emitMessageToBot(msg, botInTribe);
                         }
                     }
                     catch (e) { }
                 }
                 else { // no message types defined, do all?
-                    bots_1.builtinBotEmit(msg);
-                    didEmit = true;
+                    didEmit = yield emitMessageToBot(msg, botInTribe);
                 }
             }
         }));
@@ -65,6 +64,34 @@ function isBotMsg(msg, sentByMe) {
     });
 }
 exports.isBotMsg = isBotMsg;
+function emitMessageToBot(msg, botInTribe) {
+    return __awaiter(this, void 0, void 0, function* () {
+        console.log("EMIT MSG TO BOT", msg, botInTribe);
+        switch (botInTribe.type) {
+            case constants.bot_types.builtin:
+                bots_1.builtinBotEmit(msg);
+                return true;
+            case constants.bot_types.local:
+                return postToBotServer(msg, botInTribe);
+            default:
+                return false;
+        }
+    });
+}
+function postToBotServer(msg, botInTribe) {
+    return __awaiter(this, void 0, void 0, function* () {
+        if (!botInTribe.webhook || !botInTribe.secret)
+            return false;
+        const r = yield node_fetch_1.default(botInTribe.webhook, {
+            method: 'POST',
+            body: JSON.stringify(msg),
+            headers: {
+                'x-secret': botInTribe.secret
+            }
+        });
+        return r.ok;
+    });
+}
 function asyncForEach(array, callback) {
     return __awaiter(this, void 0, void 0, function* () {
         for (let index = 0; index < array.length; index++) {
diff --git a/dist/api/network/intercept.js.map b/dist/api/network/intercept.js.map
index a6d8451..46cd2ee 100644
--- a/dist/api/network/intercept.js.map
+++ b/dist/api/network/intercept.js.map
@@ -1 +1 @@
-{"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../api/network/intercept.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,sCAAkC;AAClC,kCAAsC;AACtC,6BAA4B;AAE5B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAC,6BAA6B,CAAC,CAAC,CAAA;AAE7E;;;EAGE;AAEF,kDAAkD;AAClD,SAAsB,QAAQ,CAAC,GAAO,EAAE,QAAgB;;QACtD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAA;QAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAA;QACxB,IAAG,OAAO,KAAG,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE;YAC5C,OAAO,KAAK,CAAA,CAAC,sCAAsC;SACpD;QACD,MAAM,IAAI,GAAG,MAAM,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAC,KAAK,EAAC;gBAC5C,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;aACpB,EAAC,CAAC,CAAA;QACH,IAAG,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QAEtB,IAAI,OAAO,GAAG,KAAK,CAAA;QAEnB,IAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC1B,qBAAc,CAAC,GAAG,CAAC,CAAA;YACnB,OAAO,GAAG,IAAI,CAAA;SACf;QAED,OAAO,CAAC,GAAG,CAAC,UAAU,EAAC,OAAO,CAAC,CAAA;QAC/B,IAAG,OAAO;YAAE,OAAO,OAAO,CAAA;QAE1B,MAAM,WAAW,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAC,KAAK,EAAC;gBACtD,MAAM,EAAE,IAAI,CAAC,EAAE;aAChB,EAAC,CAAC,CAAA;QAEH,IAAG,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAA;QAErD,MAAM,YAAY,CAAC,WAAW,EAAE,CAAM,UAAU,EAAA,EAAE;YAChD,IAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,SAAS,GAAG,CAAC,EAAE;gBACpD,IAAG,UAAU,CAAC,QAAQ,EAAC;oBACrB,IAAI;wBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;wBAChD,IAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAC;4BAC5B,qBAAc,CAAC,GAAG,CAAC,CAAA;4BACnB,OAAO,GAAG,IAAI,CAAA;yBACf;qBACF;oBAAC,OAAM,CAAC,EAAC,GAAE;iBACb;qBAAM,EAAE,oCAAoC;oBAC3C,qBAAc,CAAC,GAAG,CAAC,CAAA;oBACnB,OAAO,GAAG,IAAI,CAAA;iBACf;aACF;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,OAAO,OAAO,CAAA;IAChB,CAAC;CAAA;AA7CD,4BA6CC;AAED,SAAe,YAAY,CAAC,KAAK,EAAE,QAAQ;;QAC1C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjD,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC5C;IACF,CAAC;CAAA"}
\ No newline at end of file
+{"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../api/network/intercept.ts"],"names":[],"mappings":"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"}
\ No newline at end of file