diff --git a/package-lock.json b/package-lock.json index c658c354..136fbdc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5015,27 +5015,6 @@ } } }, - "coveralls": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", - "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.0", - "request": "^2.88.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "cpass": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cpass/-/cpass-2.2.0.tgz", @@ -8613,12 +8592,6 @@ "invert-kv": "^2.0.0" } }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, "le-table": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/le-table/-/le-table-4.2.2.tgz", @@ -9209,12 +9182,6 @@ "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", "dev": true }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -19003,6 +18970,11 @@ "lodash": "^4.5.0" } }, + "washyourmouthoutwithsoap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/washyourmouthoutwithsoap/-/washyourmouthoutwithsoap-1.0.2.tgz", + "integrity": "sha512-N008S6j3VoPgjUwvW1Q2roTYg9Xuy1LfR/R4BdjddhzM8YBNgIR4FpSQ9zVmNkvpi/fS9cfAQLSjWKXE3wQ1zA==" + }, "weak-map": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz", diff --git a/package.json b/package.json index 5c002fdf..3fc99550 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,8 @@ "url-join": "4.0.1", "vbscript-to-typescript": "1.0.8", "wait-until": "0.0.2", - "walk-promise": "0.2.0" + "walk-promise": "0.2.0", + "washyourmouthoutwithsoap": "^1.0.2" }, "devDependencies": { "@types/chai": "^4.2.7", diff --git a/packages/core.gbapp/services/GBMinService.ts b/packages/core.gbapp/services/GBMinService.ts index 1f258e8d..ab2627f9 100644 --- a/packages/core.gbapp/services/GBMinService.ts +++ b/packages/core.gbapp/services/GBMinService.ts @@ -42,6 +42,7 @@ const express = require('express'); const request = require('request-promise-native'); const removeRoute = require('express-remove-route'); const AuthenticationContext = require('adal-node').AuthenticationContext; +const wash = require('washyourmouthoutwithsoap'); import { AutoSaveStateMiddleware, BotFrameworkAdapter, ConversationState, MemoryStorage, UserState } from 'botbuilder'; import { ConfirmPrompt, WaterfallDialog } from 'botbuilder-dialogs'; import { @@ -540,7 +541,12 @@ export class GBMinService { const isVMCall = Object.keys(min.scriptMap).find(key => min.scriptMap[key] === context.activity.text) !== undefined; - if (isVMCall) { + const simpleLocale = context.activity.locale.substring(0, 2); + const hasBadWord = wash.check(simpleLocale, context.activity.text); + + if (hasBadWord) { + await step.beginDialog('/pleaseNoBadWords'); + }else if (isVMCall) { await GBMinService.callVM(context.activity.text, min, step); } else if (context.activity.text.charAt(0) === '/') { await step.beginDialog(context.activity.text); diff --git a/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts b/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts index b5ce198d..314c9ef4 100644 --- a/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts +++ b/packages/customer-satisfaction.gbapp/dialogs/FeedbackDialog.ts @@ -56,6 +56,19 @@ export class FeedbackDialog extends IGBDialog { public static setup(bot: BotAdapter, min: GBMinInstance) { const service = new CSService(); + min.dialogs.add( + new WaterfallDialog('/pleaseNoBadWords', [ + async step => { + const locale = step.context.activity.locale; + await step.context.sendActivity(Messages[locale].please_no_bad_words); + + return await step.next(); + } + ]) + ); + + + min.dialogs.add( new WaterfallDialog('/feedbackNumber', [ async step => { diff --git a/packages/customer-satisfaction.gbapp/strings.ts b/packages/customer-satisfaction.gbapp/strings.ts index 1cc74dc7..123496ab 100644 --- a/packages/customer-satisfaction.gbapp/strings.ts +++ b/packages/customer-satisfaction.gbapp/strings.ts @@ -7,7 +7,8 @@ export const Messages = { what_about_me: 'What about the service, please rate between 1 and 5.', thanks: 'Thanks!', im_sorry_lets_try: 'I\'m sorry. Let\'s try again...', - great_thanks: 'Great, thanks for sharing your thoughts.' + great_thanks: 'Great, thanks for sharing your thoughts.', + please_no_bad_words: 'Please, no bad words.' }, 'pt-BR': { about_suggestions: 'Sugestões melhoram muito minha qualidade...', @@ -17,6 +18,7 @@ export const Messages = { what_about_me: 'O que achou do meu atendimento, de 1 a 5?', thanks: 'Obrigado!', im_sorry_lets_try: 'Desculpe-me, vamos tentar novamente.', - great_thanks: 'Ótimo, obrigado por contribuir com sua resposta.' + great_thanks: 'Ótimo, obrigado por contribuir com sua resposta.', + please_no_bad_words: 'Por favor, sem palavrões!' } };