Commit f3acceb5 by Иван Кубота

using database for answers; Event can exist without matcher pattern; db connector

parent 6c2bbc51
......@@ -15,7 +15,8 @@ for( var i = 0; i < entries.length; i++ ){
var fullPath = getPath(entry);
var stat = fs.statSync( fullPath );
if( stat.isFile() && entry.charAt(0) !== '.' ){
if( stat.isFile() && entry.charAt(0) !== '.' && entry.match(/[^\d\-]/) === null ){
console.log(entry)
try{
var result = JSON.parse( fs.readFileSync( fullPath ) );
chatDataStorage[entry] = result
......
const Event = function(cfg, then) {
if(typeof cfg === 'function'){
then = cfg;
cfg = '{{$msg}}';
}
if(!cfg)
return;
this._match = cfg;
......
......@@ -3,8 +3,9 @@
"multipleStatements": true,
"driver": "mysql",
"database": "tg_bot",
"user": "user",
"password": "yourpassword",
"d":{"ENV": "DEVELOP_MYSQL_PASSWORD"}
"user": {"ENV": "DEVELOP_MYSQL_USER"},
"u":"user",
"password2": "yourpassword",
"password":{"ENV": "DEVELOP_MYSQL_PASSWORD"}
}
}
\ No newline at end of file
......@@ -23,6 +23,8 @@ module.exports = {
"newLocale": "Теперь напиши боту лично. У тебя есть на это 15 минут, поторопись.",
"linkToUI": "Секретная ссылка! {{$link}}",
"donknow": "Не понимаю команду",
"_noSuchTemplate": "No such template: {{$string}}",
"_plural": "plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)"
......
......@@ -11,6 +11,7 @@
"localize.js": "^2.0.2",
"mocha": "^6.2.0",
"ms": "^2.1.2",
"mysql": "^2.17.1",
"node-telegram-bot-api": "^0.30.0"
},
"devDependencies": {},
......
......@@ -2,23 +2,80 @@ const {Reply, Answer} = require('./Model/Event'),
{Choose} = require('./Model/Choose'),
L = require('localize.js')('ru', require('./locale/locale.ru'));
// TODO: MAKE MODULE FOR DB CONNECT
const configGetter = function(cfgs, env = process.env) {
const copy = {};
let cfg, configMatched = false;
const checkIt = [cfgs.defaultEnv, 'dev', 'development', env.NODE_ENV];
for( let i = 0, _i = checkIt.length; i < _i; i++ ){
const checkItElement = checkIt[ i ];
if(checkItElement in cfgs){
cfg = cfgs[checkItElement];
configMatched = true;
console.log('Using '+ checkItElement +' DB config');
break;
}
}
if(!configMatched){
throw new Error('No matched DB config');
}
for(const key in cfg){
const val = cfg[key];
if(typeof val === 'object' && 'ENV' in val){
copy[ key ] = val.ENV in env ? env[val.ENV] : '';
}else{
copy[ key ] = val;
}
}
return copy;
};
const mysql = require('mysql'),
connection = mysql.createConnection(configGetter(require('./database.json')));
connection.connect();
const M = function(tplName, data) {
return new Promise((resolve, reject) => {
connection.query('SELECT * FROM `locale` WHERE `key` = ?', [tplName], function (err, results, fields) {
if(err){
return reject(err);
}
if(results.length){
const randomReply = results[(Math.random()*results.length)|0].value;
resolve(L.L.resolve(randomReply, data));
}else{
reject('No template');
}
// error will be an Error if one occurred during the query
// results will contain the results of the query
// fields will contain information about the returned results fields (if any)
});
});
};
const JSON5 = require('json5');
const maxWarns = 3;
const testFn = function(msg, match) {
const testFn = async function(msg, match) {
console.log(match);
var tmp = L.L.variableResolveFailed;
L.L.variableResolveFailed = function(varName) {
console.log(varName);
return '${'+varName+'}';
return '!!${'+varName+'}';
};
if(match.string in L.voc){
const data = { ...msg.chat, ...msg.user, ...(match.data || {}) };
msg.reply(
'Template: ' + L.voc[ match.string ] + '\n' +
'Result: ' + L( match.string, data )
'Template:\n' + L.voc[ match.string ] + '\n' +
'\nResult:\n' + await M( match.string, data )
);
}else{
msg.reply(L('_noSuchTemplate', match));
......@@ -28,7 +85,7 @@ const testFn = function(msg, match) {
};
module.exports = [
Answer('/test {{$string}} \{{{$options}}\}', (msg, match)=>{
Answer('/test {{$string}} \{{{$options}}\}', async (msg, match)=>{
const json = '{' + match.options + '}';
try{
match.data = JSON5.parse( json );
......@@ -39,6 +96,27 @@ module.exports = [
return testFn(msg,match);
}),
Answer('/test {{$string}}', testFn),
Answer('/testTpl {{$tpl}} \{{{$options}}\}', async (msg, match)=>{
const json = '{' + match.options + '}';
try{
match.data = JSON5.parse( json );
}catch(e){
match.data = {};
msg.reply('JSON parse error: \n'+e.toString().replace(/JSON5:\s*/g,''));
}
msg.reply('Result:\n'+
await M(match.tpl, match.data)
)
}),
Answer('/test', (msg)=>{
msg.reply('List of templates:\n'+
Object.keys(L.voc)
.filter(a=>a.charAt(0)!=='_')
.sort((a,b)=>a>b?1:a<b?-1:0)
.map((a)=>'\t '+a)
.join('\n')
)
}),
Answer('/help', function(message) {
message.send(
'List of commands:\n'+
......@@ -182,5 +260,9 @@ module.exports = [
], function(result) {
message.user.send('Selected: '+result.text);
}));*/
}),
Answer(function(message) {
debugger
message.reply(L('donknow'));
})
];
\ No newline at end of file
......@@ -29,7 +29,7 @@ describe('pattern matching', function (){
Answer('/test1', reply('simple:')),
Answer('/test {{$something}}', reply('var:')),
] )
.init()
.init();
assert.notStrictEqual(bot.bot, void 0);
done();
......
......@@ -113,6 +113,11 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"
bignumber.js@7.2.1:
version "7.2.1"
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f"
integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==
bl@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
......@@ -788,6 +793,16 @@ ms@^2.1.1, ms@^2.1.2:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
mysql@^2.17.1:
version "2.17.1"
resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.17.1.tgz#62bba4a039a9b2f73638cd1652ce50fc6f682899"
integrity sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA==
dependencies:
bignumber.js "7.2.1"
readable-stream "2.3.6"
safe-buffer "5.1.2"
sqlstring "2.3.1"
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
......@@ -989,7 +1004,7 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
readable-stream@^2.3.5:
readable-stream@2.3.6, readable-stream@^2.3.5:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
......@@ -1060,16 +1075,16 @@ require-main-filename@^2.0.0:
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2:
version "5.2.0"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
......@@ -1107,6 +1122,11 @@ sprintf-js@~1.0.2:
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
sqlstring@2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"
integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=
sshpk@^1.7.0:
version "1.16.1"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment