fix(core.gbapp): resolve is being called correctly in /hear.

This commit is contained in:
Rodrigo Rodriguez 2020-12-22 21:48:41 -03:00
parent 27641442cb
commit 9804debfcc
4 changed files with 84 additions and 20 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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.

View file

@ -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();
}
])
);