fix(core.gbapp): Fixing after language new fetures being added.

This commit is contained in:
Rodrigo Rodriguez 2020-11-19 11:43:15 -03:00
parent 09facb7aea
commit 0ecaa8a877
5 changed files with 72 additions and 15 deletions

View file

@ -43,6 +43,7 @@ import { Messages } from '../strings';
import { SecService } from '../../security.gbapp/services/SecService'; import { SecService } from '../../security.gbapp/services/SecService';
import { GBServer } from '../../../src/app'; import { GBServer } from '../../../src/app';
import { GBConversationalService } from '../services/GBConversationalService'; import { GBConversationalService } from '../services/GBConversationalService';
import { CollectionUtil } from 'pragmatismo-io-framework';
/** /**
* Dialog for the bot explains about itself. * Dialog for the bot explains about itself.
*/ */
@ -58,18 +59,36 @@ export class LanguageDialog extends IGBDialog {
async step => { async step => {
const locale = step.context.activity.locale; const locale = step.context.activity.locale;
return await min.conversationalService.prompt (min, step, return await min.conversationalService.prompt(min, step,
Messages[locale].which_language); Messages[locale].which_language);
}, },
async step => { async step => {
const locale = step.context.activity.locale;
const user = await min.userProfile.get(step.context, {});
const list = [
{ name: 'english', code: 'en' },
{ name: 'portuguese', code: 'pt' },
{ name: 'spanish', code: 'es' },
{ name: 'german', code: 'de' },
{ name: 'deutsch', code: 'de' }
];
let translatorLocale = null;
await CollectionUtil.asyncForEach(list, async item => {
if (GBConversationalService.kmpSearch(step.result, item.name) != -1) {
translatorLocale = item.code;
}
});
let sec = new SecService(); let sec = new SecService();
let from = step.context.activity.from.id; user.systemUser = await sec.updateUserLocale(user.systemUser.userId, translatorLocale);
const botId = step.result;
const instance = await min.core.loadInstanceByBotId(botId); await min.userProfile.set(step.context, user);
await sec.updateUserInstance(from, instance.instanceId); await min.conversationalService.sendText(min, step,
await min.conversationalService.sendText(min, step, `Opa, vamos lá!`); Messages[locale].language_chosen );
return await step.next(); return await step.next();
} }
])); ]));

View file

@ -39,6 +39,7 @@
import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib'; import { GBDialogStep, GBLog, GBMinInstance, IGBCoreService, IGBPackage } from 'botlib';
import { Sequelize } from 'sequelize-typescript'; import { Sequelize } from 'sequelize-typescript';
import { BroadcastDialog } from './dialogs/BroadcastDialog'; import { BroadcastDialog } from './dialogs/BroadcastDialog';
import { LanguageDialog } from './dialogs/LanguageDialog';
import { SwitchBotDialog } from './dialogs/SwitchBot'; import { SwitchBotDialog } from './dialogs/SwitchBot';
import { WelcomeDialog } from './dialogs/WelcomeDialog'; import { WelcomeDialog } from './dialogs/WelcomeDialog';
import { WhoAmIDialog } from './dialogs/WhoAmIDialog'; import { WhoAmIDialog } from './dialogs/WhoAmIDialog';
@ -78,5 +79,6 @@ export class GBCorePackage implements IGBPackage {
SwitchBotDialog.setup(min.bot, min); SwitchBotDialog.setup(min.bot, min);
DialogClass.setup(min.bot, min); DialogClass.setup(min.bot, min);
BroadcastDialog.setup(min.bot, min); BroadcastDialog.setup(min.bot, min);
LanguageDialog.setup(min.bot, min);
} }
} }

View file

