import * as path from 'path' import {Msg} from '../network/interfaces' import * as tribes from '../utils/tribes' import * as crypto from 'crypto' import { models } from '../models' import * as jsonUtils from '../utils/json' import { success, failure } from '../utils/res' import {emit as emitBotMsg} from '../bots' const constants = require(path.join(__dirname, '../../config/constants.json')) export const getBots = async (req, res) => { try { const bots = await models.Bot.findAll() success(res, { bots: bots.map(b=> jsonUtils.botToJson(b)) }) } catch(e) { failure(res,'no bots') } } export const createBot = async (req, res) => { const { name, webhook } = req.body const uuid = await tribes.genSignedTimestamp() const newBot = { name, uuid, webhook, id: crypto.randomBytes(12).toString('hex').toUpperCase(), secret: crypto.randomBytes(16).toString('hex').toUpperCase() } try { const theBot = await models.Bot.create(newBot) // post to bots.sphinx.chat success(res, jsonUtils.botToJson(theBot)) } catch (e) { failure(res, 'bot creation failed') } } export const deleteBot = async (req, res) => { const id = req.params.id if (!id) return try { models.Bot.destroy({ where: { id } }) success(res, true) } catch (e) { console.log('ERROR deleteBot', e) failure(res, e) } } // async function broadcastAction(chat,text){ // finalAction({ // action:'broadcast', // text, chatUUID: chat.uuid, // botName:'MotherBot' // }) // } // return bool whether this is legit to process export async function processBotMessage(msg:Msg, chat, botInTribe): Promise { console.log('===> PROCESS BOT MSG') const txt = msg.message.content console.log('===> txt',txt) if(txt.startsWith('/bot ')){ emitBotMsg(txt, chat.uuid) } else { } return true } /* intercept */ export function installBot(botname,botInTribe) { console.log("INSTALL BOT NOW") // search registry for bot (by name) // need bot uuid and maker pubkey // send bot_install to bot maker // generate ChatMember with bot=true // bot_maker_pubkey, bot_uuid, bot_prefix } export async function receiveBotInstall(payload) { console.log('=> receiveBotInstall') // const dat = payload.content || payload // const sender_pub_key = dat.sender.pub_key // const tribe_uuid = dat.chat.uuid // verify tribe ownership (verify signed timestamp) // create BotMember for publishing to mqtt } // type BotCmdType = 'install' | 'message' | 'broadcast' | 'keysend' export async function receiveBotCmd(payload) { console.log(constants.message_types.bot_cmd) } export async function receiveBotRes(payload) { console.log(constants.message_types.bot_res) }