diff --git a/package.json b/package.json index 282ab71..4bd9c81 100755 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "formidable": "^1.2.2", "i18n": "^0.13.3", "image-downloader": "^4.1.0", + "internet-available": "^1.0.0", "jade": "^1.11.0", "jsonwebtoken": "^8.5.1", "lodash": "^4.17.21", diff --git a/src/server/locales/it.json b/src/server/locales/it.json index 7b0ab49..aaa118b 100644 --- a/src/server/locales/it.json +++ b/src/server/locales/it.json @@ -49,5 +49,6 @@ "CIRCUIT_REMOVED": "❌ l'utente %s è stato rimosso del Circuito %s (da parte di %s)", "CIRCUIT_EXIT_USER": "❌ l'utente %s è uscito dal Circuito %s", "CIRCUIT_EXIT_USER_TO_ME": "❌ Sei uscito dal Circuito %s", - "CIRCUIT_REMOVED_TO_ME": "❌ Sei stato rimosso dal Circuito %s (da parte di %s)" + "CIRCUIT_REMOVED_TO_ME": "❌ Sei stato rimosso dal Circuito %s (da parte di %s)", + "CIRCUIT_SENDCOINSREQ": "%s ti sta inviando %s %s." } diff --git a/src/server/models/account.js b/src/server/models/account.js index 6cbf62a..72c986f 100755 --- a/src/server/models/account.js +++ b/src/server/models/account.js @@ -45,6 +45,13 @@ const AccountSchema = new Schema({ type: Boolean, default: false, }, + date_created: { + type: Date, + default: Date.now, + }, + date_updated: { + type: Date, + }, }); AccountSchema.statics.findAllIdApp = async function(idapp) { @@ -86,6 +93,7 @@ AccountSchema.statics.executeQueryTable = function(idapp, params) { return tools.executeQueryTable(this, idapp, params); }; + AccountSchema.statics.getAccountsByUsername = async function(idapp, username) { const Account = this; @@ -100,6 +108,99 @@ AccountSchema.statics.getAccountsByUsername = async function(idapp, username) { return await Account.find(myquery).lean(); }; +AccountSchema.statics.getUserAccounts = async function(idapp, username) { + + try { + let aggr1 = [ + { + $match: {idapp, username}, + }, + { + $lookup: { + from: 'circuits', + localField: 'circuitId', + foreignField: '_id', + as: 'circuit', + }, + }, + { + '$replaceRoot': { + 'newRoot': { + '$mergeObjects': [ + { + '$arrayElemAt': [ + '$circuit', + 0, + ], + }, + '$$ROOT', + ], + }, + }, + }, + { + $project: { + "circuit.name": 1, + }, + }, + ]; + + ris = await this.aggregate(aggr1); + + return ris; + }catch (e) { + console.error('e', e); + } + +}; + +AccountSchema.statics.addtoSaldo = async function(id, amount) { + const Account = this; + + if (!id) + return false; + + const myaccount = await Account.findById(id); + if (myaccount) { + myaccount.saldo = myaccount.saldo + amount; + myaccount.date_updated = new Date(); + return myaccount.save(); + + } + + return null; +}; + +AccountSchema.statics.getAccountByUsernameAndCircuitId = async function(idapp, username, circuitId, createifnotexist) { + const Account = this; + + if (username === undefined) + return false; + + const myquery = { + 'idapp': idapp, + 'username': username, + circuitId, + }; + + let myaccount = await Account.findOne(myquery).lean(); + + if (!myaccount && createifnotexist) { + myaccount = new Account({ + idapp, + username, + circuitId, + deperibile: false, + importo_iniziale: 0, + saldo: 0, + }); + + return myaccount.save(); + } + + return myaccount; + +}; const Account = mongoose.model('Account', AccountSchema); diff --git a/src/server/models/bot.js b/src/server/models/bot.js index f13b208..742c756 100755 --- a/src/server/models/bot.js +++ b/src/server/models/bot.js @@ -47,7 +47,6 @@ const BotSchema = new Schema({ }, date_updated: { type: Date, - default: Date.now, }, }); diff --git a/src/server/models/circuit.js b/src/server/models/circuit.js index 9fac812..960d4a0 100755 --- a/src/server/models/circuit.js +++ b/src/server/models/circuit.js @@ -14,6 +14,9 @@ mongoose.plugin(schema => { }); const CircuitSchema = new Schema({ + _id: { + type: String, + }, Num: { type: Number, unique: true, @@ -60,11 +63,11 @@ const CircuitSchema = new Schema({ }, symbol: { type: String, - maxlength: 3, + maxlength: 7, }, abbrev: { type: String, - maxlength: 3, + maxlength: 7, }, compara_valuta: { type: Number, @@ -142,11 +145,22 @@ const CircuitSchema = new Schema({ }], // username deleted: { type: Boolean, + default: false, }, -}); +}, ); CircuitSchema.pre('save', async function(next) { if (this.isNew) { + const myrec = await Circuit.findOne().limit(1).sort({_id: -1}); + if (!!myrec) { + if (myrec._doc.Num === 0) + this.Num = 1; + else + this.Num = myrec._doc.Num + 1; + + } else { + this.Num = 1; + } this.date_created = new Date(); } @@ -158,9 +172,11 @@ CircuitSchema.pre('save', async function(next) { CircuitSchema.statics.findAllIdApp = async function(idapp) { const Circuit = this; - const myfind = {idapp}; + const myfind = {idapp, deleted: false}; - return await Circuit.find(myfind, (err, arrrec) => { + const whatToShow = this.getWhatToShow(idapp, ''); + + return await Circuit.find(myfind, whatToShow, (err, arrrec) => { return arrrec; }); }; @@ -347,11 +363,50 @@ CircuitSchema.statics.getInfoCircuitByName = async function(idapp, name) { }; +CircuitSchema.statics.getCircuitByName = async function(idapp, name) { + + const myfind = { + idapp, + name, + }; + + try { + return await Circuit.findOne(myfind).lean(); + + } catch (e) { + return null; + } + +}; + CircuitSchema.statics.deleteCircuit = async function(idapp, usernameOrig, name) { console.log('Circuito ' + name + ' rimosso da ' + usernameOrig); return Circuit.findOneAndRemove({idapp, name}); }; +CircuitSchema.statics.sendCoins = async function(idapp, usernameOrig, extrarec) { + console.log('Aggiungi Monete'); + + const {Movement} = require('../models/movement'); + const {Account} = require('../models/account'); + + try { + const reccircuit = Circuit.getCircuitByName(extrarec.circuitname); + + const myqty = extrarec.qty; + + const accountdest = await Account.getAccountByUsernameAndCircuitId(idapp, extrarec.dest, reccircuit._id, true); + const accountorig = await Account.getAccountByUsernameAndCircuitId(idapp, usernameOrig, reccircuit._id, true); + + // Add a Transaction ! + Movement.addMov(accountorig, accountdest, myqty, extrarec.causal); + + }catch (e) { + console.error('Err sendCoins', e); + } + +}; + // Rimuovo la Richiesta del Circuito CircuitSchema.statics.removeReqCircuit = async function(idapp, username, name) { diff --git a/src/server/models/movement.js b/src/server/models/movement.js index 110c572..037525c 100755 --- a/src/server/models/movement.js +++ b/src/server/models/movement.js @@ -85,6 +85,30 @@ MovementSchema.statics.executeQueryTable = function(idapp, params) { return tools.executeQueryTable(this, 0, params); }; +MovementSchema.statics.addMov = async function(accountFromId, accountToId, amount, causal) { + + const {Account} = require('../models/account'); + + let mymov = Movement( + { + transactionDate: new Date(), + accountFromId, + accountToId, + amount, + causal, + residual: 0, + // expiringDate: + } + ); + + // Update saldo dell'Account + Account.addtoSaldo(accountToId, amount); + + Account.addtoSaldo(accountFromId, -amount); + + return mymov.save(); +}; + const Movement = mongoose.model('Movement', MovementSchema); module.exports = {Movement}; diff --git a/src/server/models/mybacheca.js b/src/server/models/mybacheca.js index 82dc993..d1acf2f 100755 --- a/src/server/models/mybacheca.js +++ b/src/server/models/mybacheca.js @@ -83,7 +83,6 @@ const MyBachecaSchema = new Schema({ }, date_updated: { type: Date, - default: Date.now, }, }); diff --git a/src/server/models/mygood.js b/src/server/models/mygood.js index eb6f93c..fefdc84 100755 --- a/src/server/models/mygood.js +++ b/src/server/models/mygood.js @@ -84,7 +84,6 @@ const MyGoodSchema = new Schema({ }, date_updated: { type: Date, - default: Date.now, }, }); diff --git a/src/server/models/myhosp.js b/src/server/models/myhosp.js index 9266158..0eb8c98 100755 --- a/src/server/models/myhosp.js +++ b/src/server/models/myhosp.js @@ -89,7 +89,6 @@ const MyHospSchema = new Schema({ }, date_updated: { type: Date, - default: Date.now, }, }); diff --git a/src/server/models/myskill.js b/src/server/models/myskill.js index 605a9ae..f2f89ed 100755 --- a/src/server/models/myskill.js +++ b/src/server/models/myskill.js @@ -87,7 +87,6 @@ const MySkillSchema = new Schema({ }, date_updated: { type: Date, - default: Date.now, }, }); diff --git a/src/server/models/sendnotif.js b/src/server/models/sendnotif.js index 9ce43a7..347a4e3 100755 --- a/src/server/models/sendnotif.js +++ b/src/server/models/sendnotif.js @@ -75,6 +75,9 @@ const sendNotifSchema = new Schema({ extrafield: { type: String, }, + extrarec: { + type: Object, + }, tag: { type: String, }, @@ -295,12 +298,16 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) { tag = 'addadmingrp'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_REMOVED_ADMIN) { if (userorig === recnotif.paramsObj.usernameDest) { - newdescr = i18n.__('CIRCUITS_REMOVED_ADMIN_YOU', recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.username_action); + newdescr = i18n.__('CIRCUIT_REMOVED_ADMIN_YOU', recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.username_action); } else { - newdescr = i18n.__('CIRCUITS_REMOVED_ADMIN', userorig, recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.username_action); + newdescr = i18n.__('CIRCUIT_REMOVED_ADMIN', userorig, recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.username_action); recnotif.openUrl = '/my/' + userorig; } tag = 'removeadmincircuit'; + } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) { + newdescr = i18n.__('CIRCUIT_SENDCOINSREQ', recnotif.paramsObj.username_action, recnotif.paramsObj.extrarec.qty, recnotif.paramsObj.extrarec.symbol); + tag = 'sendcoin'; + recnotif.openUrl = '/circuit/' + recnotif.paramsObj.path; //++Todo: dove lo mando ? } } @@ -543,6 +550,7 @@ sendNotifSchema.statics.getExtraParam = function(myrecnotif, paramsObj) { out.paramsObj = paramsObj; out.options = paramsObj.options ? paramsObj.options : []; out.typesend = paramsObj.typesend ? paramsObj.typesend : 0; + out.extrarec = paramsObj.extrarec ? paramsObj.extrarec : {}; if (myrecnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) { out.extrafield = paramsObj.circuitnameDest ? paramsObj.circuitnameDest : ''; } else if (myrecnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) { diff --git a/src/server/models/user.js b/src/server/models/user.js index 821c789..0a483da 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -1407,6 +1407,7 @@ UserSchema.statics.getUserProfileByUsername = async function( verified_by_aportador: 1, 'profile.nationality': 1, 'profile.mygroups': 1, + 'profile.mycircuits': 1, 'profile.qualifica': 1, 'profile.biografia': 1, 'profile.teleg_id': 1, @@ -1446,6 +1447,7 @@ UserSchema.statics.getUserProfileByUsername = async function( notask_verif: 1, 'profile.nationality': 1, 'profile.mygroups': 1, + 'profile.mycircuits': 1, 'profile.qualifica': 1, 'profile.biografia': 1, 'profile.teleg_id': 1, @@ -1928,7 +1930,7 @@ UserSchema.statics.countUsersInCircuit = async function(idapp, circuitname) { return User.countDocuments({ idapp, 'profile.mycircuits': { - $elemMatch: {circuitname: {$eq: name}}, + $elemMatch: {circuitname: {$eq: circuitname}}, }, }); @@ -2077,7 +2079,7 @@ UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameD return ris; }; -UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitname, cmd, value, username_action) { +UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitname, cmd, value, username_action, extrarec) { let ris = null; let update = {}; @@ -2108,7 +2110,7 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna } if (ris) { // Invia una notifica alla persona e agli Admin - tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, value, true, username_action); + tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, value, true, username_action, extrarec); ris = await Circuit.getInfoCircuitByName(idapp, circuitname); } } else if (cmd === shared_consts.CIRCUITCMD.REQ) { @@ -2135,14 +2137,14 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna } if (ris) { // Invia una notifica alla persona - await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, true, true, username_action); + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, true, true, username_action, extrarec); } } else { if (foundIfAlreadyAskCircuit) { ris = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo il Gruppo da me // Invia una notifica alla persona - await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action); + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); } } @@ -2157,7 +2159,7 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna console.log('ris', ris); // Invia una notifica alla persona - await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action); + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); } else if (cmd === shared_consts.CIRCUITCMD.DELETE) { @@ -2165,7 +2167,7 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna if (ris) { // Invia una notifica alla persona e agli Admin - await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action); + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); } ris = await Circuit.deleteCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me @@ -2184,13 +2186,23 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna ris = await Circuit.addToAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo // Invia una notifica alla persona - await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action); + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); } else if (cmd === shared_consts.CIRCUITCMD.REMOVEADMIN) { ris = await Circuit.removeAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo // Invia una notifica alla persona - await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action); + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); + + } else if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REQ) { + // Invia una notifica di moneta alla persona + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); + + } else if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT) { + ris = await Circuit.sendCoins(idapp, usernameOrig, extrarec); + + // Invia una notifica di moneta alla persona + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); } } catch (e) { @@ -2216,6 +2228,7 @@ function getWhatToShow(idapp, username) { notask_verif: 1, 'profile.nationality': 1, 'profile.mygroups': 1, + 'profile.mycircuits': 1, 'profile.qualifica': 1, 'profile.biografia': 1, 'profile.username_telegram': 1, @@ -3739,11 +3752,13 @@ UserSchema.statics.addExtraInfo = async function(idapp, recUser, req) { ? listManageGroups : []; - // Circuit + // Circuit> const circuitobj = await Circuit.getCircuitsByUsername(idapp, recUser.username, req); - recUser._doc.profile = {...recUser._doc.profile, ...circuitobj}; + const useraccounts = await Account.getUserAccounts(idapp, recUser.username); + + recUser._doc.profile = {...recUser._doc.profile, ...circuitobj, useraccounts}; return recUser._doc; diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 8fabd5e..4db8f94 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -31,6 +31,7 @@ const _ = require('lodash'); const {User} = require('../models/user'); const {MyGroup} = require('../models/mygroup'); +const {Circuit} = require('../models/circuit'); const {Booking} = require('../models/booking'); const {Operator} = require('../models/operator'); const {Where} = require('../models/where'); @@ -220,7 +221,12 @@ router.post('/testServer', authenticate_noerror, (req, res) => { router.post('/settable', authenticate, async (req, res) => { const params = req.body; const mytable = globalTables.getTableByTableName(params.table); - const mydata = req.body.data; + let mydata = req.body.data; + let extrarec = {}; + if (myapp.hasOwnProperty('extrarec')) { + extrarec = mydata['extrarec']; + delete mydata['extrarec']; + } const fieldsvalue = {'ALL': 1}; @@ -263,7 +269,6 @@ router.post('/settable', authenticate, async (req, res) => { } } - if (params.table === shared_consts.TAB_MYGROUPS) { if (shared_consts.MYGROUPS_KEY_TO_CRYPTED in mydata) { if (mydata[shared_consts.MYGROUPS_KEY_TO_CRYPTED]) { @@ -301,10 +306,11 @@ router.post('/settable', authenticate, async (req, res) => { } if (shared_consts.TABLES_ID_NUMBER.includes(params.table)) { + } else if (params.table === 'hours') { } else { - if (mydata['_id'] === undefined) { + if (mydata['_id'] === undefined || (mytablerec.isNew && mydata['_id'] === 0)) { mydata._id = new ObjectID(); } } @@ -362,7 +368,7 @@ router.post('/settable', authenticate, async (req, res) => { typedir = shared_consts.TypeNotifs.TYPEDIR_BACHECA; typeid = (params.table === shared_consts.TABLES_MYGOODS) ? shared_consts.TypeNotifs.ID_BACHECA_NEW_GOOD - : shared_consts.TypeNotifs.ID_BACHECA_NEW_SERVICE + : shared_consts.TypeNotifs.ID_BACHECA_NEW_SERVICE; setnotif = true; } @@ -402,12 +408,11 @@ router.post('/settable', authenticate, async (req, res) => { // nuovo Record: // aggiungi il creatore al Circuito stesso return User.setCircuitCmd(mydata.idapp, req.user.username, myrec.name, - shared_consts.CIRCUITCMD.SET, true, req.user.username).then((ris) => { + shared_consts.CIRCUITCMD.SET, true, req.user.username, extrarec).then((ris) => { return res.send(myrec); }); } - return res.send(myrec); }).catch((e) => { console.error('settable', e.message); @@ -1202,6 +1207,7 @@ function load(req, res, version) { let catgrps = CatGrp.findAllIdApp(idapp); let site = Site.findAllIdApp(idapp); let mygroups = MyGroup.findAllGroups(idapp); + let listcircuits = Circuit.findAllIdApp(idapp); // let cities = City.findAllIdApp(idapp); let provinces = Province.findAllIdApp(idapp); let cart = null; @@ -1268,6 +1274,7 @@ function load(req, res, version) { goods, site, mygroups, + listcircuits, // 37 ]).then((arrdata) => { // console.table(arrdata); let myuser = req.user; @@ -1347,6 +1354,7 @@ function load(req, res, version) { goods: arrdata[34], site: arrdata[35], mygroups: arrdata[36], + listcircuits: arrdata[37], }); } diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index b913a9c..283586c 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -719,6 +719,7 @@ router.post('/circuits/cmd', authenticate, (req, res) => { const circuitname = req.body.circuitname; const cmd = req.body.cmd; const value = req.body.value; + const extrarec = req.body.extrarec; /*if (!User.isAdmin(req.user.perm) || !User.isManager(req.user.perm)) { // If without permissions, exit @@ -728,7 +729,7 @@ router.post('/circuits/cmd', authenticate, (req, res) => { } }*/ - return User.setCircuitCmd(idapp, usernameOrig, circuitname, cmd, value, usernameLogged). + return User.setCircuitCmd(idapp, usernameOrig, circuitname, cmd, value, usernameLogged, extrarec). then((ris) => { res.send(ris); }). diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js index 09aacf3..f7c3ecc 100755 --- a/src/server/telegram/telegrambot.js +++ b/src/server/telegram/telegrambot.js @@ -878,7 +878,7 @@ const MyTelegramBot = { ]); } else if (myfunc === shared_consts.CallFunz.RICHIESTA_CIRCUIT) { - domanda = i18n.__({phrase: 'CIRCUIT_ACCEPT_NEWENTRY', locale: langdest} , groupname) + '
' + struserinfomsg; + domanda = i18n.__({phrase: 'CIRCUIT_ACCEPT_NEWENTRY', locale: langdest}, groupname) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { @@ -926,7 +926,7 @@ const MyTelegramBot = { sendnotif = true; typedir = shared_consts.TypeNotifs.TYPEDIR_FRIENDS; typeid = shared_consts.TypeNotifs.ID_FRIENDS_NEW_REC; - paramsObj = {usernameDest: userDest} + paramsObj = {usernameDest: userDest}; domanda = printf(tools.gettranslate('RICHIESTA_AMICIZIA', langdest), myuser.username) + '
' + struserinfomsg; @@ -948,7 +948,6 @@ const MyTelegramBot = { await this.local_sendMsgTelegramByIdTelegram(idapp, teleg_id, domanda, undefined, undefined, true, keyb); } - if (sendnotif) { const req = this.getReqByPar(idapp, username); // CREATE NOTIFICATION IN TABLE SENDNOTIF @@ -1675,9 +1674,10 @@ class Telegram { noanswer = true; let myfaq = this.geturlfaq(); risp = 'Ciao {username}, Io mi chiamo BOT e sono il tuo assistente Virtuale ' + emo.ROBOT_FACE + emo.JOY2 + '\n' + - 'Usa il menu qui sotto per interagire col BOT\n' + - '\nPer AIUTO, clicca qui:\n👉🏻👉🏻FAQ di AIUTO (risposte alle domande più frequenti)\n\nSe non trovi risposta allora contatta la Chat di HELP.\nGrazie'; + 'Usa il menu qui sotto per interagire col BOT\n' + + '\nPer AIUTO, clicca qui:\n👉🏻👉🏻FAQ di AIUTO (risposte alle domande più frequenti)\n\nSe non trovi risposta allora contatta la Chat di HELP.\nGrazie'; // risp += '\nClicca qui per entrare nella Chat - HELP di Supporto\n' + 'https://t.me/joinchat/AL2qKE80rxDkgbeMGO-0bw' + '\n\nI miei colleghi umani ti aiuteranno a risolvere !'; await local_sendMsgTelegramToTheManagers(this.idapp, testo, msg, rec.username_bo); @@ -3735,284 +3735,291 @@ if (true) { else if (process.env.NODE_ENV === 'test') arrTeleg = appTelegram_TEST; - console.log('TELEGRAM STARTING.... NODE_ENV:' + process.env.NODE_ENV); + var internetAvailable = require('internet-available'); + internetAvailable().then(() => { + // .. + console.log('TELEGRAM STARTING.... NODE_ENV:' + process.env.NODE_ENV); - for (const idapp of arrTeleg) { + for (const idapp of arrTeleg) { - try { - const token = tools.getTelegramKeyByIdApp(idapp); - const nomebot = tools.getTelegramBotNameByIdApp(idapp); + try { + const token = tools.getTelegramKeyByIdApp(idapp); + const nomebot = tools.getTelegramBotNameByIdApp(idapp); - // console.log('idapp', idapp, 'token', token); + // console.log('idapp', idapp, 'token', token); - if (!!token) { - console.log('*** START BOT ' + nomebot); - const bot = new TelegramBot(token, {polling: true}); + if (!!token) { + console.log('*** START BOT ' + nomebot); + const bot = new TelegramBot(token, {polling: true}); - if (url === '0') { - const ngrok = require('ngrok'); - ngrok.connect(port, function onConnect(error, u) { - if (error) throw error; - url = u; - console.log(`Game tunneled at ${url}`); - }); - } + if (url === '0') { + const ngrok = require('ngrok'); + ngrok.connect(port, function onConnect(error, u) { + if (error) throw error; + url = u; + console.log(`Game tunneled at ${url}`); + }); + } - arrTelegram.push({idapp, cl: new Telegram(idapp, bot)}); + arrTelegram.push({idapp, cl: new Telegram(idapp, bot)}); - bot.onText(/\/start/, (msg) => { - const myclTelegram = getclTelegBytoken(bot.token); - - myclTelegram.start(msg); - - }); - - // Matches "/echo [whatever]" - bot.onText(/\/echo (.+)/, (msg, match) => { - // 'msg' is the received Message from Telegram - // 'match' is the result of executing the regexp above on the text content - // of the message - - const chatId = msg.chat.id; - const resp = match[1]; // the captured "whatever" - - // send back the matched "whatever" to the chat - bot.sendMessage(chatId, resp); - }); - - // Listen for any kind of message. There are different kinds of - // messages. - bot.on('message', (msg) => { - - const myclTelegram = getclTelegBytoken(bot.token); - - // const chatId = msg.chat.id; - - myclTelegram.receiveMsg(msg); - }); - - // Handle callback queries - bot.on('callback_query', async (callbackQuery) => { - // console.log('callback_query', callbackQuery); - - try { + bot.onText(/\/start/, (msg) => { const myclTelegram = getclTelegBytoken(bot.token); - let dataarr = []; - let data = { - action: '', - username: '', - userDest: '', - groupId: 0, - }; + myclTelegram.start(msg); - const datastr = callbackQuery.data; - if (!!datastr) { - dataarr = datastr.split(tools.SEP); - if (!!dataarr) { - data = { - action: dataarr[0], - username: dataarr[1] ? dataarr[1] : '', - userDest: dataarr[2] ? dataarr[2] : '', - groupId: dataarr[3] ? parseInt(dataarr[3]) : '', - }; + }); + + // Matches "/echo [whatever]" + bot.onText(/\/echo (.+)/, (msg, match) => { + // 'msg' is the received Message from Telegram + // 'match' is the result of executing the regexp above on the text content + // of the message + + const chatId = msg.chat.id; + const resp = match[1]; // the captured "whatever" + + // send back the matched "whatever" to the chat + bot.sendMessage(chatId, resp); + }); + + // Listen for any kind of message. There are different kinds of + // messages. + bot.on('message', (msg) => { + + const myclTelegram = getclTelegBytoken(bot.token); + + // const chatId = msg.chat.id; + + myclTelegram.receiveMsg(msg); + }); + + // Handle callback queries + bot.on('callback_query', async (callbackQuery) => { + // console.log('callback_query', callbackQuery); + + try { + const myclTelegram = getclTelegBytoken(bot.token); + + let dataarr = []; + let data = { + action: '', + username: '', + userDest: '', + groupId: 0, + }; + + const datastr = callbackQuery.data; + if (!!datastr) { + dataarr = datastr.split(tools.SEP); + if (!!dataarr) { + data = { + action: dataarr[0], + username: dataarr[1] ? dataarr[1] : '', + userDest: dataarr[2] ? dataarr[2] : '', + groupId: dataarr[3] ? parseInt(dataarr[3]) : '', + }; + } } - } - const msg = callbackQuery.message; - const opts = { - chat_id: msg.chat.id, - message_id: msg.message_id, - }; + const msg = callbackQuery.message; + const opts = { + chat_id: msg.chat.id, + message_id: msg.message_id, + }; - const status = await myclTelegram.setInit(msg); + const status = await myclTelegram.setInit(msg); - const rec = myclTelegram.getRecInMem(msg); + const rec = myclTelegram.getRecInMem(msg); - const username_action = rec.user ? rec.user.username : ''; + const username_action = rec.user ? rec.user.username : ''; - data.username = await User.getRealUsernameByUsername(idapp, data.username); - data.userDest = await User.getRealUsernameByUsername(idapp, data.userDest); + data.username = await User.getRealUsernameByUsername(idapp, data.username); + data.userDest = await User.getRealUsernameByUsername(idapp, data.userDest); - const user = await User.getUserShortDataByUsername(idapp, data.username); - const userDest = data.userDest ? await User.getUserShortDataByUsername(idapp, data.userDest) : null; + const user = await User.getUserShortDataByUsername(idapp, data.username); + const userDest = data.userDest ? await User.getUserShortDataByUsername(idapp, data.userDest) : null; - let group = null; - let circuit = null; - if (data.groupId) { - group = await MyGroup.findOne({idapp, _id: data.groupId}).lean(); - } - if (data.circuitId) { - circuit = await Circuit.findOne({idapp, _id: data.circuitId}).lean(); - } + let group = null; + let circuit = null; + if (data.groupId) { + group = await MyGroup.findOne({idapp, _id: data.groupId}).lean(); + } + if (data.circuitId) { + circuit = await Circuit.findOne({idapp, _id: data.circuitId}).lean(); + } - let cmd = 0; + let cmd = 0; - if (!!rec) { - if (!!user) { - if (data.action === InlineCmd.VOGLIO_IMBARCARMI) { - // Controlla se è qualificato! - const mydata = tools.AddDate(user.date_reg, 7); + if (!!rec) { + if (!!user) { + if (data.action === InlineCmd.VOGLIO_IMBARCARMI) { + // Controlla se è qualificato! + const mydata = tools.AddDate(user.date_reg, 7); - // bot.editMessageText(tools.gettranslate('ADDED_TOLISTAINGRESSO', user.lang), opts); + // bot.editMessageText(tools.gettranslate('ADDED_TOLISTAINGRESSO', user.lang), opts); - } else if (data.action === InlineCmd.NON_VOGLIO_IMBARCARMI) { - await User.NonVoglioImbarcarmi(user.idapp, user.username); + } else if (data.action === InlineCmd.NON_VOGLIO_IMBARCARMI) { + await User.NonVoglioImbarcarmi(user.idapp, user.username); - const msgadd = '[' + user.username + '] ' + user.name + ' ' + - user.surname + ' ha risposto che NON VUOLE IMBARCARSI !'; + const msgadd = '[' + user.username + '] ' + user.name + ' ' + + user.surname + ' ha risposto che NON VUOLE IMBARCARSI !'; - await local_sendMsgTelegramToTheManagers(user.idapp, msgadd, - msg, false); // Anche a STAFF - } else if (data.action === - InlineZoomConferma.CONFERMA_ZOOM_PRESENZA) { + await local_sendMsgTelegramToTheManagers(user.idapp, msgadd, + msg, false); // Anche a STAFF + } else if (data.action === + InlineZoomConferma.CONFERMA_ZOOM_PRESENZA) { - await User.setZoomPresenza(user.idapp, user._id, true); + await User.setZoomPresenza(user.idapp, user._id, true); - } else if (data.action === - InlineZoomConferma.NON_CONFERMA_ZOOM_PRESENZA) { + } else if (data.action === + InlineZoomConferma.NON_CONFERMA_ZOOM_PRESENZA) { - await User.setZoomPresenza(user.idapp, user._id, false); + await User.setZoomPresenza(user.idapp, user._id, false); - } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.REGISTRATION) { - const changed = await myclTelegram.setCmdToUsername(rec, - data.username, - Cmd.VALIDATE_REGISTRATION, true); - - if (changed) { - const req = tools.getReqByPar(user.idapp, username_action); - await User.setFriendsCmd(req, user.idapp, data.username, userDest.username, shared_consts.FRIENDSCMD.SETFRIEND); - - await User.setaportador_solidario(user.idapp, data.username, userDest.username); - - const msgOrig = printf(getstr(userDest.lang, 'MSG_APORTADOR_DEST_CONFIRMED'), `${userDest.username}`, - tools.getHostByIdApp(user.idapp)); - const msgDest = printf(getstr(user.lang, 'MSG_APORTADOR_CONFIRMED'), `${user.username}`, `${userDest.username}`); - - await local_sendMsgTelegram(user.idapp, data.username, msgOrig); - await local_sendMsgTelegram(user.idapp, data.userDest, msgDest); - } - - } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.REGISTRATION) { - if (userDest.username === user.aportador_solidario) { - const changed = await myclTelegram.setCmdToUsername(rec, data.username, - Cmd.VALIDATE_REGISTRATION, false); + } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.REGISTRATION) { + const changed = await myclTelegram.setCmdToUsername(rec, + data.username, + Cmd.VALIDATE_REGISTRATION, true); if (changed) { - const nomeDest = tools.getNomeCognomeEUserNameByUser(userDest); - const nomestr = tools.getNomeCognomeEUserNameByUser(user); + const req = tools.getReqByPar(user.idapp, username_action); + await User.setFriendsCmd(req, user.idapp, data.username, userDest.username, shared_consts.FRIENDSCMD.SETFRIEND); - const msgOrig = printf(getstr(userDest.lang, 'MSG_APORTADOR_DEST_NOT_CONFIRMED', nomeDest)); - const msgDest = printf(getstr(user.lang, 'MSG_APORTADOR_NOT_CONFIRMED'), nomestr); + await User.setaportador_solidario(user.idapp, data.username, userDest.username); + + const msgOrig = printf(getstr(userDest.lang, 'MSG_APORTADOR_DEST_CONFIRMED'), `${userDest.username}`, + tools.getHostByIdApp(user.idapp)); + const msgDest = printf(getstr(user.lang, 'MSG_APORTADOR_CONFIRMED'), `${user.username}`, `${userDest.username}`); await local_sendMsgTelegram(user.idapp, data.username, msgOrig); await local_sendMsgTelegram(user.idapp, data.userDest, msgDest); } - } - } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_GRUPPO) { - if (group) { - cmd = shared_consts.GROUPSCMD.SETGROUP; - const foundIfAlreadyGroup = await User.ifAlreadyInGroup(user.idapp, data.username, group.groupname); + } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.REGISTRATION) { + if (userDest.username === user.aportador_solidario) { + const changed = await myclTelegram.setCmdToUsername(rec, data.username, + Cmd.VALIDATE_REGISTRATION, false); - if (!foundIfAlreadyGroup) { - // Aggiungilo nel Gruppo - await User.setGroupsCmd(user.idapp, data.username, group.groupname, cmd, 0, username_action); - } + if (changed) { + const nomeDest = tools.getNomeCognomeEUserNameByUser(userDest); + const nomestr = tools.getNomeCognomeEUserNameByUser(user); - } - } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_GRUPPO) { - - if (group) { - cmd = shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP; - const foundIfAlreadyGroup = await User.ifAlreadyInGroup(user.idapp, data.username, group.groupname); - - if (foundIfAlreadyGroup) { - // Rimuovilo nel Gruppo - await User.setGroupsCmd(user.idapp, data.username, group.groupname, cmd, 0, username_action); - } - - } - } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_CIRCUIT) { - - if (circuit) { - cmd = shared_consts.CIRCUITCMD.SET; - const foundIfAlreadyCircuit = await User.ifAlreadyInCircuit(user.idapp, data.username, circuit.name); - - if (!foundIfAlreadyCircuit) { - // Aggiungilo nel Gruppo - await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action); - } - - } - } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_CIRCUIT) { - - if (circuit) { - cmd = shared_consts.CIRCUITCMD.REMOVE_FROM_MYLIST; - const foundIfAlreadyCircuit = await User.ifAlreadyInCircuit(user.idapp, data.username, circuit.name); - - if (foundIfAlreadyCircuit) { - // Rimuovilo nel Circuito - await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action); - } - - } - } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_AMICIZIA) { - - if (userDest) { - cmd = shared_consts.FRIENDSCMD.SETFRIEND; - const foundIfAlreadyFriend = await User.isMyFriend(user.idapp, data.username, data.userDest); - - if (!foundIfAlreadyFriend) { - // Aggiungilo nelle Amicizie - const req = tools.getReqByPar(user.idapp, username_action); - const ris = await User.setFriendsCmd(req, user.idapp, data.username, data.userDest, cmd); - - } - - } - } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_AMICIZIA) { - - if (userDest) { - cmd = shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS; - const foundIfAlreadyFriend = await User.isMyFriend(user.idapp, data.username, data.userDest); - - if (foundIfAlreadyFriend) { - // Aggiungilo nelle Amicizie - const ris = await User.setFriendsCmd(req, user.idapp, data.username, data.userDest, cmd); - if (ris) { - const msgDest = printf(getstr(user.lang, 'MSG_FRIENDS_NOT_ACCEPTED_CONFIRMED'), data.username); + const msgOrig = printf(getstr(userDest.lang, 'MSG_APORTADOR_DEST_NOT_CONFIRMED', nomeDest)); + const msgDest = printf(getstr(user.lang, 'MSG_APORTADOR_NOT_CONFIRMED'), nomestr); + await local_sendMsgTelegram(user.idapp, data.username, msgOrig); await local_sendMsgTelegram(user.idapp, data.userDest, msgDest); } + } + } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_GRUPPO) { + + if (group) { + cmd = shared_consts.GROUPSCMD.SETGROUP; + const foundIfAlreadyGroup = await User.ifAlreadyInGroup(user.idapp, data.username, group.groupname); + + if (!foundIfAlreadyGroup) { + // Aggiungilo nel Gruppo + await User.setGroupsCmd(user.idapp, data.username, group.groupname, cmd, 0, username_action); + } } + } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_GRUPPO) { + if (group) { + cmd = shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP; + const foundIfAlreadyGroup = await User.ifAlreadyInGroup(user.idapp, data.username, group.groupname); + + if (foundIfAlreadyGroup) { + // Rimuovilo nel Gruppo + await User.setGroupsCmd(user.idapp, data.username, group.groupname, cmd, 0, username_action); + } + + } + } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_CIRCUIT) { + + if (circuit) { + cmd = shared_consts.CIRCUITCMD.SET; + const foundIfAlreadyCircuit = await User.ifAlreadyInCircuit(user.idapp, data.username, circuit.name); + + if (!foundIfAlreadyCircuit) { + // Aggiungilo nel Gruppo + await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action); + } + + } + } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_CIRCUIT) { + + if (circuit) { + cmd = shared_consts.CIRCUITCMD.REMOVE_FROM_MYLIST; + const foundIfAlreadyCircuit = await User.ifAlreadyInCircuit(user.idapp, data.username, circuit.name); + + if (foundIfAlreadyCircuit) { + // Rimuovilo nel Circuito + await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action); + } + + } + } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_AMICIZIA) { + + if (userDest) { + cmd = shared_consts.FRIENDSCMD.SETFRIEND; + const foundIfAlreadyFriend = await User.isMyFriend(user.idapp, data.username, data.userDest); + + if (!foundIfAlreadyFriend) { + // Aggiungilo nelle Amicizie + const req = tools.getReqByPar(user.idapp, username_action); + const ris = await User.setFriendsCmd(req, user.idapp, data.username, data.userDest, cmd); + + } + + } + } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_AMICIZIA) { + + if (userDest) { + cmd = shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS; + const foundIfAlreadyFriend = await User.isMyFriend(user.idapp, data.username, data.userDest); + + if (foundIfAlreadyFriend) { + // Aggiungilo nelle Amicizie + const ris = await User.setFriendsCmd(req, user.idapp, data.username, data.userDest, cmd); + if (ris) { + const msgDest = printf(getstr(user.lang, 'MSG_FRIENDS_NOT_ACCEPTED_CONFIRMED'), data.username); + + await local_sendMsgTelegram(user.idapp, data.userDest, msgDest); + } + + } + + } } } } + } catch (e) { + console.error('Error BOT callback_query', e); } - } catch (e) { - console.error('Error BOT callback_query', e); - } - /* - let text; + /* + let text; - if (action === 'edit') { - text = 'Edited Text'; - } + if (action === 'edit') { + text = 'Edited Text'; + } - bot.editMessageText(text, opts); - */ + bot.editMessageText(text, opts); + */ - // bot.answerCallbackQuery(callbackQuery.id, { url }); - }); + // bot.answerCallbackQuery(callbackQuery.id, { url }); + }); + } + } catch (e) { + console.error('Error Telegram LOOP : ' + e.message); } - } catch (e) { - console.error('Error Telegram LOOP : ' + e.message); } - } + }).catch(() => { + arrTeleg = []; + }); + } module.exports = MyTelegramBot; diff --git a/src/server/tools/general.js b/src/server/tools/general.js index 9ff04a3..7d830fa 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -965,7 +965,7 @@ module.exports = { let typedir = shared_consts.TypeNotifs.TYPEDIR_GROUPS; let typeid = 0; let onlysave = false; - let name = await User.countUsersInGroup(idapp, groupname); + let numuseringroup = await User.countUsersInGroup(idapp, groupname); if (cmd) { if (cmd === shared_consts.GROUPSCMD.SETGROUP) { @@ -1006,7 +1006,8 @@ module.exports = { }, sendNotifCircuitByUsername: async function( - cmd, idapp, usernameOrig, usernameDest, username_action, circuitname, path, myreccircuit, isAdmin, username_worked) { + cmd, idapp, usernameOrig, usernameDest, username_action, + circuitname, path, myreccircuit, isAdmin, username_worked, extrarec) { const {SendNotif} = require('../models/sendnotif'); const {User} = require('../models/user'); @@ -1016,57 +1017,65 @@ module.exports = { const user = await User.findOne({idapp, username: usernameDest}, {_id: 1, lang: 1}); - if (user) { - let lang = user.lang; - let paramsObj = { - usernameDest, - circuitnameDest: circuitname, - path, - username_action: username_action, - singleadmin_username: usernameDest, - options: 0, - lang, - isAdmin, - username_worked, - }; + try { + if (user) { - let sendnotif = true; - let typedir = shared_consts.TypeNotifs.TYPEDIR_CIRCUITS; - let typeid = 0; - let onlysave = false; - let numuserincircuit = await User.countUsersInCircuit(idapp, circuitname); + let lang = user.lang; + let paramsObj = { + usernameDest, + circuitnameDest: circuitname, + path, + username_action: username_action, + singleadmin_username: usernameDest, + extrarec, + options: 0, + lang, + isAdmin, + username_worked, + }; - if (cmd) { - if (cmd === shared_consts.CIRCUITCMD.SET) { - if (myreccircuit && myreccircuit.createdBy === usernameDest && numuserincircuit <= 1) { - typeid = shared_consts.TypeNotifs.ID_CIRCUIT_NEW_REC; - } else { - typeid = shared_consts.TypeNotifs.ID_CIRCUIT_ACCEPTED; + let sendnotif = true; + let typedir = shared_consts.TypeNotifs.TYPEDIR_CIRCUITS; + let typeid = 0; + let onlysave = false; + let numuserincircuit = await User.countUsersInCircuit(idapp, circuitname); + + if (cmd) { + if (cmd === shared_consts.CIRCUITCMD.SET) { + if (myreccircuit && myreccircuit.createdBy === usernameDest && numuserincircuit <= 1) { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_NEW_REC; + } else { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_ACCEPTED; + } + } else if (cmd === shared_consts.CIRCUITCMD.REFUSE_REQ) { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REFUSED; + } else if (cmd === shared_consts.CIRCUITCMD.REMOVE_FROM_MYLIST) { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REMOVED; + } else if (cmd === shared_consts.CIRCUITCMD.REQ) { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REQUEST_TO_ENTER; + // paramsObj.options = MessageOptions.Notify_OnlyToNotifinApp + MessageOptions.Notify_ByBotTelegram; + const myuserdata = await User.getUserShortDataByUsername(idapp, username_action); + telegrambot.askConfirmationUser(idapp, shared_consts.CallFunz.RICHIESTA_CIRCUIT, myuserdata, usernameDest, circuitname, + myreccircuit._id); + onlysave = false; + } else if (cmd === shared_consts.CIRCUITCMD.ADDADMIN) { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_ADDED_ADMIN; + } else if (cmd === shared_consts.CIRCUITCMD.REMOVEADMIN) { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REMOVED_ADMIN; + } else if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REQ) { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ; } - } else if (cmd === shared_consts.CIRCUITCMD.REFUSE_REQ) { - typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REFUSED; - } else if (cmd === shared_consts.CIRCUITCMD.REMOVE_FROM_MYLIST) { - typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REMOVED; - } else if (cmd === shared_consts.CIRCUITCMD.REQ) { - typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REQUEST_TO_ENTER; - // paramsObj.options = MessageOptions.Notify_OnlyToNotifinApp + MessageOptions.Notify_ByBotTelegram; - const myuserdata = await User.getUserShortDataByUsername(idapp, username_action); - telegrambot.askConfirmationUser(idapp, shared_consts.CallFunz.RICHIESTA_CIRCUIT, myuserdata, usernameDest, circuitname, - myreccircuit._id); - onlysave = false; - } else if (cmd === shared_consts.CIRCUITCMD.ADDADMIN) { - typeid = shared_consts.TypeNotifs.ID_CIRCUIT_ADDED_ADMIN_OFMYGROUP; - } else if (cmd === shared_consts.CIRCUITCMD.REMOVEADMIN) { - typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REMOVED_ADMIN_OFMYGROUP; + } + if (sendnotif && typeid > 0) { + // CREATE NOTIFICATION IN TABLE SENDNOTIF + await SendNotif.createNewNotifToSingleUser(req, null, paramsObj, onlysave, typedir, typeid); + } } - - if (sendnotif && typeid > 0) { - // CREATE NOTIFICATION IN TABLE SENDNOTIF - await SendNotif.createNewNotifToSingleUser(req, null, paramsObj, onlysave, typedir, typeid); - } + } catch (e) { + console.log(e.message); } }, @@ -1108,7 +1117,7 @@ module.exports = { }, - sendNotificationByCircuit: async function(idapp, usernameOrig, circuitname, cmd, value, telegram, username_action) { + sendNotificationByCircuit: async function(idapp, usernameOrig, circuitname, cmd, value, telegram, username_action, extrarec) { const {Circuit} = require('../models/circuit'); const {User} = require('../models/user'); @@ -1121,25 +1130,35 @@ module.exports = { try { // SEND TO THE ADMINS THE NOTIFICATIONS - for (const singleadmin of circuit.admins) { - try { - if (singleadmin.username) { - if (usernameOrig === singleadmin.username) - giainviato = true; - await this.sendNotifCircuitByUsername(cmd, idapp, usernameOrig, singleadmin.username, username_action, circuitname, - circuit.path, circuit, true); + if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REQ) { + await this.sendNotifCircuitByUsername(cmd, idapp, usernameOrig, extrarec.dest, username_action, circuitname, circuit.path, null, + false, '', extrarec); + + } else { + + for (const singleadmin of circuit.admins) { + try { + if (singleadmin.username) { + if (usernameOrig === singleadmin.username) + giainviato = true; + + await this.sendNotifCircuitByUsername(cmd, idapp, usernameOrig, singleadmin.username, username_action, circuitname, + circuit.path, circuit, true, '', extrarec); + } + } catch (e) { + console.error('sendNotificationByCircuit', e); } - } catch (e) { - console.error('sendNotificationByCircuit', e); + } + + if (!giainviato && cmd !== shared_consts.CIRCUITCMD.REQ) { + // SEND TO THE USER DEST THE NOTIFICATION + await this.sendNotifCircuitByUsername(cmd, idapp, usernameOrig, usernameOrig, username_action, circuitname, circuit.path, null, + false, '', extrarec); } } - if (!giainviato && (cmd !== shared_consts.CIRCUITCMD.REQ)) { - // SEND TO THE USER THE NOTIFICATION - await this.sendNotifCircuitByUsername(cmd, idapp, usernameOrig, usernameOrig, username_action, circuitname, circuit.path, null, - false); - } + } catch (e) { console.error('sendNotificationByCircuit: ', e); @@ -1550,6 +1569,14 @@ module.exports = { }, }, }; + } else if (shared_consts.TABLES_NUM_AS_ID_NUMBER.includes(params.table)) { + myquery = { + $match: { + $expr: { + $eq: ['$Num', params.myid], + }, + }, + }; } else { myquery = { $match: { @@ -1557,7 +1584,7 @@ module.exports = { $eq: ['$_id', mongoose.Types.ObjectId(params.myid)], }, }, - } + }; } diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 4364290..1c47b26 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -76,6 +76,9 @@ module.exports = { DELETE: 2170, ADDADMIN: 2180, REMOVEADMIN: 2185, + SENDCOINS_REQ: 2200, + SENDCOINS_ACCEPT: 2210, + SENDCOINS_REFUSE: 2220, }, REPORT_FILT_RESP: 1, @@ -132,6 +135,8 @@ module.exports = { TABLES_GROUPS_NOTIFICATION: ['mygroups'], TABLES_CIRCUITS_NOTIFICATION: ['circuits'], + TABLES_NUM_AS_ID_NUMBER: [ 'circuits' ], + TABLES_ID_NUMBER: [ 'permissions', 'levels', @@ -379,6 +384,7 @@ module.exports = { ID_CIRCUIT_REMOVED: 64, ID_CIRCUIT_ADDED_ADMIN: 128, ID_CIRCUIT_REMOVED_ADMIN: 256, + ID_CIRCUIT_SENDCOINSREQ: 512, TYPEDIR_BOOKING: 6, diff --git a/yarn.lock b/yarn.lock index 058ba7f..8b145e8 100755 --- a/yarn.lock +++ b/yarn.lock @@ -3000,6 +3000,21 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== +dns-packet@^1.1.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-socket@^1.6.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/dns-socket/-/dns-socket-1.6.3.tgz#5268724fad4aa46ad9c5ca4ffcd16e1de5342aab" + integrity sha512-/mUy3VGqIP69dAZjh2xxHXcpK9wk2Len1Dxz8mWAdrIgFC8tnR/aQAyU4a+UTXzOcTvEvGBdp1zFiwnpWKaXng== + dependencies: + dns-packet "^1.1.0" + doctypes@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" @@ -4742,6 +4757,13 @@ inline-css@^3.0.0: slick "^1.12.2" specificity "^0.4.1" +internet-available@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/internet-available/-/internet-available-1.0.0.tgz#6b83ed3ef7a053fd24c6dd3dcd153e8557e197c2" + integrity sha512-jjQa6/nRKU01TlMDL4Ksxtp409PHhnTMByz8/9leJLh1xxO2Dpi6gRNH5UrDi7nW2oaluJWN7VX2IXcxsoER6A== + dependencies: + dns-socket "^1.6.1" + interpret@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" @@ -4757,6 +4779,11 @@ ip-regex@^1.0.1: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0= +ip@^1.1.0: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"