From 9804debfccd268796b5a789d2da7ebdb44dfa2e0 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Tue, 22 Dec 2020 21:48:41 -0300 Subject: [PATCH] fix(core.gbapp): resolve is being called correctly in /hear. --- packages/core.gbapp/services/GBAPIService.ts | 11 ++++ .../services/GBConversationalService.ts | 10 ++- packages/core.gbapp/services/GBMinService.ts | 19 +++--- packages/core.gbapp/services/GBVMService.ts | 64 ++++++++++++++++--- 4 files changed, 84 insertions(+), 20 deletions(-) diff --git a/packages/core.gbapp/services/GBAPIService.ts b/packages/core.gbapp/services/GBAPIService.ts index ba0d35ef..eecd0b42 100644 --- a/packages/core.gbapp/services/GBAPIService.ts +++ b/packages/core.gbapp/services/GBAPIService.ts @@ -657,6 +657,17 @@ export class DialogClass { } } + public async setLanguage(step, language) + { + const locale = step.context.activity.locale; + const user = await this.min.userProfile.get(step.context, {}); + + let sec = new SecService(); + user.systemUser = await sec.updateUserLocale(user.systemUser.userId, language); + + await this.min.userProfile.set(step.context, user); + } + public async getFrom(step) { return step.context.activity.from.id; } diff --git a/packages/core.gbapp/services/GBConversationalService.ts b/packages/core.gbapp/services/GBConversationalService.ts index 3a42ab52..d88402a4 100644 --- a/packages/core.gbapp/services/GBConversationalService.ts +++ b/packages/core.gbapp/services/GBConversationalService.ts @@ -170,6 +170,12 @@ export class GBConversationalService { // "what?" version ... http://jsperf.com/diacritics/12 public static removeDiacriticsAndPunctuation(str) { + str = GBConversationalService.removeDiacritics(str); + return str.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, ""); + + } + public static removeDiacritics(str) { + var diacriticsMap = {}; for (var i = 0; i < GBConversationalService.defaultDiacriticsRemovalMap.length; i++) { var letters = GBConversationalService.defaultDiacriticsRemovalMap[i].letters; @@ -180,9 +186,7 @@ export class GBConversationalService { str = str.replace(/[^\u0000-\u007E]/g, function (a) { return diacriticsMap[a] || a; }); - - return str.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, ""); - + return str; } diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 44e58ec8..45f90df6 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -668,21 +668,24 @@ export class GBMinService { ); if (context.activity.type === 'conversationUpdate' && context.activity.membersAdded.length > 0) { const member = context.activity.membersAdded[0]; - if (member.name === min.instance.title) { + if (context.activity.membersAdded[0].id === context.activity.recipient.id) { GBLog.info(`Bot added to conversation, starting chat...`); await CollectionUtil.asyncForEach(appPackages, async e => { await e.onNewSession(min, step); }); - await step.beginDialog('/'); - - } else { const startDialog = min.core.getParam(min.instance, 'Start Dialog', null); if (startDialog && !user.welcomed) { user.welcomed = true; GBLog.info(`Auto start dialog is now being called: ${startDialog}...`); await GBVMService.callVM(startDialog.toLowerCase(), min, step, this.deployer); } + else + { + await step.beginDialog('/'); + } + + } else { GBLog.info(`Member added to conversation: ${member.name}`); } @@ -841,18 +844,18 @@ export class GBMinService { keepTextList = keepTextList.concat(result); } }); - let textProcessed = GBConversationalService.removeDiacriticsAndPunctuation(text); + let textProcessed = GBConversationalService.removeDiacritics(text); if (keepTextList) { keepTextList = keepTextList.filter(p => p.trim() !== ''); let i = 0; await CollectionUtil.asyncForEach(keepTextList, item => { - let it = GBConversationalService.removeDiacriticsAndPunctuation(item); + let it = GBConversationalService.removeDiacritics(item); if (textProcessed.toLowerCase().indexOf(it.toLowerCase()) != -1) { const replacementToken = 'X' + GBAdminService['getNumberIdentifier']().substr(0,4); replacements[i] = { text: item, replacementToken: replacementToken }; i++; - textProcessed = textProcessed.replace(new RegExp(it.trim(), 'gi'), `${replacementToken}`); + textProcessed = textProcessed.replace(new RegExp(`\\b${it.trim()}\\b`, 'gi'), `${replacementToken}`); } }); } @@ -917,8 +920,6 @@ export class GBMinService { if (step.activeDialog !== undefined) { await step.continueDialog(); - - } else { // Checks if any .gbapp will handle this answer, if not goes to standard kb.gbapp. diff --git a/packages/core.gbapp/services/GBVMService.ts b/packages/core.gbapp/services/GBVMService.ts index 76b8535c..cb74f066 100644 --- a/packages/core.gbapp/services/GBVMService.ts +++ b/packages/core.gbapp/services/GBVMService.ts @@ -201,6 +201,10 @@ export class GBVMService extends GBService { return `${$1} = hear("money")`; }); + code = code.replace(/hear (\w+) as language/gi, ($0, $1, $2) => { + return `${$1} = hear("language")`; + }); + code = code.replace(/hear (\w+) as zipcode/gi, ($0, $1, $2) => { return `${$1} = hear("zipcode")`; }); @@ -237,6 +241,10 @@ export class GBVMService extends GBService { } }); + code = code.replace(/(set language)(\s*)(.*)/gi, ($0, $1, $2, $3) => { + return `setLanguage (step, ${$3})\n`; + }); + code = code.replace(/set\s(.*)/gi, ($0, $1, $2) => { return `sys().set (${$1})`; }); @@ -254,7 +262,7 @@ export class GBVMService extends GBService { }); code = code.replace(/(exit)/gi, () => { - return `exit (step)\n`; + return `resolve();\n`; }); code = code.replace(/(show menu)/gi, () => { @@ -368,7 +376,7 @@ export class GBVMService extends GBService { } parsedCode += code.substring(start + match1[0].length + 1, pos + match1[0].length); - + parsedCode += '}catch(error){reject(error);}});\n'; parsedCode += '}\n'; @@ -424,12 +432,12 @@ export class GBVMService extends GBService { code = code.replace(/("[^"]*"|'[^']*')|\bsendFile\b/gi, ($0, $1) => { return $1 === undefined ? 'this.sendFile' : $1; }); + code = code.replace(/("[^"]*"|'[^']*')|\bsetLanguage\b/gi, ($0, $1) => { + return $1 === undefined ? 'this.setLanguage' : $1; + }); code = code.replace(/("[^"]*"|'[^']*')|\btransfer\b/gi, ($0, $1) => { return $1 === undefined ? 'this.transfer' : $1; }); - code = code.replace(/("[^"]*"|'[^']*')|\bexit\b/gi, ($0, $1) => { - return $1 === undefined ? 'this.exit' : $1; - }); code = code.replace(/("[^"]*"|'[^']*')|\bmenu\b/gi, ($0, $1) => { return $1 === undefined ? 'this.menu' : $1; }); @@ -629,21 +637,61 @@ export class GBVMService extends GBService { return await step.replaceDialog('/hear', step.activeDialog.state.options); } } + else if (step.activeDialog.state.options['kind'] === "language") { + + result = null; + + const list = [ + { name: 'english', code: 'en' }, + { name: 'inglês', code: 'en' }, + { name: 'portuguese', code: 'pt' }, + { name: 'português', code: 'pt' }, + { name: 'français', code: 'fr' }, + { name: 'francês', code: 'fr' }, + { name: 'french', code: 'fr' }, + { name: 'spanish', code: 'es' }, + { name: 'espanõl', code: 'es' }, + { name: 'espanhol', code: 'es' }, + { name: 'german', code: 'de' }, + { name: 'deutsch', code: 'de' }, + { name: 'alemão', code: 'de' } + ]; + + const text = step.context.activity['originalText']; + + await CollectionUtil.asyncForEach(list, async item => { + if (GBConversationalService.kmpSearch(text.toLowerCase(), item.name.toLowerCase()) != -1 || + GBConversationalService.kmpSearch(text.toLowerCase(), item.code.toLowerCase()) != -1) { + result = item.code; + } + }); + + if (result === null) { + await min.conversationalService.sendText(min, step, `Escolha por favor um dos idiomas sugeridos.`); + return await step.replaceDialog('/hear', step.activeDialog.state.options); + } + + } const id = step.activeDialog.state.options.id; if (min.cbMap[id]) { const promise = min.cbMap[id].promise; delete min.cbMap[id]; try { - const opts = await promise(step, result); - return await step.replaceDialog('/hear', opts); + + await promise(step, step.result); + if (step.activeDialog.state.options.previousResolve != undefined) { + step.activeDialog.state.options.previousResolve(); + } + + return await step.next(); } catch (error) { GBLog.error(`Error in BASIC code: ${error}`); const locale = step.context.activity.locale; await min.conversationalService.sendText(min, step, Messages[locale].very_sorry_about_error); } } - return await step.endDialog(); + } ]) );