@ -679,4 +679,36 @@ export class GBConversationalService {
} }
}); });
} }
public static kmpSearch(pattern, text) {
pattern = pattern.toLowerCase();
text = text.toLowerCase();
if (pattern.length == 0)
return 0; // Immediate match
// Compute longest suffix-prefix table
var lsp = [0]; // Base case
for (var i = 1; i < pattern.length; i++) {
var j = lsp[i - 1]; // Start by assuming we're extending the previous LSP
while (j > 0 && pattern.charAt(i) != pattern.charAt(j))
j = lsp[j - 1];
if (pattern.charAt(i) == pattern.charAt(j))
j++;
lsp.push(j);
}
// Walk through text string
var j = 0; // Number of chars matched in pattern
for (var i = 0; i < text.length; i++) {
while (j > 0 && text.charAt(i) != pattern.charAt(j))
j = lsp[j - 1]; // Fall back in the pattern
if (text.charAt(i) == pattern.charAt(j)) {
j++; // Next char matched, increment position
if (j == pattern.length)
return i - (j - 1);
}
}
return -1; // Not found
}
} }

View file

@ -764,8 +764,9 @@ export class GBMinService {
await step.beginDialog('/publish', { confirm: true, firstTime: true }); await step.beginDialog('/publish', { confirm: true, firstTime: true });
} else { } else {
let text = context.activity.text; let text = context.activity.text;
const originalText = text;
text = text.replace(/<([^>]+?)([^>]*?)>(.*?)<\/\1>/gi, ''); text = text.replace(/<([^>]+?)([^>]*?)>(.*?)<\/\1>/gi, '');
// Spells check the input text before translating. // Spells check the input text before translating.
text = await min.conversationalService.spellCheck(min, text); text = await min.conversationalService.spellCheck(min, text);
@ -787,13 +788,14 @@ export class GBMinService {
const systemUser = user.systemUser; const systemUser = user.systemUser;
if (systemUser.locale != locale) { if (systemUser.locale != locale) {
let sec = new SecService(); let sec = new SecService();
await sec.updateUserLocale(systemUser.userId, locale); user.systemUser = await sec.updateUserLocale(systemUser.userId, locale);
await min.userProfile.set(step.context, user);
} }
} }
// Translates the input text if is turned on instance params. // Translates the input text if is turned on instance params.
const originalText = context.text;
let contentLocale = min.core.getParam<string>( let contentLocale = min.core.getParam<string>(
min.instance, min.instance,
'Default Content Language', 'Default Content Language',

View file

@ -10,8 +10,9 @@ export const Messages = {
very_sorry_about_error: `I'm sorry to inform that there was an error which was recorded to be solved.`, very_sorry_about_error: `I'm sorry to inform that there was an error which was recorded to be solved.`,
canceled: 'Canceled. If I can be useful, let me know how', canceled: 'Canceled. If I can be useful, let me know how',
whats_email: "What's your E-mail address?", whats_email: "What's your E-mail address?",
which_language: "Which language would you like to choose from?", which_language: "Please, type the language name you would like to talk through.",
validation_enter_valid_email: "Please enter a valid e-mail." , validation_enter_valid_email: "Please enter a valid e-mail." ,
language_chosen: "Very good, so let's go..." ,
affirmative_sentences: /^(sim|s|positivo|afirmativo|claro|evidente|sem dúvida|confirmo|confirmar|confirmado|uhum)/i, affirmative_sentences: /^(sim|s|positivo|afirmativo|claro|evidente|sem dúvida|confirmo|confirmar|confirmado|uhum)/i,
}, },
@ -24,8 +25,9 @@ export const Messages = {
very_sorry_about_error: `Lamento, ocorreu um erro que já foi registrado para ser tratado.`, very_sorry_about_error: `Lamento, ocorreu um erro que já foi registrado para ser tratado.`,
canceled: 'Cancelado, avise como posso ser útil novamente.', canceled: 'Cancelado, avise como posso ser útil novamente.',
whats_email: "Qual seu e-mail?", whats_email: "Qual seu e-mail?",
which_language: "Qual idioma você gostaria de usar?", which_language: "Por favor, digite o idioma que você gostaria de usar para conversarmos.",
validation_enter_valid_email: "Por favor digite um email válido.", validation_enter_valid_email: "Por favor digite um email válido.",
language_chosen: "Muito bem, então vamos lá..." ,
affirmative_sentences: /^(sim|s|positivo|afirmativo|claro|evidente|sem dúvida|confirmo|confirmar|confirmado|uhum)/i, affirmative_sentences: /^(sim|s|positivo|afirmativo|claro|evidente|sem dúvida|confirmo|confirmar|confirmado|uhum)/i,
} }