fix(core.gbapp): New keywords and Loops.
This commit is contained in:
parent
f66a03f50a
commit
869351113e
5 changed files with 158 additions and 17 deletions
|
@ -43,6 +43,7 @@ import { GBDeployer } from './GBDeployer';
|
||||||
const MicrosoftGraph = require('@microsoft/microsoft-graph-client');
|
const MicrosoftGraph = require('@microsoft/microsoft-graph-client');
|
||||||
import { Messages } from '../strings';
|
import { Messages } from '../strings';
|
||||||
import { GBServer } from '../../../src/app';
|
import { GBServer } from '../../../src/app';
|
||||||
|
import { CollectionUtil } from 'pragmatismo-io-framework';
|
||||||
const request = require('request-promise-native');
|
const request = require('request-promise-native');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -91,11 +92,18 @@ class SysClass {
|
||||||
|
|
||||||
public async wait(seconds: number) {
|
public async wait(seconds: number) {
|
||||||
// tslint:disable-next-line no-string-based-set-timeout
|
// tslint:disable-next-line no-string-based-set-timeout
|
||||||
|
GBLog.info(`BASIC: Talking to a specific user (TALK TO).`);
|
||||||
const timeout = async (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
|
const timeout = async (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
|
||||||
await timeout(seconds * 1000);
|
await timeout(seconds * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async talkTo(mobile: any, message: string) {
|
||||||
|
GBLog.info(`BASIC: Talking '${message}' to a specific user (${mobile}) (TALK TO). `);
|
||||||
|
await this.min.conversationalService.sendMarkdownToMobile(this.min, null, mobile, message);
|
||||||
|
}
|
||||||
|
|
||||||
public async set(file: string, address: string, value: any): Promise<any> {
|
public async set(file: string, address: string, value: any): Promise<any> {
|
||||||
|
GBLog.info(`BASIC: Defining '${address}' in '${file}' to '${value}' (SET). `);
|
||||||
try {
|
try {
|
||||||
let token = await this.min.adminService.acquireElevatedToken(this.min.instance.instanceId);
|
let token = await this.min.adminService.acquireElevatedToken(this.min.instance.instanceId);
|
||||||
|
|
||||||
|
@ -131,12 +139,13 @@ class SysClass {
|
||||||
)
|
)
|
||||||
.patch(body);
|
.patch(body);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
GBLog.error(`SAVE BASIC error: ${error.message}`);
|
GBLog.error(`SET BASIC error: ${error.message}`);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async save(file: string, ...args): Promise<any> {
|
public async save(file: string, ...args): Promise<any> {
|
||||||
|
GBLog.info(`BASIC: Saving '${file}' (SAVE). Args: ${args.join(',')}.`);
|
||||||
try {
|
try {
|
||||||
let token = await this.min.adminService.acquireElevatedToken(this.min.instance.instanceId);
|
let token = await this.min.adminService.acquireElevatedToken(this.min.instance.instanceId);
|
||||||
|
|
||||||
|
@ -225,12 +234,16 @@ class SysClass {
|
||||||
)
|
)
|
||||||
.get();
|
.get();
|
||||||
|
|
||||||
return results.text[0][0];
|
let val = results.text[0][0];
|
||||||
|
GBLog.info(`BASIC: Getting '${file}' (GET). Value= ${val}.`);
|
||||||
|
return val;
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
GBLog.error(error);
|
GBLog.error(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async find(file: string, ...args): Promise<any> {
|
|
||||||
|
public async findV1(file: string, ...args): Promise<any> {
|
||||||
let token = await this.min.adminService.acquireElevatedToken(this.min.instance.instanceId);
|
let token = await this.min.adminService.acquireElevatedToken(this.min.instance.instanceId);
|
||||||
|
|
||||||
let client = MicrosoftGraph.Client.init({
|
let client = MicrosoftGraph.Client.init({
|
||||||
|
@ -302,6 +315,85 @@ class SysClass {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async find(file: string, ...args): Promise<any> {
|
||||||
|
let token = await this.min.adminService.acquireElevatedToken(this.min.instance.instanceId);
|
||||||
|
|
||||||
|
let client = MicrosoftGraph.Client.init({
|
||||||
|
authProvider: done => {
|
||||||
|
done(null, token);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let siteId = process.env.STORAGE_SITE_ID;
|
||||||
|
let libraryId = process.env.STORAGE_LIBRARY;
|
||||||
|
const botId = this.min.instance.botId;
|
||||||
|
const path = `/${botId}.gbai/${botId}.gbdata`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
let res = await client
|
||||||
|
.api(`https://graph.microsoft.com/v1.0/sites/${siteId}/lists/${libraryId}/drive/root:${path}:/children`)
|
||||||
|
.get();
|
||||||
|
|
||||||
|
// Performs validation.
|
||||||
|
|
||||||
|
let document = res.value.filter(m => {
|
||||||
|
return m.name === file;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (document === undefined) {
|
||||||
|
throw `File '${file}' specified on save GBasic command FIND not found. Check the .gbdata or the .gbdialog associated.`;
|
||||||
|
}
|
||||||
|
if (args.length > 1) {
|
||||||
|
throw `File '${file}' has a FIND call with more than 1 arguments. Check the .gbdialog associated.`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Creates workbook session that will be discarded.
|
||||||
|
|
||||||
|
const filter = args[0].split('=');
|
||||||
|
const columnName = filter[0];
|
||||||
|
const value = filter[1];
|
||||||
|
let results = await client
|
||||||
|
.api(
|
||||||
|
`https://graph.microsoft.com/v1.0/sites/${siteId}/lists/${libraryId}/drive/items/${document[0].id}/workbook/worksheets('Sheet1')/range(address='A1:Z100')`
|
||||||
|
)
|
||||||
|
.get();
|
||||||
|
|
||||||
|
let columnIndex = 0;
|
||||||
|
const header = results.text[0];
|
||||||
|
for (; columnIndex < header.length; columnIndex++) {
|
||||||
|
if (header[columnIndex] === columnName) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let array = [];
|
||||||
|
let foundIndex = 0;
|
||||||
|
for (; foundIndex < results.text.length; foundIndex++) {
|
||||||
|
if (results.text[foundIndex][columnIndex] === value) {
|
||||||
|
let output = {};
|
||||||
|
const row = results.text[foundIndex];
|
||||||
|
for (let colIndex = 0; colIndex < row.length; colIndex++) {
|
||||||
|
output[header[colIndex]] = row[colIndex];
|
||||||
|
}
|
||||||
|
output['line'] = foundIndex + 1;
|
||||||
|
array.push(output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (array.length === 0) {
|
||||||
|
GBLog.info(`BASIC: FIND the data set is empty.`);
|
||||||
|
return null;
|
||||||
|
} else if (array.length === 1) {
|
||||||
|
GBLog.info(`BASIC: FIND single result: ${array[0]}.`);
|
||||||
|
return array[0];
|
||||||
|
} else {
|
||||||
|
GBLog.info(`BASIC: FIND multiple result count: ${array.length}.`);
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
GBLog.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public generatePassword() {
|
public generatePassword() {
|
||||||
return GBAdminService.getRndPassword();
|
return GBAdminService.getRndPassword();
|
||||||
}
|
}
|
||||||
|
@ -440,7 +532,18 @@ export class DialogClass {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getNow(step) {
|
||||||
|
var d = new Date();
|
||||||
|
return d.getHours() + ':' + d.getMinutes();
|
||||||
|
|
||||||
|
// TODO: Choose Fuse with country code or consent IP.
|
||||||
|
}
|
||||||
|
|
||||||
public async sendFile(step, filename, caption) {
|
public async sendFile(step, filename, caption) {
|
||||||
|
if (filename.indexOf('.md') > -1) {
|
||||||
|
let md = await this.min.kbService.getAnswerTextByMediaName(this.min.instance.instanceId, filename);
|
||||||
|
await this.min.conversationalService.sendMarkdownToMobile(this.min, step, null, md);
|
||||||
|
} else {
|
||||||
let url = urlJoin(
|
let url = urlJoin(
|
||||||
GBServer.globals.publicAddress,
|
GBServer.globals.publicAddress,
|
||||||
'kb',
|
'kb',
|
||||||
|
@ -449,8 +552,10 @@ export class DialogClass {
|
||||||
'assets',
|
'assets',
|
||||||
filename
|
filename
|
||||||
);
|
);
|
||||||
|
|
||||||
await this.min.conversationalService.sendFile(this.min, step, null, url, caption);
|
await this.min.conversationalService.sendFile(this.min, step, null, url, caption);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async getFrom(step) {
|
public async getFrom(step) {
|
||||||
return step.context.activity.from.id;
|
return step.context.activity.from.id;
|
||||||
|
@ -476,7 +581,6 @@ export class DialogClass {
|
||||||
return await step.beginDialog('/t');
|
return await step.beginDialog('/t');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async hear(step, promise, previousResolve) {
|
public async hear(step, promise, previousResolve) {
|
||||||
function random(low, high) {
|
function random(low, high) {
|
||||||
return Math.random() * (high - low) + low;
|
return Math.random() * (high - low) + low;
|
||||||
|
|
|
@ -156,9 +156,11 @@ export class GBVMService extends GBService {
|
||||||
|
|
||||||
from = this.getFrom(step)
|
from = this.getFrom(step)
|
||||||
today = this.getToday(step)
|
today = this.getToday(step)
|
||||||
|
now = this.getNow(step)
|
||||||
id = sys().getRandomId()
|
id = sys().getRandomId()
|
||||||
username = this.getUserName(step);
|
username = this.getUserName(step);
|
||||||
mobile = this.getUserMobile(step);
|
mobile = this.getUserMobile(step);
|
||||||
|
ubound = (list) => list.length;
|
||||||
|
|
||||||
${code}
|
${code}
|
||||||
`;
|
`;
|
||||||
|
@ -207,6 +209,10 @@ export class GBVMService extends GBService {
|
||||||
return `transfer (step)\n`;
|
return `transfer (step)\n`;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
code = code.replace(/(talk to)(\s)(.*)/gi, ($0, $1, $2, $3) => {
|
||||||
|
return `sys().talkTo(${$3})\n`;
|
||||||
|
});
|
||||||
|
|
||||||
code = code.replace(/(talk)(\s)(.*)/gi, ($0, $1, $2, $3) => {
|
code = code.replace(/(talk)(\s)(.*)/gi, ($0, $1, $2, $3) => {
|
||||||
return `talk (step, ${$3})\n`;
|
return `talk (step, ${$3})\n`;
|
||||||
});
|
});
|
||||||
|
@ -218,6 +224,7 @@ export class GBVMService extends GBService {
|
||||||
return `sys().save(${$3})\n`;
|
return `sys().save(${$3})\n`;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
code = `${code}\n%>`;
|
code = `${code}\n%>`;
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
talk "Para conseguir te ajudar, você quer informar o CPF ou código?"
|
|
||||||
hear consulta
|
|
||||||
|
|
||||||
if consulta = "cpf" then
|
if consulta = "cpf" then
|
||||||
talk "Qual seu CPF?"
|
talk "Qual seu CPF?"
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
value = get "list.xslx", "A1:A1"
|
value = get "list.xslx", "A1:A1"
|
||||||
|
|
||||||
set "list.xslx", "A1:A1", "value"
|
set "list.xslx", "A1:A1", "value"
|
||||||
|
|
||||||
|
myVar = find "chamadosbug748.xlsx", "CHAMADO=" + "5521979047667-44129-10"
|
||||||
|
status="alterado"
|
||||||
|
set "chamadosbug748.xlsx", "E" + myVar.line + ":E" + myVar.line, status
|
||||||
|
res = get "chamadosbug748.xlsx", "E" + myVar.line + ":E" + myVar.line
|
||||||
|
talk "Obrigado e até a próxima e veja bem, o resultado é esse: " + res
|
||||||
|
|
25
packages/default.gbdialog/templates.vbs
Normal file
25
packages/default.gbdialog/templates.vbs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
|
||||||
|
talk "qual seu nome?"
|
||||||
|
hear nome
|
||||||
|
talk "qual seu e-mail?"
|
||||||
|
hear email
|
||||||
|
|
||||||
|
documento = "meutemplate.docx", nome, email,
|
||||||
|
|
||||||
|
send file documento
|
||||||
|
|
||||||
|
save file documento, "curriculos/nome" + ".docx"
|
||||||
|
|
||||||
|
' $name
|
||||||
|
|
||||||
|
'$trabalho
|
||||||
|
|
||||||
|
'Experiência
|
||||||
|
'$ano1
|
||||||
|
'$oquefoifeitoAno1
|
||||||
|
'$ano2
|
||||||
|
'$oquefoifeitoAno2
|
||||||
|
'$ano3
|
||||||
|
'$oquefoifeitoAno1
|
||||||
|
|
Loading…
Add table
Reference in a new issue