Browse Source

amount in sphinx-bot msg interface, validate keysend for loopbot

push-params
Evan Feenstra 4 years ago
parent
commit
e88fda5b82
  1. 25
      api/builtin/loop.ts
  2. 80
      api/builtin/mother.ts
  3. 46
      api/builtin/welcome.ts
  4. 68
      api/network/intercept.ts
  5. 7
      dist/api/builtin/loop.js
  6. 2
      dist/api/builtin/loop.js.map
  7. 18
      dist/api/network/intercept.js
  8. 2
      dist/api/network/intercept.js.map

25
api/builtin/loop.ts

@ -40,18 +40,25 @@ export function init() {
message.channel.send({ embed })
return
}
if (message.amount!==parseInt(amt)){
const embed = new Sphinx.MessageEmbed()
.setAuthor('LoopBot')
.setDescription('Incorrect amount')
message.channel.send({ embed })
return
}
try {
const j = await doRequest(baseurl + '/v1/loop/out/quote/'+amt)
const j = await doRequest(baseurl + '/v1/loop/out/quote/' + amt)
console.log("=> LOOP QUOTE RES", j)
if(!(j&&j.swap_fee&&j.prepay_amt)){
if (!(j && j.swap_fee && j.prepay_amt)) {
return
}
const j2 = await doRequest(baseurl + '/v1/loop/out', {
method:'POST',
method: 'POST',
body: JSON.stringify({
amt: amt,
dest: addy,
outgoing_chan_set:[
outgoing_chan_set: [
'704899103684034561'
],
max_swap_fee: j.swap_fee,
@ -59,14 +66,14 @@ export function init() {
}),
})
console.log("=> LOOP RESPONSE", j2)
if(j2&&j2.error) {
if (j2 && j2.error) {
const embed = new Sphinx.MessageEmbed()
.setAuthor('LoopBot')
.setDescription('Error: '+j2.error)
.setDescription('Error: ' + j2.error)
message.channel.send({ embed })
return
}
if(!(j2&&j2.server_message)) {
if (!(j2 && j2.server_message)) {
return
}
const embed = new Sphinx.MessageEmbed()
@ -121,9 +128,9 @@ const agent = new https.Agent({
})
const env = process.env.NODE_ENV || 'development';
const config = require(path.join(__dirname,'../../config/app.json'))[env]
const config = require(path.join(__dirname, '../../config/app.json'))[env]
async function doRequest(theurl:string, params?:Object) {
async function doRequest(theurl: string, params?: Object) {
const ps = params || {}
try {
var macaroonString = fs.readFileSync(config.macaroon_location);

80
api/builtin/mother.ts

@ -18,15 +18,15 @@ const builtinBots = [
]
const builtInBotMsgTypes = {
'welcome':[
'welcome': [
constants.message_types.message,
constants.message_types.group_join
],
}
const builtInBotNames = {
welcome:'WelcomeBot',
loopout:'LoopBot',
welcome: 'WelcomeBot',
loopout: 'LoopBot',
}
export function init() {
@ -37,7 +37,7 @@ export function init() {
client.on(msg_types.MESSAGE, async (message: Sphinx.Message) => {
const arr = (message.content && message.content.split(' ')) || []
if (arr.length < 2) return
if (arr[0]!=='/bot') return
if (arr[0] !== '/bot') return
const cmd = arr[1]
switch (cmd) {
@ -45,15 +45,19 @@ export function init() {
if (arr.length < 3) return
const botName = arr[2]
if(builtinBots.includes(botName)) {
if (builtinBots.includes(botName)) {
console.log("INSTALL", botName)
const chat = await models.Chat.findOne({where:{
uuid: message.channel.id
}})
if(!chat) return
const existing = await models.ChatBot.findOne({where:{
chatId: chat.id, botPrefix: '/'+botName,
}})
const chat = await models.Chat.findOne({
where: {
uuid: message.channel.id
}
})
if (!chat) return
const existing = await models.ChatBot.findOne({
where: {
chatId: chat.id, botPrefix: '/' + botName,
}
})
if (existing) {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
@ -64,32 +68,34 @@ export function init() {
constants.message_types.message
]
const chatBot = {
chatId: chat.id,
botPrefix: '/'+botName,
botType:constants.bot_types.builtin,
msgTypes:JSON.stringify(msgTypes),
pricePerUse:0,
chatId: chat.id,
botPrefix: '/' + botName,
botType: constants.bot_types.builtin,
msgTypes: JSON.stringify(msgTypes),
pricePerUse: 0,
}
await models.ChatBot.create(chatBot)
if(botName==='welcome') {
if (botName === 'welcome') {
WelcomeBot.init()
}
if(botName==='loopout') {
if (botName === 'loopout') {
LoopBot.init()
}
const theName = builtInBotNames[botName] || 'Bot'
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription(theName+' has been installed!')
.setDescription(theName + ' has been installed!')
message.channel.send({ embed })
} else {
const bot = await getBotByName(botName)
if(bot && bot.uuid) {
if (bot && bot.uuid) {
console.log('=> FOUND BOT', bot.unique_name)
const chat = await models.Chat.findOne({where:{
uuid: message.channel.id
}})
if(!chat) return
const chat = await models.Chat.findOne({
where: {
uuid: message.channel.id
}
})
if (!chat) return
installBot(chat.dataValues, bot)
} else {
const embed = new Sphinx.MessageEmbed()
@ -104,7 +110,7 @@ export function init() {
if (arr.length < 2) return
const query = arr[2]
const bots = await searchBots(query)
if(bots.length===0) {
if (bots.length === 0) {
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setDescription('No bots found')
@ -113,17 +119,17 @@ export function init() {
const embed3 = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
.setTitle('Bots:')
.addFields(bots.map(b=> {
.addFields(bots.map(b => {
const maxLength = 35
const value = b.description.length>maxLength ?
b.description.substr(0,maxLength)+'...' :
const value = b.description.length > maxLength ?
b.description.substr(0, maxLength) + '...' :
b.description
return ({name:b.unique_name, value})
return ({ name: b.unique_name, value })
}))
.setThumbnail(botSVG)
message.channel.send({ embed:embed3 })
message.channel.send({ embed: embed3 })
return true
default:
const embed = new Sphinx.MessageEmbed()
.setAuthor('MotherBot')
@ -143,24 +149,24 @@ const botSVG = `<svg viewBox="64 64 896 896" height="16" width="16" fill="white"
<path d="M300 328a60 60 0 10120 0 60 60 0 10-120 0zM852 64H172c-17.7 0-32 14.3-32 32v660c0 17.7 14.3 32 32 32h680c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-32 660H204V128h616v596zM604 328a60 60 0 10120 0 60 60 0 10-120 0zm250.2 556H169.8c-16.5 0-29.8 14.3-29.8 32v36c0 4.4 3.3 8 7.4 8h729.1c4.1 0 7.4-3.6 7.4-8v-36c.1-17.7-13.2-32-29.7-32zM664 508H360c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h304c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z" />
</svg>`
async function searchBots(q:string) {
async function searchBots(q: string) {
try {
const r = await fetch(`https://${config.tribes_host}/search/bots/${q}`)
const j = await r.json()
return Array.isArray(j) ? j : []
} catch(e) {
} catch (e) {
return []
}
}
async function getBotByName(name:string) {
async function getBotByName(name: string) {
try {
const r = await fetch(`https://${config.tribes_host}/bot/${name}`)
const j = await r.json()
if(j&&j.uuid&&j.owner_pubkey) {
if (j && j.uuid && j.owner_pubkey) {
return j
}
return null
} catch(e) {
} catch (e) {
return null
}
}

46
api/builtin/welcome.ts

@ -9,7 +9,7 @@ const constants = require(path.join(__dirname, '../../config/constants.json'))
let initted = false
export function init() {
if(initted) return
if (initted) return
initted = true
const client = new Sphinx.Client()
@ -17,26 +17,28 @@ export function init() {
client.on(msg_types.MESSAGE, async (message: Sphinx.Message) => {
const arr = (message.content && message.content.split(' ')) || []
console.log('message.type',message.type)
const isGroupJoin = message.type===constants.message_types.group_join
console.log('message.type', message.type)
const isGroupJoin = message.type === constants.message_types.group_join
if (arr.length < 2 && !isGroupJoin) return
if (arr[0]!=='/welcome' && !isGroupJoin) return
if (arr[0] !== '/welcome' && !isGroupJoin) return
const cmd = arr[1]
if(isGroupJoin) {
const chat = await models.Chat.findOne({where:{uuid:message.channel.id}})
if(!chat) return
const chatBot = await models.ChatBot.findOne({where:{
chatId: chat.id, botPrefix:'/welcome', botType:constants.bot_types.builtin
}})
if (isGroupJoin) {
const chat = await models.Chat.findOne({ where: { uuid: message.channel.id } })
if (!chat) return
const chatBot = await models.ChatBot.findOne({
where: {
chatId: chat.id, botPrefix: '/welcome', botType: constants.bot_types.builtin
}
})
let meta = 'Welcome to the tribe!'
if(chatBot && chatBot.meta) {
if (chatBot && chatBot.meta) {
meta = chatBot.meta
}
const resEmbed = new Sphinx.MessageEmbed()
.setAuthor('WelcomeBot')
.setDescription(meta)
message.channel.send({ embed:resEmbed })
message.channel.send({ embed: resEmbed })
return
}
@ -45,20 +47,22 @@ export function init() {
case 'setmessage':
if (arr.length < 3) return
console.log("setmsg", arr[2])
const chat = await models.Chat.findOne({where:{uuid:message.channel.id}})
if(!chat) return
const chatBot = await models.ChatBot.findOne({where:{
chatId: chat.id, botPrefix:'/welcome', botType:constants.bot_types.builtin
}})
if(!chatBot) return
const chat = await models.Chat.findOne({ where: { uuid: message.channel.id } })
if (!chat) return
const chatBot = await models.ChatBot.findOne({
where: {
chatId: chat.id, botPrefix: '/welcome', botType: constants.bot_types.builtin
}
})
if (!chatBot) return
const meta = arr.slice(2, arr.length).join(' ');
await chatBot.update({meta})
await chatBot.update({ meta })
const resEmbed = new Sphinx.MessageEmbed()
.setAuthor('WelcomeBot')
.setDescription('Your welcome message has been updated')
message.channel.send({ embed:resEmbed })
message.channel.send({ embed: resEmbed })
return
default:
const embed = new Sphinx.MessageEmbed()
.setAuthor('WelcomeBot')

68
api/network/intercept.ts

@ -1,11 +1,11 @@
import {Msg} from './interfaces'
import { Msg } from './interfaces'
import { models } from '../models'
import {builtinBotEmit} from '../builtin'
import {keysendBotCmd, postToBotServer} from '../controllers/bots'
import { builtinBotEmit } from '../builtin'
import { keysendBotCmd, postToBotServer } from '../controllers/bots'
import * as path from 'path'
import * as SphinxBot from 'sphinx-bot'
const constants = require(path.join(__dirname,'../../config/constants.json'))
const constants = require(path.join(__dirname, '../../config/constants.json'))
/*
default show or not
@ -13,48 +13,52 @@ restrictions (be able to toggle, or dont show chat)
*/
// return bool whether to skip forwarding to tribe
export async function isBotMsg(msg:Msg, sentByMe:boolean): Promise<boolean> {
const txt = msg.message&&msg.message.content
export async function isBotMsg(msg: Msg, sentByMe: boolean): Promise<boolean> {
const txt = msg.message && msg.message.content
const msgType = msg.type
if(msgType===constants.message_types.bot_res) {
if (msgType === constants.message_types.bot_res) {
return false // bot res msg type not for processing
}
const chat = await models.Chat.findOne({where:{
uuid: msg.chat.uuid
}})
if(!chat) return false
const chat = await models.Chat.findOne({
where: {
uuid: msg.chat.uuid
}
})
if (!chat) return false
let didEmit = false
if(txt && txt.startsWith('/bot ')) {
if (txt && txt.startsWith('/bot ')) {
builtinBotEmit(msg)
didEmit = true
}
if(didEmit) return didEmit
if (didEmit) return didEmit
const botsInTribe = await models.ChatBot.findAll({where:{
chatId: chat.id
}})
const botsInTribe = await models.ChatBot.findAll({
where: {
chatId: chat.id
}
})
// console.log('=> botsInTribe', botsInTribe)
if(!(botsInTribe && botsInTribe.length)) return false
if (!(botsInTribe && botsInTribe.length)) return false
await asyncForEach(botsInTribe, async botInTribe=>{
if(botInTribe.msgTypes){
await asyncForEach(botsInTribe, async botInTribe => {
if (botInTribe.msgTypes) {
// console.log('=> botInTribe.msgTypes', botInTribe)
try {
const msgTypes = JSON.parse(botInTribe.msgTypes)
if(msgTypes.includes(msgType)){
const isMsgAndHasText = msgType===constants.message_types.message && txt && txt.startsWith(`${botInTribe.botPrefix} `)
const isNotMsg = msgType!==constants.message_types.message
if(isMsgAndHasText || isNotMsg) {
if (msgTypes.includes(msgType)) {
const isMsgAndHasText = msgType === constants.message_types.message && txt && txt.startsWith(`${botInTribe.botPrefix} `)
const isNotMsg = msgType !== constants.message_types.message
if (isMsgAndHasText || isNotMsg) {
didEmit = await emitMessageToBot(msg, botInTribe.dataValues)
}
}
} catch(e){}
} catch (e) { }
} else { // no message types defined, do all?
if(txt && txt.startsWith(`${botInTribe.botPrefix} `)) {
if (txt && txt.startsWith(`${botInTribe.botPrefix} `)) {
// console.log('=> botInTribe.msgTypes else', botInTribe.dataValues)
didEmit = await emitMessageToBot(msg, botInTribe.dataValues)
}
@ -71,9 +75,11 @@ async function emitMessageToBot(msg, botInTribe): Promise<boolean> {
builtinBotEmit(msg)
return true
case constants.bot_types.local:
const bot = await models.Bot.findOne({where:{
uuid: botInTribe.botUuid
}})
const bot = await models.Bot.findOne({
where: {
uuid: botInTribe.botUuid
}
})
return postToBotServer(msg, bot, SphinxBot.MSG_TYPE.MESSAGE)
case constants.bot_types.remote:
return keysendBotCmd(msg, botInTribe)
@ -83,7 +89,7 @@ async function emitMessageToBot(msg, botInTribe): Promise<boolean> {
}
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}

7
dist/api/builtin/loop.js

@ -47,6 +47,13 @@ function init() {
message.channel.send({ embed });
return;
}
if (message.amount !== parseInt(amt)) {
const embed = new Sphinx.MessageEmbed()
.setAuthor('LoopBot')
.setDescription('Incorrect amount');
message.channel.send({ embed });
return;
}
try {
const j = yield doRequest(baseurl + '/v1/loop/out/quote/' + amt);
console.log("=> LOOP QUOTE RES", j);

2
dist/api/builtin/loop.js.map

@ -1 +1 @@
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../api/builtin/loop.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../api/builtin/loop.ts"],"names":[],"mappings":"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"}

18
dist/api/network/intercept.js

@ -27,9 +27,11 @@ function isBotMsg(msg, sentByMe) {
if (msgType === constants.message_types.bot_res) {
return false; // bot res msg type not for processing
}
const chat = yield models_1.models.Chat.findOne({ where: {
const chat = yield models_1.models.Chat.findOne({
where: {
uuid: msg.chat.uuid
} });
}
});
if (!chat)
return false;
let didEmit = false;
@ -39,9 +41,11 @@ function isBotMsg(msg, sentByMe) {
}
if (didEmit)
return didEmit;
const botsInTribe = yield models_1.models.ChatBot.findAll({ where: {
const botsInTribe = yield models_1.models.ChatBot.findAll({
where: {
chatId: chat.id
} });
}
});
// console.log('=> botsInTribe', botsInTribe)
if (!(botsInTribe && botsInTribe.length))
return false;
@ -79,9 +83,11 @@ function emitMessageToBot(msg, botInTribe) {
builtin_1.builtinBotEmit(msg);
return true;
case constants.bot_types.local:
const bot = yield models_1.models.Bot.findOne({ where: {
const bot = yield models_1.models.Bot.findOne({
where: {
uuid: botInTribe.botUuid
} });
}
});
return bots_1.postToBotServer(msg, bot, SphinxBot.MSG_TYPE.MESSAGE);
case constants.bot_types.remote:
return bots_1.keysendBotCmd(msg, botInTribe);

2
dist/api/network/intercept.js.map

@ -1 +1 @@
{"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../api/network/intercept.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../api/network/intercept.ts"],"names":[],"mappings":"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"}
Loading…
Cancel
Save