const tools = require('../tools/general'); const appTelegram = [tools.FREEPLANET, tools.RISO]; const appTelegram_TEST = [tools.FREEPLANET, tools.RISO]; //const appTelegram_DEVELOP = [tools.RISO]; const appTelegram_DEVELOP = [tools.PIUCHEBUONO]; const appTelegramFinti = ['2', tools.CNM]; const appTelegramDest = [tools.FREEPLANET, tools.FREEPLANET]; const appTeleg_BotOnGroup = [tools.IDAPP_BOTONGROUP]; const path = require('path'); const fs = require('fs'); //PIPPO const printf = require('util').format; const { User, FuncUsers } = require('../models/user'); const { MyGroup } = require('../models/mygroup'); const { Circuit } = require('../models/circuit'); const { CalZoom } = require('../models/calzoom'); const { MyBot } = require('../models/bot'); const shared_consts = require('../tools/shared_nodejs'); const sharp = require('sharp'); const axios = require('axios'); const server_constants = require('../tools/server_constants'); // const {ListaIngresso} = require('../models/listaingresso'); const { MsgTemplate } = require('../models/msg_template'); const i18n = require('i18n'); let url = process.env.URL || 'https://'; const Benvenuto = '💓💓💓 Benvenuto/a!'; const emo = { JOY: '😂', JOY2: '🤣', DANCER: '💃', STARS: '✨', FIRE: '🔥', SUN: '☀️', TV: '📺', NEWSPAPER: '🗞', KISS: '😘', PENCIL: '✏️', DREAM: '🏖', EYES: '😜', DIZZY: '💫', ONE_HUNDRED: '💯', SMILE_STAR: '🤩', // Star-struck LEFT_FACING_FIST: '🤛', // Left-facing fist CHECK_VERDE: '✅', // White check mark (verde) CHECK_GRIGIA: '☑️', // Ballot box with check (grigia) CROSS_ROSSA: '❌', // X (rossa) ENVELOPE: '✉️', // Envelope EXCLAMATION_MARK: '❗', // Exclamation mark QUESTION_MARK: '❓', // Question mark ARROW_RIGHT: '➡️', // Arrow pointing to the right INVITATI: '', HEART: '❤️', BLUE_HEART: '💙', GREEN_HEART: '💚', YELLOW_HEART: '💛', PURPLE_HEART: '💜', GIFT_HEART: '💝', GIFT: '🎁', ROBOT_FACE: '🤖', ADMIN: '💁', MALE: '💁‍♂️', FEMALE: '👩‍🦱', INNOCENT: '😇', CREDIT_CARD: '💳', PERSON: '🧑', }; MsgBot = { OK: ['si', 'ok'], CUORE: ['❤️', '💚️', '💜'], CIAO: ['ciao', 'ciaoo', 'hola', 'holaa', 'hey', 'salve', 'buongiorno', 'buondi', 'ciao ❤️'], CI_SEI: ['ci sei', "c'è qualcuno", "c'è nessuno"], CHI_SONO_IO: ['chi sono io', 'chi sono'], COME_STAI: ['tutto bene', 'come stai', 'come stai', 'come va', 'come butta', 'come va oggi'], COME_TI_CHIAMI: [ 'chi sei', 'come ti chiami', "qual'è il tuo nome", "qual'e' il tuo nome", 'che lavoro fai', 'di cosa ti occupi', ], COSA_FAI: ['cosa fai', 'cosa combini', 'che fai'], QUANTI_ANNI_HAI: ['quanti anni hai', 'che età hai'], SEI_LIBERO_STASERA: [ 'sei libera stasera', 'sei libero stasera', 'usciamo insieme', "fare l'amore con me", 'fare sesso', 'vuoi scopare', 'vuoi trombare', ], MI_TROVI_UN_MOROSO: [ 'trovi un moroso', 'una morosa', 'fidanzato', 'fidanzata', 'trovi un marito', 'trovi una moglie', ], CHAT_EMPOWER: ['chat empower'], MASCHIO_FEMMINA: ['sei uomo o donna', 'sei maschio o femmina', 'sei ragazzo o ragazza', 'che sesso hai'], DAMMI_UN_BACIO: ['dammi un bacio', 'baciami'], HAHA: ['hahaha', 'ahah', '😂'], MI_AMI: ['mi ami'], TI_AMO: ['ti amo', 'ti adoro', 'ti lovvo'], PREGO: ['prego', 'Prego ! 💋💋💋'], GRAZIE: ['grazie ainy', 'grazie', 'grazie mille', 'graziee', 'grazie ❤', 'grazie️❤', 'grazie 😘', 'grazie😘'], PRINCIPE_AZZURRO: ['principe azzurro'], START_INV: ['/start inv'], COSE_COVID: ["cos'è il covid", 'cosa è il covid'], COVID: ['covid'], SPOSAMI: ['sposami', 'vuoi sposar', 'sei sposat', 'ci sposiamo', 'ti sposo', 'sei sposat', 'mi sposi'], CHE_TEMPO_FA: ['che tempo'], NON_TROO_INVITATI: ['non trovo invitati', 'non riesco a trovare invitati'], TROVAMI_UN_UOMO_DONNA: ['trovami un uomo', 'trovami una donna', 'esiste una donna per me', 'esiste un uomo per me'], PAROLACCE: ['stronz', 'fanculo', 'fottiti', 'cagare', 'ammazzat', 'muori', 'cretino', 'stupido'], COME_SI_CHIAMA: ['come si chiama'], PROSSIMO_ZOOM: ['prossimo zoom', 'fare lo zoom', 'gli zoom', 'conferenz', 'zoom'], LAVAGNA: ['lavagna', 'Lavagna', 'LAVAGNA'], SEI_LIBERO_DI_RESPIRARE: ['sei libero di respirare'], SEI_LIBERO: ['sei liber', 'sei sposat', 'sei fidanzat', 'sei single'], AIUTO: [ 'help', 'aiuto', 'ho bisogno di', 'ho problemi', 'non riesco', 'mi puoi aiutare', 'mi aiuti', 'aiutami', 'posso chiederti', 'puoi aiutarmi', ], UOMO: ['uomo', 'maschio'], SORPRESA: ['noo', 'davvero', 'sii', 'facciamo festa', 'è qui la festa', 'festa'], UGUALE: ['👍🏻', '✨', '❤🏻', '⭐', '❤', '❤❤', '🤩'], SI: ['si', 'yes'], NO: ['no', 'noo'], DONNA: ['donna', 'femmina'], FARE_DOMANDA: ['fare una domanda', 'posso farti una domanda'], DIVENTERO_RICCA: ['diventerò ricc'], DOVE_VUOI_VIVERE: ['dove vuoi vivere'], MA_ALLORA: ['ma allora'], }; const MsgRisp = { CHAT_EMPOWER: 'Entra nella Chat EMPOWER !!!\n' + 'https://t.me/joinchat/C741mkx5QYXu-kyYCYvA8g ' + emo.PURPLE_HEART + emo.GIFT_HEART + emo.BLUE_HEART, }; function getemojibynumber(number) { if (number === 0) { return '0️⃣'; // zero } else if (number === 1) { return '1️⃣'; // one } else if (number === 2) { return '2️⃣'; // two } else if (number === 3) { return '3️⃣'; // three } else if (number === 4) { return '4️⃣'; // four } else if (number === 5) { return '5️⃣'; // five } else if (number === 6) { return '6️⃣'; // six } else if (number === 7) { return '7️⃣'; // seven } else if (number === 8) { return '8️⃣'; // eight } else if (number === 9) { return '9️⃣'; // nine } else { return number; } } const Menu = { LANG_IT: '🇮🇹 Italiano', // Bandiera italiana LANG_EN: '🇬🇧 English', // Bandiera del Regno Unito LANG_ES: '🇪🇸 Español', // Bandiera spagnola LANG_FR: '🇫🇷 Français', // Bandiera francese LANG_SI: '🇸🇮 Slovenski', // Bandiera slovena LANG_PT: '🇵🇹 Português', // Bandiera portoghese LANG: '🌐 Language', // Globo con meridiani CHAT_PERSONALE: '👩‍💼💻', // Donna impiegata + computer EXIT_TELEGRAM: 'exittotelegram', MSG_TO_USER: 'sendmsgto', ADMIN: '💁‍♀️ Admin', // Persona al banco informazioni AIUTO: '🔮 Help', // Cristallo magico ALTRO: '📰 Altro', // Giornale SETPICPROFILE: '🖼 SetPicProfile', // Cornice con foto RESETPWD: '🔑 SetResetPwd', // Chiave MSG_SI_INVITATI_NO_7REQ_INVITATI: '📩Inv e NO 7 Req', // Busta MSGSTAFF: '📩 Invia a STAFF', // Busta MSGAPPARTIENE_CIRCUITI_RIS: 'Invia a Utenti dei Circuiti RIS', MSGPAOLO: '📩 Invia a SURYA', // Busta RESTART_SRV: '📩Restart-NodeJs', // Busta REBOOT_SRV: '📩Reboot-VPS!', // Busta EXECSH: '📩ExecSH', // Busta LOG_SRV: '🖥Logserver.sh', // Monitor MSGATUTTI: '📩 Invia a TUTTI', // Busta it: { ACCEDI: '👤 Accedi', // Persona LAVAGNA: '🕉 Lavagna', // Simbolo Om LINK_CONDIVIDERE: '🔗 Link da condividere', // Link ZOOM: 'ℹ️ Zoom (Conferenze)', // Informazione INFO: 'ℹ️ Informazioni', // Informazione ASSISTENZA: '👐 Le Chat', // Mani aperte INDIETRO: '🔙 Indietro', // Freccia indietro SI: '👍 SI', // Pollice su NO: '👎 NO', // Pollice giù ESCI_DA_CHAT: '📩 Esci dalla Conversazione', // Busta NUOVOSITO: '', }, es: { ACCEDI: '👤 Entra', LAVAGNA: '🕉 Tablero', LINK_CONDIVIDERE: '🔗 Enlaces para compartir', ZOOM: 'ℹ️ Zoom (Conferencias)', INFO: 'ℹ️ Información', ASSISTENZA: '👐 Chats', INDIETRO: '🔙 Volver', SI: '👍 SÍ', NO: '👎 NO', ESCI_DA_CHAT: '📩 Salir de la conversación', }, fr: { ACCEDI: '👤 Entrez', LAVAGNA: '🕉 Tableau de bord', LINK_CONDIVIDERE: '🔗 Liens à partager', ZOOM: 'ℹ️ Zoom (Conférences)', INFO: 'ℹ️ Informations', ASSISTENZA: '👐 Les chats', INDIETRO: '🔙 Retour', SI: '👍 OUI', NO: '👎 NON', ESCI_DA_CHAT: '📩 Quitter la conversation', }, si: { ACCEDI: '👤 Prijava', LAVAGNA: '🕉 Tabla', LINK_CONDIVIDERE: '🔗 Link za vpis oseb', ZOOM: 'ℹ️ Zoom (Konference)', INFO: 'ℹ️ Informacije', ASSISTENZA: '👐 jev klepet', INDIETRO: '🔙 Nazaj', SI: '👍 DA', NO: '👎 NE', ESCI_DA_CHAT: '📩 Zaprite pogovor', }, pt: { ACCEDI: '👤 Entre', LAVAGNA: '🕉 Tablero', LINK_CONDIVIDERE: '🔗 Links para compartilhar', ZOOM: 'ℹ️ Zoom (Conferências)', INFO: 'ℹ️ Informações', ASSISTENZA: '👐 Chats', INDIETRO: '🔙 Voltar', SI: '👍 SIM', NO: '👎 NÃO', ESCI_DA_CHAT: '📩 Sair da Conversa', }, enUs: { ACCEDI: '👤 Enter', LAVAGNA: '🕉 DashBoard', LINK_CONDIVIDERE: '🔗 Link to Share', ZOOM: 'ℹ️ Zoom (Conference)', INFO: 'ℹ️ Info', ASSISTENZA: '👐 Chats', INDIETRO: '🔙 Back', SI: '👍 YES', NO: '👎 NO', ESCI_DA_CHAT: '📩 Exit to the Conversation', }, }; const CONTA_SOLO = 'contasolo'; const RICEVI_EMAIL = 'riceviemail'; const NOME_COGNOME = 'nomecognome'; const CHEDI_SE_IMBARCARTI = 'chiedi_se_imbarcarti'; const InlineCmd = { VOGLIO_IMBARCARMI: 'w_imb', NON_VOGLIO_IMBARCARMI: 'nw_imb', }; const InlineZoomConferma = { CONFERMA_ZOOM_PRESENZA: 'conf_pres', NON_CONFERMA_ZOOM_PRESENZA: 'nonconf_pres', }; const InlineConferma = { RISPOSTA_SI: 'r_s', RISPOSTA_NO: 'r_n', }; const SendMsgCmd = [CONTA_SOLO, RICEVI_EMAIL, NOME_COGNOME, CHEDI_SE_IMBARCARTI]; // const MenuNoLogin = { // it: { menu: [[Menu.LANG], [Menu.it.ASSISTENZA]] }, // es: { menu: [[Menu.LANG], [Menu.es.ASSISTENZA]] }, // fr: { menu: [[Menu.LANG], [Menu.fr.ASSISTENZA]] }, // si: { menu: [[Menu.LANG], [Menu.si.ASSISTENZA]] }, // pt: { menu: [[Menu.LANG], [Menu.pt.ASSISTENZA]] }, // enUs: { menu: [[Menu.LANG], [Menu.enUs.ASSISTENZA]] }, // }; // const MenuStandard = { // it: { menu: [[Menu.it.LAVAGNA, Menu.it.LINK_CONDIVIDERE], [Menu.it.ZOOM, Menu.it.ASSISTENZA], [Menu.LANG]] }, // }; const MenuLang = { it: { menu: [ [Menu.LANG_IT, Menu.LANG_EN], [Menu.LANG_ES, Menu.LANG_FR], [Menu.LANG_SI, Menu.LANG_PT, Menu.it.INDIETRO], ], }, }; const MenuYesNo = { it: { menu: [[Menu.it.SI, Menu.it.NO]] }, es: { menu: [[Menu.es.SI, Menu.es.NO]] }, fr: { menu: [[Menu.fr.SI, Menu.fr.NO]] }, si: { menu: [[Menu.si.SI, Menu.si.NO]] }, pt: { menu: [[Menu.pt.SI, Menu.pt.NO]] }, enUs: { menu: [[Menu.enUs.SI, Menu.enUs.NO]] }, }; const MenuAdmin = { it: { menu: [ [Menu.RESTART_SRV + ' 6711', Menu.LOG_SRV + ' 6711'], [Menu.REBOOT_SRV + ' 6711', Menu.it.INDIETRO], ], }, }; const MenuSend = { it: { menu: [ [CONTA_SOLO, RICEVI_EMAIL, NOME_COGNOME], [CHEDI_SE_IMBARCARTI, Menu.it.INDIETRO], ], }, }; const MenuChat = { it: { menu: [[Menu.it.ESCI_DA_CHAT, Menu.it.INDIETRO]] }, es: { menu: [[Menu.es.ESCI_DA_CHAT, Menu.es.INDIETRO]] }, fr: { menu: [[Menu.fr.ESCI_DA_CHAT, Menu.fr.INDIETRO]] }, si: { menu: [[Menu.si.ESCI_DA_CHAT, Menu.si.INDIETRO]] }, pt: { menu: [[Menu.pt.ESCI_DA_CHAT, Menu.pt.INDIETRO]] }, enUs: { menu: [[Menu.enUs.ESCI_DA_CHAT, Menu.enUs.INDIETRO]] }, }; const Sex = { MALE: 1, FEMALE: -1, }; const Status = { EXIT: -5, NONE: 0, VERIFIED: 1, WAITFOR_USERNAME_TELEGRAM: 101, WAITFOR_USERNAME_INVITANTE: 104, SET_USERNAME_INVITANTE: 105, CLICK_LINK_REG: 106, WAITFOR_RISPOSTA: 110, }; const Cmd = { VALIDATE_REGISTRATION: 1, }; const Destin = { STAFF: 1, TUTTI: 2, NO_7_REQ: 3, NO_9_REQ: 4, SI_INVITATI_NO_7REQ_INVITATI: 5, A_UTENTE: 6, MSG_TO_NAVE: 7, NESSUN_IMBARCO_7REQ: 8, PAOLO: 9, DOMANDA: 10, RISPOSTA: 11, APPARTIENE_CIRCUITO_RIS: 20, }; const StatusMSGALL = { NONE: 0, ASK: 1, CONFIRM: 2, }; const txt = { MSG_SCEGLI_MENU: '💫' + ' Scegli una voce di menu:' + '💫', MSG_ASK_USERNAME_BO: "Scrivete nel messaggio l'username (SENZA SPAZI) o la email con cui vi siete registrati sul sito di %s:", MSG_ASK_USERNAME_INVITANTE: "Scrivi nel messaggio l'USERNAME TELEGRAM di chi ti ha INVITATO", MSG_NEW_REG: '

⁉️🙈 Per aiuto scrivi sulla Chat RISO
oppure direttamente a Surya (@surya1977) ☀️.', MSG_ERRORE_INVITANTE_NOT_FOUND: "L'username dell'invitante appena digitato non sembra essere corretto! Ti ricordo che dev'essere l'username con cui si è registrato su %s", MSG_ERRORE_USERNAME: 'Attenzione! Devi inserire solo lo username (40 caratteri massimo)', MSG_ERRORE_USERNAME_NOT_FOUND: "Per Completare la Verifica Telegram BOT, dovete ora scrivere qui sotto nel messaggio l'Username (senza spazi) OPPURE la email con cui vi siete registrati sul sito", MSG_ERRORE_USERNAME_ANNULLA: 'Inserimento Annullato. Riprovare', MSG_OPERAZ_ANNULLATA: 'Operazione Annullata', MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Attenzione! Devi inserire solo il codice a 6 cifre', MSG_VERIFY_CODE: '1. Ora ritorna sul sito:\n%s\n2. Copia il codice di Autenticazione (di 6 cifre) che troverai scritto in alto\n3. Scrivilo (o incollalo) qui sotto come messaggio:', MSG_ERR_VERIFY_CODE: 'Codice di Verifica Errato!' + emo.EXCLAMATION_MARK + '\nControlla sul sito %s e riscrivi il nuovo codice di 6 cifre.', MSG_SET_PICPROFILE: '🖼 Abbiamo impostato la tua foto del Profilo, copiandola dalla foto profilo di Telegram. Potrai comunque cambiarla dalla APP (%s)', MSG_RESETPWD: 'Clicca qui per impostare una nuova password per accedere alla APP:', MSG_ERR_UNKNOWN_VERIFY_CODE: 'Errore durante il salvataggio sul Server. Riprovare piú tardi', MSG_EXIT_TELEGRAM: "L'account è stato ora scollegato da questo Telegram BOT.", MSG_APORTADOR_USER_REGISTERED: emo.FIRE + ' Si è appena Registrato "%s" (n. %s)\nInvitato da %s', MSG_APORTADOR_ASK_CONFIRM: '🆕💥 🧍‍♂️ %s si sta registrando su %s e ti chiede di poter entrare. Confermi di conoscerla ?', MSG_ACCEPT_NEWENTRY_INGROUP: '❇️👥 🧍‍♂️ Accetta Ingresso nel GRUPPO %s:', MSG_FRIENDS_NOT_ACCEPTED_CONFIRMED: '🚫 Hai rifiutato la richiesta di Amicizia di %s !', MSG_HANDSHAKE_NOT_ACCEPTED_CONFIRMED: '🚫 Hai rifiutato la richiesta di Stretta di mano di %s !', MSG_APORTADOR_CONFIRMED: '✅ %s è stato Ammesso correttamente (da %s)!', MSG_APORTADOR_DEST_CONFIRMED: '✅ La tua registrazione a %s è stata accettata da %s!\n' + 'Vai sulla App oppure clicca qui per entrare\n👉🏻 %s', MSG_GROUP_CONFIRMED: '✅ Sei stato Aggiunto sul Gruppo %s!', MSG_APORTADOR_DEST_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 Ci dispiace ma non sei stato Verificato correttamente dal tuo invitante %s.
Contattalo per farti abilitare !', MSG_APORTADOR_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 %s Non è stato Ammesso !', MSG_ISCRITTO_CONACREIS: emo.FIRE + '[%s] Si è appena Iscritto al Conacreis "%s"', MSG_ISCRITTO_ARCADEI: emo.FIRE + '[%s] Si è appena Iscritto ad Arcadei "%s"', MSG_MSG_SENT: '📨' + ' Messaggi Inviati !', MSG_MSG_TOSENT: '📨' + ' Messaggi da Inviare', MSG_MSG_INCORSO: '📨' + ' messaggi in corso... Inviati attualmente', MSG_SET_USERNAME_TELEGRAM: '[Prima di continuare con la registrazione in RISO.APP]\n' + 'Segui questi passi per IMPOSTARE UN USERNAME IN TELEGRAM: \n\n' + '1. premi sull\'icona con 3 linee orizzontali, in alto a sinistra (sull\'iPhone si chiama "Impostazioni").\n' + 'premi il tasto INDIETRO del cellulare (si chiuderà questa chat).\n\n' + '2. Seleziona la voce IMPOSTAZIONI dalla lista.\n\n' + '3.Premi su USERNAME nella sezione account.\n\n' + '4. Digita un username (o nome utente) qualsiasi a tua scelta, se è già usato aggiungi dei numeri.\n\n' + "5. Per confermare premi sull'icona con la spunta (V) in alto a destra.\n\n" + '🏁 6. Infine ritorna su questa chat BOT e scrivi OK nel messaggio. \n\n' + ' Se non riesci a fare questi passaggi, clicca qui: \n' + '👉🏻 https://www.nigiara.it/telegram/come-impostare-uno-username-su-telegram.htm ', MSG_SIGNUP: 'Per registrarti su %s:', }; const txt_es = { MSG_SCEGLI_MENU: '💫' + ' Elija un elemento del menú:' + '💫', MSG_ASK_USERNAME_BO: 'Escriba en el mensaje el nombre de usuario o el correo electrónico con el que se registró en el sitio de %s:', MSG_ERRORE_USERNAME: '¡Atención! Debes introducir sólo el nombre de usuario (40 caracteres como máximo)', MSG_ERRORE_USERNAME_NOT_FOUND: 'Para completar la verificación del telegrama BOT, ahora debe escribir en el mensaje el nombre de usuario o el correo electrónico con el que se registró en el sitio.:', MSG_ERRORE_USERNAME_ANNULLA: 'Inserción cancelada. Inténtalo de nuevo.', MSG_OPERAZ_ANNULLATA: 'Operación cancelada', MSG_ERRORE_VERIFY_CODE_MAXLEN: '¡Atención! Sólo tienes que introducir el código de 6 dígitos', MSG_VERIFY_CODE: '1. Ahora, de vuelta en el sitio web:\n%s\n2. Copie el código de autenticación (6 dígitos) que encontrará escrito en la parte superior de la página\n3. Escríbelo (o pégalo) abajo como un mensaje:', MSG_ERR_VERIFY_CODE: 'Código de verificación incorrecto!' + emo.EXCLAMATION_MARK + '\nComprueba en el sitio %s y reescribe el nuevo código de 6 dígitos.', MSG_SET_PICPROFILE: '🖼 Abbiamo impostato la tua foto del Profilo, copiandola dalla foto profilo di Telegram. Potrai comunque cambiarla dalla APP (%s)', MSG_ERR_UNKNOWN_VERIFY_CODE: 'Error al guardar en el servidor. Inténtalo de nuevo más tarde.', MSG_EXIT_TELEGRAM: 'La cuenta ha sido desconectada de Telegram BOT.', MSG_APORTADOR_USER_REGISTERED: emo.FIRE + ' Acaba de registrarse "%s (n. %s)"\n(Invitado de %s)', MSG_APORTADOR_ASK_CONFIRM: '🆕💥 🧍‍♂️ %s si sta registrando su %s e ti chiede di poter entrare. Confermi di conoscerla ?', MSG_ACCEPT_NEWENTRY_INGROUP: '❇️👥 🧍‍♂️ Accetta Ingresso nel GRUPPO %s:', MSG_APORTADOR_CONFIRMED: '✅ %s è stato Ammesso correttamente (da %s)!', MSG_APORTADOR_DEST_CONFIRMED: '✅ Sei stato Ammesso correttamente da %s!', MSG_GROUP_CONFIRMED: '✅ Sei stato Aggiunto sul Gruppo %s!', MSG_APORTADOR_DEST_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 Ci dispiace ma non sei stato Verificato correttamente dal tuo invitante %s.
Contattalo per farti abilitare !', MSG_APORTADOR_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 %s Non è stato Ammesso !', MSG_MSG_SENT: '📨' + ' Mensajes enviados !', MSG_MSG_TOSENT: '📨' + ' Mensajes a enviar', MSG_MSG_INCORSO: '📨' + ' mensajes en progreso... Enviado actualmente', }; const txt_fr = { MSG_SCEGLI_MENU: '💫' + 'Choisissez un élément de menu:' + '💫', MSG_ASK_USERNAME_BO: "Écrivez dans le message l'username ou l'e-mail avec lequel vous vous êtes enregistré sur le site de %s: ", MSG_ERRORE_USERNAME: 'Attention! Vous devez insérer seulement l’username (40 caractères maximum)', MSG_ERRORE_USERNAME_NOT_FOUND: "Pour Compléter la Vérification Telegram BOT, vous devez maintenant écrire dans le message ci-dessous l'Username ou l'adresse e-mail avec lequel vous vous êtes inscrit sur le site: ", MSG_ERRORE_USERNAME_ANNULLA: 'Saisie des données Annullée.Essayez à nouveau ', MSG_OPERAZ_ANNULLATA: 'Opération Annullée', MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Attention! Vous devez insérer seulement le code à 6 chiffres', MSG_VERIFY_CODE: '1. Ᾱ présent retournez sur le site:\n%s\n2. Copiez le Code d’Authentification (de 6 chiffres) che vous trouverez écrit en haut \n3. Ecrivez-le (ou copiez-le) ci-dessous comme message:', MSG_ERR_VERIFY_CODE: ' Code de vérification incorrect!' + emo.EXCLAMATION_MARK + '\nControllez sur le site %s et réécrivez le nouveau code à 6 chiffres.', MSG_SET_PICPROFILE: '🖼 Abbiamo impostato la tua foto del Profilo, copiandola dalla foto profilo di Telegram. Potrai comunque cambiarla dalla APP (%s)', MSG_ERR_UNKNOWN_VERIFY_CODE: "Erreur lors de l'enregistrement sur le serveur. Retentez plus tard", MSG_EXIT_TELEGRAM: "L'account a été déconnecté de Telegram BOT.", MSG_APORTADOR_USER_REGISTERED: emo.FIRE + ' Vous venez à peine de vous inscrire "%s (n. %s) %s', MSG_APORTADOR_ASK_CONFIRM: '🆕💥 🧍‍♂️ %s si sta registrando su %s e ti chiede di poter entrare. Confermi di conoscerla ?', MSG_ACCEPT_NEWENTRY_INGROUP: '❇️👥 🧍‍♂️ Accetta Ingresso nel GRUPPO %s:', MSG_APORTADOR_CONFIRMED: '✅ %s è stato Ammesso correttamente (da %s)!', MSG_APORTADOR_DEST_CONFIRMED: '✅ Sei stato Ammesso correttamente da %s!', MSG_GROUP_CONFIRMED: '✅ Sei stato Aggiunto sul Gruppo %s!', MSG_APORTADOR_DEST_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 Ci dispiace ma non sei stato Verificato correttamente dal tuo invitante %s.
Contattalo per farti abilitare !', MSG_APORTADOR_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 %s Non è stato Ammesso !', MSG_MSG_SENT: '📨' + ' Messages envoyés !', MSG_MSG_TOSENT: '📨' + ' Messages à envoyer', MSG_MSG_INCORSO: '📨' + ' messages en cours... Actuellement envoyé', }; const txt_si = { MSG_SCEGLI_MENU: '💫' + 'Izbirni meni:' + '💫', MSG_ASK_USERNAME_BO: 'Vpiši svoje uporabniško ime in e-naslov s katerimi si se registriral na spletni strani %s: ', MSG_ERRORE_USERNAME: 'Pozor! Vpiši samo uporabniško ime (40 znakov) maksimalno', MSG_ERRORE_USERNAME_NOT_FOUND: 'Ponovno preverite telegram BOT Uporabniško ime ali e-poštno sporočilo, s katerim ste registrirali na spletni strani: ', MSG_ERRORE_USERNAME_ANNULLA: 'Preklic. Poskusi ponovno ', MSG_OPERAZ_ANNULLATA: 'Operacija preklicana', MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Pozor! Vstavi D mestno kodo', MSG_VERIFY_CODE: '1. Vrni se na spletno strani: \n%s\n2. Kopiraj kodo Authenticazione (6 mestno) ki jo najdeš zgoraj zapisano\n3. Napiši (ali prilepi) tu spodaj kot sporočilo: ', MSG_ERR_VERIFY_CODE: 'Napačna koda za preverjanje!' + emo.EXCLAMATION_MARK + '\nPreveri na strani %s in ponovno napiši 6 mestno kodo.', MSG_SET_PICPROFILE: '🖼 Abbiamo impostato la tua foto del Profilo, copiandola dalla foto profilo di Telegram. Potrai comunque cambiarla dalla APP (%s)', MSG_ERR_UNKNOWN_VERIFY_CODE: 'Napaka strežnika.Poskusi kasneje ', MSG_EXIT_TELEGRAM: 'Račun se nahaja v programu Telegram BOT.', MSG_APORTADOR_USER_REGISTERED: emo.FIRE + 'Registracija registracije %s (n. %s)\n(povabil ga %s)', MSG_APORTADOR_ASK_CONFIRM: '🆕💥 🧍‍♂️ %s si sta registrando su %s e ti chiede di poter entrare. Confermi di conoscerla ?', MSG_ACCEPT_NEWENTRY_INGROUP: '❇️👥 🧍‍♂️ Accetta Ingresso nel GRUPPO %s:', MSG_APORTADOR_CONFIRMED: '✅ %s è stato Ammesso correttamente (da %s)!', MSG_APORTADOR_DEST_CONFIRMED: '✅ Sei stato Ammesso correttamente da %s!', MSG_GROUP_CONFIRMED: '✅ Sei stato Aggiunto sul Gruppo %s!', MSG_APORTADOR_DEST_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 Ci dispiace ma non sei stato Verificato correttamente dal tuo invitante %s.
Contattalo per farti abilitare !', MSG_APORTADOR_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 %s Non è stato Ammesso !', }; const txt_en = { MSG_SCEGLI_MENU: '💫' + ' Choose a menu item:' + '💫', MSG_ASK_USERNAME_BO: 'Write in the message the username or email with which you registered on the site of %s:', MSG_ERRORE_USERNAME: 'Attention! You must enter only the username (40 characters maximum)', MSG_ERRORE_USERNAME_NOT_FOUND: 'To complete the Telegram BOT Verification, you must now write below in the message the Username OR the email with which you registered on the website:', MSG_ERRORE_USERNAME_ANNULLA: 'Insertion Cancelled. Try again', MSG_OPERAZ_ANNULLATA: 'Operation Cancelled', MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Attention! You only need to enter the 6-digit code', MSG_VERIFY_CODE: '1. Now return to the website: %s\n' + '2. Copy the Authentication code (of 6 digits) that you will find written at the top\n' + '3. Write it (or paste it) below as a message:', MSG_ERR_VERIFY_CODE: 'Incorrect Verification Code!' + emo.EXCLAMATION_MARK + '\nCheck on the site %s and rewrite the new 6-digit code.', MSG_SET_PICPROFILE: '🖼 Abbiamo impostato la tua foto del Profilo, copiandola dalla foto profilo di Telegram. Potrai comunque cambiarla dalla APP (%s)', MSG_ERR_UNKNOWN_VERIFY_CODE: 'Error while saving to the Server. Try again later', MSG_EXIT_TELEGRAM: 'The account has now been disconnected from this Telegram BOT.', MSG_APORTADOR_USER_REGISTERED: emo.FIRE + ' He/She\'s just registered "%s (n. %s)"\n(Invited from %s)', MSG_APORTADOR_ASK_CONFIRM: '🆕💥 🧍‍♂️ %s si sta registrando su %s e ti chiede di poter entrare. Confermi di conoscerla ?', MSG_ACCEPT_NEWENTRY_INGROUP: '❇️👥 🧍‍♂️ Accetta Ingresso nel GRUPPO %s:', MSG_APORTADOR_CONFIRMED: '✅ %s è stato Ammesso correttamente (da %s)!', MSG_APORTADOR_DEST_CONFIRMED: '✅ Sei stato Ammesso correttamente da %s!', MSG_GROUP_CONFIRMED: '✅ Sei stato Aggiunto sul Gruppo %s!', MSG_APORTADOR_DEST_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 Ci dispiace ma non sei stato Verificato correttamente dal tuo invitante %s.
Contattalo per farti abilitare !', MSG_APORTADOR_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 %s Non è stato Ammesso !', MSG_MSG_SENT: '📨' + ' Sent Messages !', MSG_MSG_TOSENT: '📨' + ' Messages to Send', MSG_MSG_INCORSO: '📨' + ' messages in progress... Currently sent', }; const txt_pt = { MSG_SCEGLI_MENU: '💫' + ' Escolha um item do menu:' + '💫', MSG_ASK_USERNAME_BO: 'Escreva na mensagem o nome de usuário ou e-mail com o qual se registrou no site de %s:', MSG_ERRORE_USERNAME: 'Atenção! Você deve inserir apenas o nome de usuário (40 caracteres no máximo)', MSG_ERRORE_USERNAME_NOT_FOUND: 'Para completar a Verificação do Telegrama BOT, você deve agora escrever abaixo na mensagem o Nome de Usuário OU o e-mail com o qual você se registrou no site:', MSG_ERRORE_USERNAME_ANNULLA: 'Inserção Cancelada. Tente novamente', MSG_OPERAZ_ANNULLATA: 'Operação Cancelada', MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Atenção! Você só precisa digitar o código de 6 dígitos', MSG_VERIFY_CODE: '1. Agora de volta ao site:\n%s\n2. Copie o código de autenticação (6 dígitos) que você encontrará escrito na parte superior da página\n3. Escreva-o (ou cole-o) abaixo como uma mensagem:', MSG_ERR_VERIFY_CODE: 'Código de Verificação Incorrecto!' + emo.EXCLAMATION_MARK + '\nCódigo de Verificação ErradoCheque no local %s e reescreva o novo código de 6 dígitos.', MSG_SET_PICPROFILE: '🖼 Abbiamo impostato la tua foto del Profilo, copiandola dalla foto profilo di Telegram. Potrai comunque cambiarla dalla APP (%s)', MSG_ERR_UNKNOWN_VERIFY_CODE: 'Erro ao salvar no Servidor. Tente novamente mais tarde.', MSG_EXIT_TELEGRAM: 'A conta foi agora desconectada deste Telegrama BOT.', MSG_APORTADOR_USER_REGISTERED: emo.FIRE + ' Acabou de se registar "%s (n. %s)"\n(Convidado por %s)', MSG_APORTADOR_ASK_CONFIRM: '🆕💥 🧍‍♂️ %s si sta registrando su %s e ti chiede di poter entrare. Confermi di conoscerla ?', MSG_ACCEPT_NEWENTRY_INGROUP: '❇️👥 🧍‍♂️ Accetta Ingresso nel GRUPPO %s:', MSG_APORTADOR_CONFIRMED: '✅ %s è stato Ammesso correttamente (da %s)!', MSG_APORTADOR_DEST_CONFIRMED: '✅ Sei stato Ammesso correttamente da %s!', MSG_GROUP_CONFIRMED: '✅ Sei stato Aggiunto sul Gruppo %s!', MSG_APORTADOR_DEST_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 Ci dispiace ma non sei stato Verificato correttamente dal tuo invitante %s.
Contattalo per farti abilitare !', MSG_APORTADOR_NOT_CONFIRMED: emo.EXCLAMATION_MARK + '🚫 %s Non è stato Ammesso !', MSG_MSG_SENT: '📨' + ' Mensagens Enviadas !', MSG_MSG_TOSENT: '📨' + ' Mensagens a enviar', MSG_MSG_INCORSO: '📨' + ' mensagens em progresso... Actualmente enviado', }; const TelegramBot = require('node-telegram-bot-api'); const ADMIN_IDTELEGRAM_TEST = 5356627050; // 5022837609; //Surya A. const MyTelegramBot = { ADMIN_IDTELEGRAM_SERVER: '12429864', //Paolo ADMIN_USERNAME_TELEGRAM: 'surya1977', //Paolo ADMIN_USER_NAME_SERVER: 'Paolo', phase: { REGISTRATION: 1, ISCRIZIONE_CONACREIS: 2, ISCRIZIONE_ARCADEI: 4, }, getAppTelegram: function () { if (process.env.appTelegram) { arrTeleg = JSON.parse(process.env.appTelegram); } else { arrTeleg = appTelegram; } if (process.env.NODE_ENV === 'development') { arrTeleg = MyTelegramBot.getAppTelegramDevelop(); } else if (process.env.NODE_ENV === 'test') { arrTeleg = MyTelegramBot.getAppTelegramTest(); } else { const arrTelegFromSite = tools.getArrTelegramFromSite(); if (arrTelegFromSite.length > 0) { arrTeleg = arrTelegFromSite; } } return arrTeleg; }, getAppTelegramTest: function () { if (process.env.appTelegram_TEST) { return JSON.parse(process.env.appTelegram_TEST); } else { return appTelegram_TEST; } }, getAppTelegramDevelop: function () { if (process.env.appTelegram_DEVELOP) { return JSON.parse(process.env.appTelegram_DEVELOP); } else { return appTelegram_DEVELOP; } }, local_sendMsgTelegramByIdTelegram: async function ( idapp, idtelegram, text, message_id, chat_id, ripr_menuPrec, MyForm = null, img = '' ) { if (!idtelegram) return { text: '' }; const cl = getclTelegByidapp(idapp); if (cl && idtelegram) { return await cl.sendMsg(idtelegram, text, null, MyForm, message_id, chat_id, ripr_menuPrec, img, { idapp }); } return { text: '' }; }, deleteRecInMemByUsername: function (idapp, username_bo) { const cl = getclTelegByidapp(idapp); if (cl) { cl.arrUsers = cl.arrUsers.filter((rec) => rec.username_bo !== username_bo); } }, getFormDaMostrare: function (idapp, myfunc, myuser) { let FormDaMostrare = null; const cl = getclTelegByidapp(idapp); if (myfunc === shared_consts.CallFunz.ZOOM_GIA_PARTECIPATO) { FormDaMostrare = cl.getInlineKeyboard(myuser.lang, [ { text: 'Conferma Presenza Zoom', // callback_data: { action: InlineZoomConferma.CONFERMA_ZOOM_PRESENZA, username: myuser.username } callback_data: InlineZoomConferma.CONFERMA_ZOOM_PRESENZA + tools.SEP + myuser.username, }, { text: 'Annulla Presenza Zoom', // callback_data: { action: InlineZoomConferma.NON_CONFERMA_ZOOM_PRESENZA, username: myuser.username } callback_data: InlineZoomConferma.NON_CONFERMA_ZOOM_PRESENZA + tools.SEP + myuser.username, }, ]); } return FormDaMostrare; }, getclTelegByidapp: function (idapp) { const cl = getclTelegByidapp(idapp); return cl; }, getCiao: function (idapp, username, lang) { return tools.gettranslate('CIAO', lang) + ' ' + username + '!\n'; }, notifyToTelegram: async function (phase, mylocalsconf) { try { let userdest = mylocalsconf.user.aportador_solidario; let langdest = mylocalsconf.user.lang; let NameFrom = `${mylocalsconf.user.name} ${mylocalsconf.user.surname}`; if (!mylocalsconf.user.name) { NameFrom = `${mylocalsconf.user.username}`; } const index = mylocalsconf.user.index; let aportador = ''; if (userdest) { aportador = `${userdest}`; NameFrom += aportador; } else { aportador = mylocalsconf.user.aportador_solidario_nome_completo ? mylocalsconf.user.aportador_solidario_nome_completo : mylocalsconf.user.aportador_solidario; } let text = ''; if (phase === this.phase.REGISTRATION) { if ( tools.getConfSiteOptionEnabledByIdApp(mylocalsconf.idapp, shared_consts.ConfSite.Notif_Reg_Bot_ToManagers) ) { if (userdest) { NameFrom = await User.getNameSurnameByUsername(mylocalsconf.idapp, userdest, true); aportador = NameFrom ? NameFrom + ' ' + aportador : aportador; } const numutenti = await User.getNumUsers(mylocalsconf.idapp); let nome = tools.getNomeCognomeEUserNameByUser(mylocalsconf.user); text = printf(getstr(langdest, 'MSG_APORTADOR_USER_REGISTERED'), nome, numutenti, aportador); } } let addtext = ''; let rismsg = null; if (text) { await this.sendMsgTelegramToTheManagers(mylocalsconf.idapp, addtext + text, false, null); } } catch (e) { console.error('Err notifyToTelegram', e); } }, notifyIscrizioneToTelegram: async function (phase, mylocalsconf, msg) { try { let langdest = mylocalsconf.iscritto.lang; let NameFrom = `${mylocalsconf.iscritto.name} ${mylocalsconf.iscritto.surname}`; let nomeapp = tools.getHostByIdApp(mylocalsconf.idapp); let text = printf(getstr(langdest, msg), NameFrom, nomeapp); let addtext = ''; await this.sendMsgTelegramToTheManagers(mylocalsconf.idapp, addtext + text); } catch (e) { console.error('notifyIscrizioneToTelegram', e); } }, askConfirmationUser: async function ( idapp, myfunc, myuser, userDest = '', name = '', groupid = '', circuitId = '', regexpire = '', groupname = '' ) { try { const cl = getclTelegByidapp(idapp); if (!cl) return false; const langdest = myuser.lang; const telegid = myuser.profile.teleg_id; if (!userDest) { userDest = myuser.username; } let userrecDest = await User.getUserShortDataByUsername(idapp, userDest); let userId = userrecDest._id; let title = tools.getNomeAppByIdApp(idapp); let keyb = null; let openUrl = ''; let domanda = ''; let msg_notifpush = ''; let send_notif = false; let actions = []; let tag = ''; const struserinfomsg = tools.getUserInfoMsg(idapp, myuser); const nomeapp = myuser.idapp ? tools.getNomeAppByIdApp(myuser.idapp) : tools.getNomeAppByIdApp(idapp); if (myfunc === shared_consts.CallFunz.REGISTRATION) { if (telegid > 0) { cl.setPhotoProfile(myuser, telegid, false); const rismsg = await MsgTemplate.getMsgByLang( idapp, myuser, shared_consts.TypeMsgTemplate.MSG_BENVENUTO, myuser.lang ); const rismsg2 = await MsgTemplate.getMsgByLang( idapp, myuser, shared_consts.TypeMsgTemplate.MS_SHARE_LINK, myuser.lang ); await cl.sendMsgLog(telegid, rismsg.body); await cl.sendMsg(telegid, rismsg2.body); } userDest = myuser.aportador_solidario; let notask_verif = await User.notAsk_VerifByUsername(idapp, userDest); let useraportador = await User.getUserShortDataByUsername(idapp, userDest); if ( useraportador && useraportador.tokenreg && useraportador.tokenreg && regexpire && regexpire?.toLowerCase() === useraportador.tokenreg?.toLowerCase() ) { const nonchiedereverifica = await User.getifRegTokenIsValid(idapp, useraportador.tokenreg); if (nonchiedereverifica) notask_verif = true; } if (notask_verif) { // Non chiedi la verifica Registrazione await setVerifiedReg(myuser.idapp, myuser.lang, myuser.username, userDest); } else { msg_notifpush = getstr(langdest, 'MSG_APORTADOR_ASK_CONFIRM', myuser.username, nomeapp); domanda = getstr(langdest, 'MSG_APORTADOR_ASK_CONFIRM', myuser.username, nomeapp) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { text: '✅ Ammetti ' + myuser.username, callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + userDest, }, /*{ text: '🚫 Rifiuta ' + myuser.username, callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + userDest, }, */ ]); } send_notif = true; } else if (myfunc === shared_consts.CallFunz.RICHIESTA_GRUPPO) { msg_notifpush = printf(getstr(langdest, 'MSG_ACCEPT_NEWENTRY_INGROUP'), name); domanda = printf(getstr(langdest, 'MSG_ACCEPT_NEWENTRY_INGROUP'), name) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { text: '✅ Accetta ' + myuser.username, callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + groupid, }, { text: '🚫 Rifiuta ' + myuser.username, callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + groupid, }, ]); } else if (myfunc === shared_consts.CallFunz.RICHIESTA_FIDO) { if (groupname) { msg_notifpush = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_BYGROUP', locale: langdest }, groupname); domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_BYGROUP', locale: langdest }, groupname) + '
' + struserinfomsg; let textentrato = ''; keyb = cl.getInlineKeyboard(myuser.lang, [ { text: textentrato + '✅ Abilita fiducia a ' + groupname, callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + circuitId + tools.SEP + groupname, }, /*{ text: '🚫 Rifiuta ' + groupname, callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + groupid + tools.SEP + groupname, },*/ ]); send_notif = true; } else { msg_notifpush = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY', locale: langdest }, myuser.username, name); domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY', locale: langdest }, myuser.username, name) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { text: '✅ Abilita fiducia a ' + myuser.username + ' in ' + name, callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + circuitId + tools.SEP, }, /*{ text: '🚫 Rifiuta ' + myuser.username, callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + groupid, }, */ ]); send_notif = true; } } else if (myfunc === shared_consts.CallFunz.RICHIESTA_CIRCUIT) { if (groupname) { msg_notifpush = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_BYGROUP_CIRC', locale: langdest }, groupname); domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_BYGROUP_CIRC', locale: langdest }, groupname) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { text: '✅ Fai entrare a ' + groupname, callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + circuitId + tools.SEP + groupname, }, /*{ text: '🚫 Rifiuta ' + groupname, callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + groupid + tools.SEP + groupname, },*/ ]); send_notif = true; } else { msg_notifpush = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_CIRC', locale: langdest }, myuser.username, name); domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_CIRC', locale: langdest }, myuser.username, name) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { text: '✅ Fai entrare a ' + myuser.username, callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + circuitId, }, /*{ text: '🚫 Rifiuta ' + myuser.username, callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + groupid, }, */ ]); send_notif = true; } } // Invia Msg if (domanda) { const teleg_id = await User.TelegIdByUsername(idapp, userDest); await this.local_sendMsgTelegramByIdTelegram(idapp, teleg_id, domanda, undefined, undefined, true, keyb); } if (send_notif && msg_notifpush) { // SEND PUSH NOTIFICATION await tools.sendNotificationToUser(userId, title, msg_notifpush, openUrl, '', tag, actions); } } catch (e) { console.error('Error askConfirmationUser', e); } }, askConfirmationUserFriend: async function (idapp, myfunc, myuser, userDest = '', username = '') { try { const cl = getclTelegByidapp(idapp); if (!cl) return false; const { SendNotif } = require('../models/sendnotif'); const langdest = myuser.lang; let keyb = null; let domanda = ''; let sendnotif = false; let typedir = 0; let typeid = 0; let paramsObj = {}; const struserinfomsg = tools.getUserShortInfoMsg(idapp, myuser); if (myfunc === shared_consts.CallFunz.RICHIESTA_AMICIZIA) { sendnotif = true; typedir = shared_consts.TypeNotifs.TYPEDIR_FRIENDS; typeid = shared_consts.TypeNotifs.ID_FRIENDS_NEW_REC; paramsObj = { usernameDest: userDest }; domanda = printf(tools.gettranslate('RICHIESTA_AMICIZIA', langdest), myuser.username) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { text: '✅👤 Accetta Amicizia', callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + userDest + tools.SEP + '', }, { text: '🚫👤 Rifiuta Amicizia', callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + userDest + tools.SEP + '', }, ]); } else if (myfunc === shared_consts.CallFunz.RICHIESTA_HANDSHAKE) { sendnotif = true; typedir = shared_consts.TypeNotifs.TYPEDIR_HANDSHAKE; typeid = shared_consts.TypeNotifs.ID_HANDSHAKE_ACCEPTED; paramsObj = { usernameDest: userDest }; domanda = printf(tools.gettranslate('RICHIESTA_HANDSHAKE', langdest), myuser.username) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { text: '✅🤝 Ricambia la stretta di mano', callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + userDest + tools.SEP + '', }, ]); } // Invia Msg if (domanda) { const teleg_id = await User.TelegIdByUsername(idapp, userDest); await this.local_sendMsgTelegramByIdTelegram(idapp, teleg_id, domanda, undefined, undefined, true, keyb); } if (sendnotif) { const req = tools.getReqByPar(idapp, username); // CREATE NOTIFICATION IN TABLE SENDNOTIF await SendNotif.createNewNotifToSingleUser(req, null, paramsObj, true, typedir, typeid); } } catch (e) { console.error('Error askConfirmationUser', e); } }, sendMsgTelegramToTheManagers: async function (idapp, text, onlyintofile = false, MyForm = null, nottousername = '') { tools.writeManagersLog(text); if (!onlyintofile) { const usersmanagers = await User.getusersManagers(idapp); if (usersmanagers) { for (const rec of usersmanagers) { if (rec.username !== nottousername) { await this.sendMsgTelegramByIdTelegram( idapp, rec.profile.teleg_id, emo.ROBOT_FACE + ': ' + text, undefined, undefined, true, MyForm ); await tools.snooze(100); } } } } return true; }, sendMsgTelegramToTheAdminsOfCircuit: async function ( idapp, circuitpath, text, onlyintofile = false, MyForm = null, nottousername = '' ) { tools.writeManagersLog(text); let teleg_id = 0; if (!onlyintofile) { const usersmanagers = await Circuit.getListAdminsByCircuitPath(idapp, circuitpath); if (usersmanagers) { for (const rec of usersmanagers) { if (rec.username !== nottousername) { teleg_id = await User.TelegIdByUsername(idapp, rec.username); if (teleg_id) { await this.sendMsgTelegramByIdTelegram( idapp, teleg_id, emo.ROBOT_FACE + ': ' + text, undefined, undefined, true, MyForm ); await tools.snooze(100); } } } } } return true; }, sendMsgTelegramToTheManagersAndZoomeri: async function (idapp, text, onlyintofile, MyForm = null) { tools.writeManagersLog(text); if (!onlyintofile) { // const usersmanagers = await User.getusersManagersAndZoomeri(idapp); const usersmanagers = await User.getusersManagers(idapp); if (usersmanagers) { for (const rec of usersmanagers) { await this.sendMsgTelegramByIdTelegram( idapp, rec.profile.teleg_id, emo.ROBOT_FACE + ': ' + text, undefined, undefined, true, MyForm ); await tools.snooze(100); } } } return true; }, getMsgByTipoMsg: async function (mydata, lang, user, sonosognatore) { if (!!mydata.msgextra) { return { body: mydata.msgextra, title: '' }; } let title = ''; let msg = ''; if (mydata.tipomsg === tools.TipoMsg.SEND_LINK_CHAT_DONATORI) { if (sonosognatore) msg = printf( tools.gettranslate('SEND_LINK_CHAT_SOGNATORE', lang), user.name, mydata.navemediatore.riga + '.' + mydata.navemediatore.col, mydata.msgpar1 ); else msg = printf( tools.gettranslate('SEND_LINK_CHAT_DONATORI', lang), user.name, mydata.navemediatore.riga + '.' + mydata.navemediatore.col, mydata.msgpar1 ); } else if (mydata.tipomsg === tools.TipoMsg.SEND_MSG || mydata.tipomsg === tools.TipoMsg.SEND_MSG_SINGOLO) { if (!!mydata.username_mitt) { msg = '[' + tools.gettranslate('MSG_SEND_FROM', lang) + ' ' + mydata.username_mitt + ']:' + tools.ACAPO; } msg += mydata.msgpar1; } else if (mydata.tipomsg >= 1000) { const ris = await MsgTemplate.getMsgByLang(user.idapp, user, mydata.tipomsg, lang); msg = ris.body; title = ris.title; } const cl = getclTelegByidapp(user.idapp); if (cl) { msg = await tools.convertSpecialTags(rec.user, msg); } if (!!mydata.flotta) { // SOSTITUISCI LE PAROLE CHIAVI if (!!mydata.flotta.date_start) msg = msg.replace('{date_start}', tools.getstrDateLongTot(new Date(mydata.flotta.date_start), user.lang)); if (!!mydata.flotta.date_close) msg = msg.replace('{date_close}', tools.getstrDateLongTot(new Date(mydata.flotta.date_close), user.lang)); if (!!mydata.flotta.link_superchat) msg = msg.replace('{link_superchat}', mydata.flotta.link_superchat); if (!!mydata.flotta.tutor1) msg = msg.replace('{tutor1}', mydata.flotta.tutor1); if (!!mydata.flotta.tutor2) msg = msg.replace('{tutor2}', mydata.flotta.tutor2); if (!!mydata.flotta.tutor3) msg = msg.replace('{tutor3}', mydata.flotta.tutor3); if (!!mydata.flotta.tutorslo) msg = msg.replace('{tutorslo}', mydata.flotta.tutorslo); if (!!mydata.flotta.sognatore_nomecognome) msg = msg.replace('{sognatore}', mydata.flotta.sognatore_nomecognome); if (!!mydata.flotta.sognatore_nomecognome) msg = msg.replace( '{flotta}', mydata.flotta.riga + '.' + Math.ceil(mydata.flotta.col_prima / 8) + ' - ' + mydata.flotta.riga + '.' + Math.ceil(mydata.flotta.col_ultima / 8) ); } return { body: msg, title }; }, sendMsgTelegramToTheAdminAllSites: async function (text, senzaintestazione) { for (const idapp of this.getAppTelegram()) { text = text.replace('{appname}', tools.getNomeAppByIdApp(idapp)); await this.sendMsgTelegramToTheAdmin(idapp, text, senzaintestazione); } }, sendMsgTelegramToTheAdmin: async function (idapp, text, senzaintestazione) { const usersmanagers = await User.getusersAdmin(idapp); let intestaz = emo.ROBOT_FACE + '[BOT-ADMIN]' + emo.ADMIN + ': '; if (senzaintestazione) intestaz = ''; if (usersmanagers) { for (const rec of usersmanagers) { if (User.isAdmin(rec.perm)) { this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, intestaz + text, undefined, undefined, true); await tools.snooze(300); } } } return true; }, sendMsgTelegramToALL: async function (idapp, text) { const usersall = await User.getUsersTelegALL(idapp); if (usersall) { for (const rec of usersall) { this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, text); await tools.snooze(300); } } }, sendMsgTelegram: async function (idapp, username, text, alsotomanagers = false, username_mitt = '') { const { User } = require('../models/user'); const teleg_id = await User.TelegIdByUsername(idapp, username); const cl = getclTelegByidapp(idapp); let ris = null; if (cl && teleg_id) { ris = await cl.sendMsg(teleg_id, text); } if (cl && teleg_id) { if (alsotomanagers) { await this.sendMsgTelegramToTheManagers(idapp, text); } if (!!username_mitt) { const rec = cl.getRecByUsername(username); if (rec) { rec.msgall_username_specifico = username_mitt; } } } return ris; }, sendMsgTelegramByIdTelegram: async function ( idapp, idtelegram, text, message_id, chat_id, ripr_menuPrec, MyForm = null, img = '' ) { if (!idtelegram) return; const cl = getclTelegByidapp(idapp); if (cl && idtelegram) { let myform = null; return await cl.sendMsg(idtelegram, text, null, MyForm, message_id, chat_id, ripr_menuPrec, img); } }, reloadMenuBot: async function (idapp) { const cl = getclTelegByidapp(idapp); if (cl) { return cl.updateMenuBot(); } }, reloadSites: async function () { tools.loadApps(); }, sendMsgFromSite: async function (idapp, user, params) { try { const globalTables = require('../tools/globalTables'); let ris = { numrec: 0, nummsgsent: 0, text: '', }; let invia = false; let content = ''; let tipomsgtempl = 0; params.sendreally = true; if (params.typemsg === shared_consts.TypeMsg.SEND_TO_MYSELF) { params.usernameDest = user.username; } if (params.cmd === shared_consts.MsgTeleg.SHARE_MSGREG) { tipomsgtempl = shared_consts.TypeMsgTemplate.MS_SHARE_LINK; invia = true; } else if (params.cmd === shared_consts.MsgTeleg.SHARE_TEXT) { invia = !!params.content; } else if (params.cmd === shared_consts.MsgTeleg.SHARE_ANNUNCIO) { const mytable = globalTables.getTableByTableName(params.tablerec); if (params.idrec && params.idrec !== '0') { // const myrectableorig = await mytable.findOne({ _id: myrecnotifpass.idrec }).lean(); const myrectableorig = await mytable.getCompleteRecord(params.idapp, params.idrec); if (myrectableorig) { const eventobj = await tools.getAnnuncioForTelegram( myrectableorig, params.tablerec, '', user.username, false ); if (eventobj) { params.textcontent_Telegram = eventobj.newdescrtelegram; params.typesend = shared_consts.TypeSend.TELEGRAM; //const rismsg = params.content = eventobj.newdescr; params.title = ''; params.img = eventobj.img; invia = true; } } } } if (tipomsgtempl > 0) { const rismsg = await MsgTemplate.getMsgByLang(idapp, user, tipomsgtempl, user.lang); params.content = rismsg.body; params.title = rismsg.title; } if (invia) { ris = await globalTables.SendMsgToParam(idapp, params); } return ris; } catch (e) { console.error('sendMsgFromSite', e); } }, sendMsgFromSiteToBotTelegram: async function (idapp, user, params) { if (!params.typesend) { params.typesend = shared_consts.TypeSend.TELEGRAM; } return this.sendMsgFromSite(idapp, user, params); }, }; async function setVerifiedReg(idapp, lang, usernameorig, usernameDest) { try { await User.setVerifiedByAportador(idapp, usernameorig, true); // await User.setFriendsCmd(null, idapp, usernameorig, usernameDest, shared_consts.FRIENDSCMD.SETFRIEND); const msgDest = printf(getstr(lang, 'MSG_APORTADOR_CONFIRMED'), `${usernameorig}`, usernameDest); await local_sendMsgTelegram(idapp, usernameDest, msgDest); } catch (e) { console.log('e', e); } } function getusernameByUser(idapp, msg) { let username = ''; let rec = this.getRecInMem(msg); if (!!rec) username = rec.username_bo; if (username === '') { username = msg.chat.username; } return username; } async function local_sendMsgTelegramToTheManagers(idapp, text, msg, username_bo) { const usersmanagers = await User.getusersManagers(idapp); let username = msg.chat.username; if (username_bo) username = username_bo; text = emo.ROBOT_FACE + ': Da ' + tools.getNomeCognomeTelegram(msg) + ' (' + username + '): \n' + text; tools.writeEventsLog(text); if (usersmanagers) { for (const rec of usersmanagers) { const idtelegram = rec.profile.teleg_id; const cl = getclTelegByidapp(idapp); if (cl && idtelegram) { await cl.sendMsg(idtelegram, text, undefined, undefined, undefined, undefined, true); } await tools.snooze(100); } } return true; } async function local_sendMsgTelegramToTheAdmin(idapp, text, msg, username_bo) { const usersAdmin = await User.getusersAdmin(idapp); let username = msg.chat.username; if (username_bo) username = username_bo; text = emo.ROBOT_FACE + ': Da ' + msg.chat.first_name + ' ' + msg.chat.last_name + ' (' + username + '): \n' + text; tools.writeEventsLog(text); if (usersAdmin) { for (const rec of usersAdmin) { const idtelegram = rec.profile.teleg_id; const cl = getclTelegByidapp(idapp); if (cl && idtelegram) { await cl.sendMsg(idtelegram, text, undefined, undefined, undefined, undefined, true); } await tools.snooze(100); } } return true; } async function local_sendMsgTelegram(idapp, username, text) { const teleg_id = await User.TelegIdByUsername(idapp, username); const cl = getclTelegByidapp(idapp); let ris = null; if (cl && teleg_id > 0) { ris = await cl.sendMsg(teleg_id, text); } return ris; } function getstr(lang, key, ...params) { let mystr = ''; if (lang === 'si' || lang === 'sl-si') { try { mystr = txt_si[key]; } catch (e) { mystr = ''; } } else if (lang === 'en' || lang === 'enUs') { try { mystr = txt_en[key]; } catch (e) { mystr = ''; } } else if (lang === 'es') { try { mystr = txt_es[key]; } catch (e) { mystr = ''; } } else if (lang === 'fr') { try { mystr = txt_fr[key]; } catch (e) { mystr = ''; } } else if (lang === 'pt') { try { mystr = txt_pt[key]; } catch (e) { mystr = ''; } } if (!mystr || mystr === '') mystr = txt[key]; if (params.length > 0) { mystr = printf(mystr, ...params); } return mystr; } class Telegram { constructor(idapp, bot) { this.idapp = idapp; this.bot = bot; this.token = bot.token; this.arrUsers = []; this.lastid = 0; //++ } async createIfNotExist(msg) { if (!(await this.alreadyExist(msg))) { if (await this.insertIntoDB(msg)) { let rec = this.getRecInMem(msg); if (!!rec) { if (rec.user) rec.status = Status.VERIFIED; } else { return false; } } return true; } else { return false; } } async settotheDatabase(msg) { // Check if Present to the DB const riscreate = await this.createIfNotExist(msg); if (!riscreate) { let rec = this.getRecInMem(msg); if (!rec) rec = await this.addUser(msg); if (rec.user) rec.status = Status.VERIFIED; } } async start(msg) { // Check if Username Telegram Present if (!msg.from.username) { return false; } await this.settotheDatabase(msg); } geturlfaq() { return tools.getHostByIdApp(this.idapp) + '/faq'; } getstrChatHelp() { return ( 'Clicca qui per entrare nella Chat HELP di Supporto\n' + tools.getTelegramSupportChat(this.idapp) + '\n\nI miei colleghi umani ti aiuteranno a risolvere !' ); } async IsTesto(msg) { let risp = ''; const id = msg.chat.id; let testo = msg.text?.toLowerCase()?.trim(); testo = testo.replace('!', ''); testo = testo.replace('?', ''); testo = testo.replace('é', 'è'); let contastiera = false; let noanswer = false; let lang = 'it'; const rec = this.getRecInMem(msg); let myname = ''; if (rec.user) { myname = rec.user.username; lang = rec.user.lang; } if (rec.statusmsg === Status.WAITFOR_RISPOSTA) { if (rec.msgcodeprec === MsgBot.COME_STAI) { risp = "L'importante è trovare Serenità dentro di noi" + emo.GIFT_HEART + '\nNutrirsi di Sole e Viaggiare il più possibile ! ' + emo.DREAM; } else if (rec.msgcodeprec === MsgBot.QUANTI_ANNI_HAI) { const eta = testo.match(/\d+/g); if (!eta) { risp = 'Mmmh, non me lo vuoi dire...'; } else { if (eta < 20) { risp = 'Woww! Sei molto giovane!'; } else if (eta > 20 && eta < 30) { risp = 'Sei giovane anche tu!'; } else if (eta > 30 && eta < 50) { risp = 'Sono i migliori anni questi !'; } else if (eta > 50 && eta < 60) { risp = 'Complimenti !'; } else if (eta > 60) { risp = 'Però! Ti mantieni in forma!' + emo.SMILE_STAR; } risp = 'Ah ' + eta + ' anni !\n' + risp; } } else if (rec.msgcodeprec === MsgBot.CHAT_EMPOWER) { if (!MsgBot.SI.includes(testo)) { risp = MsgRisp.CHAT_EMPOWER; } else { risp = 'Bene ! Allora divertiti conoscendo persone nuove ! '; } } else if (rec.msgcodeprec === MsgBot.MASCHIO_FEMMINA) { if (MsgBot.UOMO.includes(testo)) { rec.sex = Sex.MALE; risp = 'Ok, sarò il tuo uomo ' + emo.MALE; } else { rec.sex = Sex.FEMALE; risp = 'Ok, sarò la tua donna ' + emo.ADMIN; } } rec.statusmsg = 0; } rec.msgcodeprec = ''; const menusite = await this.isMenuSite(this.idapp, testo, lang, id); if (rec.status === Status.VERIFIED) { if (rec.user) { if (rec.user.profile.username_telegram && msg.from.id > 0 && !msg.from.username) { rec.user.profile.username_telegram = msg.from.username; await User.setUsernameTelegram( this.idapp, rec.user._id, msg.from.username || '', msg.from.first_name || '', msg.from.last_name || '' ); } if (!rec.user.profile.username_telegram && !!msg.from.username) { rec.user.profile.username_telegram = msg.from.username; await User.setUsernameTelegram( this.idapp, rec.user._id, msg.from.username || '', msg.from.first_name || '', msg.from.last_name || '' ); await this.sendMsgByTemplate('MSG_SET_USERNAME_OK', rec.user); if (rec.user) { if (!rec.user.verified_by_aportador) { MyTelegramBot.askConfirmationUser(this.idapp, shared_consts.CallFunz.REGISTRATION, rec.user); } } /*} else { if (!rec.user.profile.username_telegram) { return this.checkIfUsernameTelegramSet(msg, rec.user); }*/ } } } let parse_mode = 'HTML'; let arr_bott_inline = []; if (risp === '') { if (menusite) { risp = await this.getValueMenu(this.idapp, rec, msg, testo, lang); parse_mode = await this.getParseModeByMenu(this.idapp, rec, msg, testo, lang); arr_bott_inline = await this.getArrBottInlineByMenu(this.idapp, rec, msg, testo, lang); noanswer = true; } else if (MsgBot.CIAO.includes(testo.replace('!', ''))) { risp = 'Ciao '; if (rec) if (rec.user) risp += rec.user.name; risp += '!'; } else if (MsgBot.COME_STAI.includes(testo.replace('?', ''))) { risp = 'Io Benone Grazie! ' + '💓' + ' E tu?'; rec.statusmsg = Status.WAITFOR_RISPOSTA; rec.msgcodeprec = MsgBot.COME_STAI; } else if (MsgBot.CHI_SONO_IO.includes(testo.replace('?', ''))) { risp = 'Su Telegram ti chiami "' + msg.chat.first_name + ' ' + msg.chat.last_name + '"\n'; if (!!rec.user) { const myrec = await User.getUserShortDataByUsername(this.idapp, rec.user.username); risp += `\nSul sito ti sei registrato come ${rec.user.username}:\n\n[N. ` + rec.user.index + ']: ' + rec.user.name + ' ' + rec.user.surname + '\nUsername: ' + rec.user.username + '\n' + 'Email: ' + rec.user.email + '\nLang: ' + rec.user.lang + tools.ACAPO; risp += 'Invitato da ' + rec.user.aportador_solidario + tools.ACAPO; risp += 'Username Telegram ' + rec.user.profile.username_telegram + tools.ACAPO; risp += 'Telegram ID ' + rec.user.profile.teleg_id + tools.ACAPO; } else { risp = 'Ancora non ti sei Attivato sul BOT'; } } else if (MsgBot.CI_SEI.includes(testo.replace('?', ''))) { risp = 'Io Si, ci sono !'; } else if (MsgBot.QUANTI_ANNI_HAI.includes(testo.replace('?', ''))) { risp = 'Io sono abbastanza Giovane ! ' + emo.SMILE_STAR + '\nNon posso dirti che età ho. E tu?'; rec.statusmsg = Status.WAITFOR_RISPOSTA; rec.msgcodeprec = MsgBot.QUANTI_ANNI_HAI; } else if (MsgBot.DAMMI_UN_BACIO.includes(testo)) { risp = emo.KISS; } else if (MsgBot.COSA_FAI.includes(testo)) { risp = 'Ora sto chattando con te!\nSolitamente sono in attesa di ricevere messaggi ' + emo.ENVELOPE; } else if (MsgBot.MASCHIO_FEMMINA.includes(testo.replace('?', ''))) { risp = 'Cosa vorresti che fossi? Uomo o donna?'; rec.msgcodeprec = MsgBot.MASCHIO_FEMMINA; rec.statusmsg = Status.WAITFOR_RISPOSTA; } else if (MsgBot.COME_TI_CHIAMI.includes(testo.replace('?', ''))) { risp = 'Io mi chiamo BOT e sono il tuo assistente Virtuale. ' + emo.EYES + '\nPuoi usare il menu che compare qui sotto per sapere tutto sulle mie funzionalità ' + emo.GREEN_HEART; contastiera = true; } else if (MsgBot.UGUALE.includes(testo)) { risp = testo; // } else if (MsgBot.CHI_E_VISTAR.includes(testo)) { // } else if (MsgBot.CHI_E_PAOLO.includes(testo)) { } else if (MsgBot.COME_SI_CHIAMA.includes(testo)) { risp = 'Eh non te lo posso dire! ' + emo.JOY; } else if (MsgBot.GRAZIE.includes(testo.replace('!', ''))) { risp = 'Prego ! ' + emo.KISS + emo.KISS + emo.KISS; } else if (MsgBot.PREGO.includes(testo.replace('!', ''))) { risp = 'Grazie a te ! ' + emo.KISS + emo.KISS + emo.KISS; } else if (MsgBot.MI_AMI.find((rec) => testo.indexOf(rec) > -1)) { risp = ' Tantissimo! ' + emo.KISS + emo.GIFT_HEART + emo.GIFT_HEART + emo.GIFT_HEART; } else if (MsgBot.TI_AMO.find((rec) => testo.indexOf(rec) > -1)) { risp = ' Anche IO! ' + emo.KISS + emo.SMILE_STAR + emo.GIFT_HEART + emo.BLUE_HEART + emo.GREEN_HEART; } else if (MsgBot.PRINCIPE_AZZURRO.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Chissà... Forse si!\nAnche se meglio averne un altro di scorta, nel caso il Principe non sia disponibile.'; } else if (MsgBot.START_INV.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Sei già registrato. Per accedere alla App, aprila dall\'icona sul tuo schermo, oppure vai sul sito ed installa la App.\n\nSe hai dimenticato la password: \n clicca sul menu in basso su "⚒ Strumenti" e poi "🔑 Cambio Password"'; } else if (MsgBot.COSE_COVID.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Un \'influenza più "grave", dovuta a paure e a fattori interiori di evoluzione, oltre ad una pulizia del corpo. '; } else if (MsgBot.COVID.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Guarda, è meglio che sorvoliamo questo argomento. Anche un robot capisce che è stato realizzato ' + "il più grande esperimento dell'Uomo di ipnosi di massa, riempiendo di bugie i media mondiali, che servono sostanzialmente a controllare i popoli." + 'E con questo ti ho detto tutto. :D '; } else if (MsgBot.AIUTO.find((rec) => testo.indexOf(rec) > -1)) { risp = this.getstrChatHelp(); } else if (MsgBot.SPOSAMI.find((rec) => testo.indexOf(rec) > -1)) { risp = 'No Grazie! Sono per la Libertà a Vita! ' + emo.JOY + '\nMa se vuoi possiamo conoscerci meglio!' + emo.DANCER + emo.FIRE; } else if (MsgBot.CHE_TEMPO_FA.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Il tempo oggi è Sereno da me! ' + emo.SUN; } else if (MsgBot.NON_TROO_INVITATI.find((rec) => testo.indexOf(rec) > -1)) { risp = MsgRisp.CHAT_EMPOWER; } else if (MsgBot.SEI_LIBERO.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Io? Sono per la Libertà! ' + emo.JOY + '\nMa se vuoi possiamo conoscerci meglio!' + emo.DANCER + emo.FIRE; } else if (MsgBot.SEI_LIBERO_DI_RESPIRARE.find((rec) => testo.indexOf(rec) > -1)) { risp = "Assolutamente Sì ! Respirare è fondamentale per l'essere umano !" + emo.DANCER + emo.FIRE; } else if (MsgBot.FARE_DOMANDA.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Dipende ' + emo.SMILE_STAR + '\nProvaci!'; } else if (MsgBot.DIVENTERO_RICCA.find((rec) => testo.indexOf(rec) > -1)) { risp = "Mmmmh... Perchè non pensi di Vivere già nell'Abbondanza ?\nCosa ti manca veramente?\nForse di realizzare che la ricchezza è un sentirlo, non un diventarlo." + emo.GIFT_HEART; } else if (MsgBot.MA_ALLORA.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Ma allora cosa?'; } else if (MsgBot.DOVE_VUOI_VIVERE.find((rec) => testo.indexOf(rec) > -1)) { risp = "Mah a me piacerebbe vivere al mare, ma anche vicino al verde, in montagna. Sarebbe l'ideale 😄"; } else if (MsgBot.TROVAMI_UN_UOMO_DONNA.find((rec) => testo.indexOf(rec) > -1)) { risp = "Eh non è cosi facile. Ma se t'impegni a cercare ci riuscirai. Nel frattempo trova la tua strada, fai il tuo percorso interiore, e magari arriva proprio quando meno te l'aspetti"; } else if (MsgBot.SEI_LIBERO_STASERA.find((rec) => testo.indexOf(rec) > -1)) { risp = 'Si vabbeh, non è che puoi prendere subito tutta questa confidenza' + emo.EXCLAMATION_MARK + emo.SMILE_STAR + '\nIntanto inizia ad invitare altre persone a conoscermi, poi ne riparliamo ' + emo.GIFT_HEART; } else if (MsgBot.MI_TROVI_UN_MOROSO.find((rec) => testo.indexOf(rec) > -1)) { risp = emo.SMILE_STAR + emo.SMILE_STAR + emo.SMILE_STAR + emo.SMILE_STAR + '\nMagari! Così la smetteresti di scrivere a me (ad un BOT Virtuale) e tromberesti di più ' + emo.DANCER + emo.DANCER; risp += '\n\n' + MsgRisp.CHAT_EMPOWER; } else if (MsgBot.SORPRESA.find((rec) => testo.indexOf(rec) > -1) && testo.length < 15) { risp = 'Siiiii ! Davvero! ' + emo.DREAM; } else if (MsgBot.PAROLACCE.find((rec) => testo.indexOf(rec) > -1)) { risp = "Da te non me l'aspettavo proprio !! " + emo.INNOCENT + emo.CROSS_ROSSA; } else if (MsgBot.OK.find((rec) => testo.indexOf(rec) > -1)) { risp = '👍🏻'; } else if (MsgBot.CUORE.find((rec) => testo.indexOf(rec) > -1)) { risp = '❤️💚💜'; } else if (MsgBot.HAHA.find((rec) => testo.indexOf(rec) > -1) && testo.length < 8) { risp = emo.JOY + emo.JOY + emo.JOY; } else if (testo.length >= 10) { 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, cliccando sul bottone in basso, con 4 quadratini dentro\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); } } risp = await tools.convertSpecialTags(rec.user, risp); let keyboard = null; if (contastiera) { keyboard = { parse_mode: parse_mode, reply_markup: { resize_keyboard: true, keyboard: await this.getKeyboard(id, undefined, this.getlang(msg)), }, }; } let keyboard_inline = undefined; if (arr_bott_inline.length > 0) { keyboard_inline = cl.getInlineKeyboard(myuser.lang, arr_bott_inline); } if (rec.numdomande > 3 && rec.msgcodeprec === '') { // if (rec.user) { // const dashboard = await User.getDashboard(this.idapp, rec.user.aportador_solidario, rec.user.username, rec.user.aportador_solidario_name_surname); // // risp += '\n\nNel frattempo ti ricordo che '; // if (dashboard.myself.numinvitati === 1) // risp += 'hai solo ' + dashboard.myself.numinvitati + ' invitato!'; // else if (dashboard.myself.numinvitati === 0) // risp += 'ancora non hai portato nessun Invitato! ' + emo.LEFT_FACING_FIST; // else if (dashboard.myself.numinvitati > 2) // risp += 'hai ' + dashboard.myself.numinvitati + ' invitati !' + emo.STARS; // // risp += '\n\nSei già entrato nella Chat di EMPOWER?'; // rec.msgcodeprec = MsgBot.CHAT_EMPOWER; // rec.statusmsg = Status.WAITFOR_RISPOSTA; // rec.numdomande = 0; // } } if (risp !== '' && risp !== shared_consts.RIS_OK) { rec.numdomande++; if (!noanswer) { await tools.snooze(300); risp = '[BOT' + emo.ROBOT_FACE + ' scrive]:\n' + risp; } this._inviaMsg(id, risp, keyboard, undefined, undefined, undefined, undefined, { parse_mode, keyboard_inline }); let strlog = 'USER [' + myname + ']: ' + testo + '\n'; tools.writelog(strlog); } return risp !== ''; } async isMenuNotVerified(rec, msg, notlast) { if (this.isSelMenu(msg, msg.text, 'ASSISTENZA')) { await this.menuAssistenza(msg); } else if (msg.text === Menu.LANG_IT) { await this.ScegliLang(msg, 'it'); } else if (msg.text === Menu.LANG_ES) { await this.ScegliLang(msg, 'es'); } else if (msg.text === Menu.LANG_SI) { await this.ScegliLang(msg, 'si'); } else if (msg.text === Menu.LANG_FR) { await this.ScegliLang(msg, 'fr'); } else if (msg.text === Menu.LANG_EN) { await this.ScegliLang(msg, 'enUs'); } else if (msg.text === Menu.LANG_PT) { await this.ScegliLang(msg, 'pt'); } else if (this.isSelMenu(msg, msg.text, 'INFO')) { await this.menuInformazioni(msg); } else if (msg.text === Menu.LANG) { await this.menuLang(msg); } else if ( this.isSelMenu(msg, msg.text, 'ZOOM') || MsgBot.PROSSIMO_ZOOM.find((rec) => msg.text.indexOf(rec) > -1) ) { await this.menuZoom(msg); } else if (!notlast && (await this.IsTesto(msg))) { // OK } else { await this.msgScegliMenu(msg); } } isSelMenu(msg, menuselect, key) { let miomenu = ''; try { let lang = this.getlang(msg); miomenu = Menu[lang][key]; } catch (e) { miomenu = Menu['it'][key]; } let trovato = miomenu === menuselect; if (!trovato) { try { let miomenu2 = Menu['it'][key]; trovato = miomenu2 === menuselect; } catch (e) {} } return trovato; } async isMenu(rec, msg, testo, notlast) { try { if (!msg) return; if (testo === undefined) return; const arrtext = testo.split(' '); let cmd2 = ''; let cmd1 = arrtext[0]; if (arrtext.length > 1) cmd2 = arrtext[1]; let oldusername = rec.msgall_username_specifico; if (this.isSelMenu(msg, testo, 'ESCI_DA_CHAT') || this.isSelMenu(msg, testo, 'INDIETRO')) { rec.msgall_username_specifico = ''; } else { if (rec.msgall_username_specifico !== '') { await this.SendMsgToUser(msg, rec, rec.msgall_username_specifico, testo); return true; } } if (this.isSelMenu(msg, testo, 'LAVAGNA') || MsgBot.LAVAGNA.find((rec) => testo.indexOf(rec) > -1)) { await this.menuLavagna(msg); } else if (this.isSelMenu(msg, testo, 'ACCEDI')) { await this.menuAccedi(msg); } else if (this.isSelMenu(msg, testo, 'LINK_CONDIVIDERE')) { await this.menuLinkCondividere(msg); } else if (testo === Menu.EXIT_TELEGRAM) { await this.menuExitToTelegram(msg); } else if (testo === Menu.ADMIN) { await this.menuAdmin(msg); } else if (testo === Menu.AIUTO) { await this.menuAiuto(msg); } else if (testo === Menu.LANG) { await this.menuLang(msg); } else if (testo === Menu.MSGATUTTI) { await this.menumsgAll(msg); } else if (testo === Menu.MSGSTAFF) { await this.menumsgStaff(msg); } else if (testo === Menu.MSGAPPARTIENE_CIRCUITI_RIS) { await this.menumsgAppartieneCircuitiRis(msg); } else if (testo === Menu.MSGPAOLO) { await this.menumsgPaolo(msg); } else if (cmd1 === Menu.EXECSH) { if (rec.user && cmd2) { let isAdmin = rec.user ? rec.user.profile.admin_telegram : false; if (isAdmin) { const ris = await tools.execScriptByTelegram(this.idapp, msg, cmd2, 'Eseguo lo script'); } } } else if (cmd1 === Menu.LOG_SRV) { if (rec.user) { let isAdmin = rec.user ? rec.user.profile.admin_telegram : false; if (isAdmin) { await this.menuLogSrv(rec, msg, cmd2); } } } else if (cmd1 === Menu.REBOOT_SRV) { if (rec.user) { let isAdmin = rec.user ? rec.user.profile.admin_telegram : false; if (isAdmin) { await this.menuRebootSrv(rec, msg, cmd2); } } } else if (cmd1 === Menu.RESTART_SRV) { if (rec.user) { let isAdmin = rec.user ? rec.user.profile.manage_telegram : false; if (isAdmin) { await this.menuRestartSrv(rec, msg, cmd2); } } // } else if (testo === Menu.MSG_NO_7_REQ) { // await this.menumsg_No_7_Req(msg); // } else if (testo === Menu.MSG_NO_9_REQ) { // await this.menumsg_No_9_Req(msg); // } else if (testo === Menu.NESSUN_IMBARCO_7REQ) { // await this.menumsgGenerico(msg, Destin.NESSUN_IMBARCO_7REQ); // } else if (cmd1 === Menu.MSG_TO_NAVE) { // await this.menumsg_to_Nave(msg, cmd2); // } else if (testo === Menu.MSG_SI_INVITATI_NO_7REQ_INVITATI) { // await this.menumsg_Si_Invitati_No_7Req(msg); } else if (cmd1 && cmd1.toLowerCase() === Menu.MSG_TO_USER) { await this.menumsg_A_Utente(msg); } else if (testo === Menu.SETPICPROFILE) { await this.setPhotoProfile(rec.user, msg.from.id); } else if (testo === Menu.RESETPWD) { await this.setResetPwd(rec, msg); } else if (this.isSelMenu(msg, testo, 'INDIETRO') || testo === Menu.it.INDIETRO) { await this.msgScegliMenu(msg); } else if (this.isSelMenu(msg, testo, 'ESCI_DA_CHAT')) { await this.sendMsg(msg.chat.id, 'Uscito dalla Chat con ' + oldusername); rec.msgall_username_specifico = ''; } else { await this.isMenuNotVerified(rec, msg, notlast); } } catch (e) { console.error('isMenu', e); } } getsymb(symb, valid, isnum, num, smileif) { let str = symb + ': '; if (valid) str += emo.CHECK_VERDE; else str += emo.CROSS_ROSSA; if (isnum) { str += ' ' + getemojibynumber(num); if (smileif) str += emo.SMILE_STAR; } return str + ' '; } isdreamset(user) { if (user) { if (user.profile.my_dream) if (user.profile.my_dream.length > 10) return true; } return false; } ispayment(user) { if (user) { if (!!user.profile.paymenttypes) { /*if (user.profile.paymenttypes.includes('paypal')) { if (user.profile.email_paypal) { ispaypal = true } }*/ if (!!user.profile) if (!!user.profile.paymenttypes) { return user.profile.paymenttypes.length >= 1; } } } return false; } async menuAccedi(msg) { let status = this.getstatusInMemory(msg); } getlang(msg) { const rec = this.getRecInMem(msg); if (!!rec) { if (rec.user) { rec.lang = rec.user.lang; } if (rec.lang !== '' && rec.lang !== undefined) return rec.lang; else { return msg.from.language_code; } } } async getLavagnaByUser(user, msg) { let mystr = ''; const dashboard = await User.getDashboard( this.idapp, user.aportador_solidario, user.username, user.aportador_solidario_name_surname ); const downline = await User.getDownline(this.idapp, user.aportador_solidario, user.username); let numpersone = downline.downline ? downline.downline.length : 0; let invitati_attivi = dashboard.myself.numinvitatiattivi; mystr = ''; // if (dashboard.aportador) { // mystr = emoji.get('seedling') + ` Chi ti ha invitato: ${dashboard.aportador.username} (${dashboard.aportador.name} ${dashboard.aportador.surname})\n`; // } else { // mystr = 'Chi ti ha invitato: Sei il Primo! '; // } // mystr += `____________________________________________\n`; let tuttie9 = false; let mystrnave = ''; if (user) { mystr += tools.get__('BENVENUTO', this.getlang(msg)) + ' ' + user.name + ' (' + user.username + ') ' + emo.DIZZY + '\n\n'; tuttie9 = dashboard.myself.qualified && numpersone >= 2 && invitati_attivi >= 2; mystrnave = await Nave.getNaveByUser(this.idapp, user.username, user.lang, true); if (mystrnave === '' && tuttie9) { mystr += tools.gettranslate('NO_PROG', user.lang); } if (!!mystrnave) { mystr += '✨✨✨' + tools.get__('TUE_NAVI', this.getlang(msg)) + ':\n'; mystr += mystrnave; } else { if (!tuttie9) { mystr += dashboard.myself.qualified ? emo.SMILE_STAR + tools.get__('HAI_I_7_REQUISITI', this.getlang(msg)) + emo.SMILE_STAR : emo.EXCLAMATION_MARK + tools.get__('NON_HAI_I_7_REQUISITI', this.getlang(msg)); mystr += '\n\n'; } // mystr += tuttie9 ? emo.SMILE_STAR + tools.get__('HAI_I_9_REQUISITI', this.getlang(msg)) + emo.SMILE_STAR : emo.EXCLAMATION_MARK + tools.get__('NON_HAI_I_9_REQUISITI', this.getlang(msg)); mystr += '\n\n'; mystr += tools.get__('INFO_LA_MIA_LAVAGNA', this.getlang(msg)); mystr += '\n' + '1. ' + this.getsymb(emo.ENVELOPE, user.verified_email); mystr += tools.get__('EMAIL', this.getlang(msg)) + ' '; mystr += user.verified_email ? tools.get__('VERIF', this.getlang(msg)) : tools.get__('EMAIL_NON_VERIF', this.getlang(msg)); mystr += '\n2. ' + this.getsymb(emo.ROBOT_FACE, true) + tools.get__('BOT', this.getlang(msg)) + ' '; mystr += tools.get__('VERIF', this.getlang(msg)); mystr += '\n3. ' + this.getsymb( emo.PENCIL, tools.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES) ) + tools.get__('LINEE_GUIDA', this.getlang(msg)); mystr += '\n4. ' + this.getsymb( emo.TV, tools.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI) ) + tools.get__('VIDEO_INTRO', this.getlang(msg)); // mystr += '\n5. ' + this.getsymb(emo.EYES, user.profile.saw_zoom_presentation) + tools.get__('ZOOM_PARTECIPATO', this.getlang(msg)); // mystr += '\n6. ' + this.getsymb(emo.DREAM, this.isdreamset(user)) + tools.get__('SCRITTO_SOGNO', this.getlang(msg)); mystr += '\n7. ' + this.getsymb(emo.CREDIT_CARD, this.ispayment(user)) + tools.get__('PAYMENTS', this.getlang(msg)); } // } else{ // mystr += tools.get__('TELEGRAM_NOT_CONNECTED', msg) + ' ' + emoji.get('e-mail'); } // numpersone = 2; if (!mystrnave) { mystr += '\n8. ' + this.getsymb(emo.INVITATI, numpersone >= 2, numpersone, numpersone, numpersone >= 3) + tools.get__('INVITATI', this.getlang(msg)); mystr += '\n9. ' + this.getsymb(emo.INVITATI, invitati_attivi >= 2, invitati_attivi, invitati_attivi, invitati_attivi >= 3) + tools.get__('INVITATI_ATTIVI', this.getlang(msg)) + '\n' + '\n'; if (numpersone > 0) { mystr += tools.get__('INVITATI_LISTA', this.getlang(msg)) + ':\n'; let index = 1; downline.downline.forEach((user) => { mystr += '🌠' + ` ${index}°: `; mystr += user.qualified ? emo.CHECK_VERDE : emo.CROSS_ROSSA; mystr += `${user.name} ${user.surname} (${user.username})\n`; index++; }); } else { mystr += tools.get__('NESSUN_INVITATO', this.getlang(msg)) + tools.ACAPO; } } // if (dashboard.downnotreg) { // if (dashboard.downnotreg.length > 0) { // mystr += '\n' + emo.QUESTION_MARK + ' ' + tools.get__('NONREG', msg) + ':' + emo.QUESTION_MARK + '\n'; // let index = 1; // dashboard.downnotreg.forEach((user) => { // mystr += ` - ${index}°: ${user.name} ${user.surname} (tel: ${user.cell_complete})\n`; // index++; // }); // } // } if (tuttie9) mystr += '\n' + printf(tools.get__('INFO_LAVAGNA_SITO', this.getlang(msg))); else mystr += '\n' + printf(tools.get__('INFO_LAVAGNA_SITO_COMPLETARE', this.getlang(msg)), tools.getHostByIdApp(this.idapp)); return mystr; } async menuLavagna(msg) { const rec = this.getRecInMem(msg); let mystr = ''; if (rec.user) { mystr = await this.getLavagnaByUser(rec.user, msg); } if (!!mystr) await this.sendMsg(msg.chat.id, mystr); } async menuNave(msg) { const rec = this.getRecInMem(msg); let mystr = ''; if (!rec.user) return ''; let username_to_check = rec.user.username; let arrstringa = msg.text.split(' '); if (!!arrstringa) { if (arrstringa.length > 1) { let last = arrstringa.slice(-1)[0]; if (!isNaN(last)) { // ind_order_to_check = last; } } } mystr = await Nave.getNaveByUser(this.idapp, username_to_check, rec.user.lang, true); if (!!mystr) await this.sendMsg(msg.chat.id, mystr); } async menuLinkCondividere(msg) { const rec = this.getRecInMem(msg); let mystr = ''; if (rec.user) { mystr += printf( tools.get__('INFO_LINK_DA_CONDIVIDERE', this.getlang(msg)), tools.getHostByIdApp(this.idapp) + '/registrati/' + rec.user.username ); mystr += tools.ACAPO + tools.ACAPO + printf(tools.get__('INFO_LINK_ZOOM', this.getlang(msg)), tools.getlinkzoom(null)); await this.sendMsg(msg.chat.id, mystr); } } async menuExitToTelegram(msg) { const rec = this.getRecInMem(msg); if (rec.user) { await User.SetTelegramIdSuccess(this.idapp, rec.user._id, 0).then((recuser) => { if (recuser) { this.deleteRecInMem(msg); this.sendMsg(msg.chat.id, getstr(rec.user.lang, 'MSG_EXIT_TELEGRAM')); } }); } else { this.deleteRecInMem(msg); } } async menuInformazioni(msg) { const mystr = 'Informazioni Aggiuntive: ...'; await this.sendMsg(msg.chat.id, mystr); } async getNextZoom(msg) { const listazoom = await CalZoom.findAllIdApp(this.idapp); const nextzoom = await CalZoom.getNextZoom(this.idapp); let mystr = ''; mystr += emo.STARS + tools.get__('ZOOM_CONFERENCE', this.getlang(msg)) + emo.STARS + '\n\n'; // let pwd = 'Password: 123123'; let index = 1; listazoom.forEach((evento) => { let iniziata = false; if (nextzoom) iniziata = nextzoom._id.toString() === evento._id.toString(); let lang = this.getlang(msg); if (iniziata) { mystr += emo.CHECK_VERDE + ' ' + tools.get__('ZOOM_INIZIATO', lang) + ' ' + emo.CHECK_VERDE + '\n'; } mystr += tools.getflagtelegrambyLang(evento.lang) + ` ${emo.EYES} ${tools.getstrDateTimeShort(evento.date_start, this.getlang(msg))} ${emo.EYES}`; mystr += `\n${evento.title}\n(${evento.note})`; mystr += `\n${tools.getlinkzoom(evento)}\n\n`; if (nextzoom) { if (iniziata) { mystr += emo.FIRE + tools.get__('CLICCA_ENTRA', this.getlang(msg)) + ' ' + emo.FIRE + '\n'; mystr += tools.getlinkzoom(evento) + '\n'; mystr += '\n'; //mystr += pwd + '\n\n'; } } index++; }); if (!nextzoom && index > 1) { mystr += '✨✨✨✨✨✨✨✨✨✨✨✨\n' + tools.get__('CLICCA_PER_ZOOM', this.getlang(msg)) + '\n' + '✨✨✨✨✨✨✨✨✨✨✨✨\n'; } return mystr; } async menuZoom(msg) { let mystr = await this.getNextZoom(msg); await this.sendMsg(msg.chat.id, mystr); } async menuAiuto(msg) { const mystr = this.getstrChatHelp(); await this.sendMsg(msg.chat.id, mystr); } async menuAdmin(msg) { const mystr = tools.get__('SCEGLI_VOCE', this.getlang(msg)); await this.sendMsg(msg.chat.id, mystr, MenuAdmin); } async menuLang(msg) { const mystr = tools.get__('SCEGLI_VOCE', this.getlang(msg)); await this.sendMsg(msg.chat.id, mystr, MenuLang); } getDestinStr(msg, destin, rec) { if (destin === Destin.TUTTI) return 'TUTTI'; else if (destin === Destin.STAFF) return 'STAFF'; else if (destin === Destin.PAOLO) return 'PAOLO'; else if (destin === Destin.APPARTIENE_CIRCUITO_RIS) return 'APPARTIENE_CIRCUITO_RIS'; else if (destin === Destin.NO_7_REQ) return 'No 7 Requisiti'; else if (destin === Destin.NO_9_REQ) return 'No 9 Requisiti'; else if (destin === Destin.SI_INVITATI_NO_7REQ_INVITATI) return '2 Invitati ma NO Requisiti'; else if (destin === Destin.MSG_TO_NAVE) return 'Nave ' + rec.extraparam; else if (destin === Destin.NESSUN_IMBARCO_7REQ) return 'No Imbarcati (7 Req) '; else if (destin === Destin.A_UTENTE) { const rec = this.getRecInMem(msg); return rec.msgall_username_specifico; } else if (destin === Destin.DOMANDA) { const rec = this.getRecInMem(msg); return rec.msg_username_domanda; } else if (destin === Destin.RISPOSTA) { const rec = this.getRecInMem(msg); return rec.msg_username_risposta; } } async menumsgAll(msg) { await this.menumsgGenerico(msg, Destin.TUTTI); } async menumsgStaff(msg) { await this.menumsgGenerico(msg, Destin.STAFF); } async menumsgAppartieneCircuitiRis(msg) { await this.menumsgGenerico(msg, Destin.APPARTIENE_CIRCUITO_RIS); } async menumsgPaolo(msg) { await this.menumsgGenerico(msg, Destin.PAOLO); } nonAbilitato(msg) { MyTelegramBot.local_sendMsgTelegramByIdTelegram( this.idapp, msg.chat.id, 'Utente Non abilitato o codice non valido ad eseguire questa funzione' ); } chisono(rec) { if (rec && rec.user) { return 'Eseguito da ' + rec.user.username + ': '; } } async menuRestartSrv(rec, msg, cmd2) { console.log('menuRestartSrv') if (cmd2 === '6711') { const freeSpace = await tools.getFreeDiskSpace(); const strfree = `Spazio libero su disco: ${freeSpace}`; await MyTelegramBot.sendMsgTelegramToTheAdminAllSites( this.chisono(rec) + ' sta rilanciando il Server NODE.JS... \n' + strfree ); let file = '/opt/scripts/production_restart_server.sh'; if (process.env.NODE_ENV === 'test') { file = '/opt/scripts/test_restart_server.sh'; } let messaggio = this.chisono(rec) + ' Restart il Server (Node.Js) : ' + file + ' ' + process.version; messaggio += '\nVersione Server: ' + (await tools.getVersServer()); const ris = await tools.execScriptByTelegram(this.idapp, msg, file, messaggio); } else { this.nonAbilitato(msg); } } async menuLogSrv(rec, msg, cmd2) { if (cmd2 === '6711') { const freeSpace = await tools.getFreeDiskSpace(); const strfree = `Spazio libero su disco: ${freeSpace}`; console.log(strfree); const ris = await tools.execScriptByTelegram( this.idapp, msg, '~/batch/logserver.sh', this.chisono(rec) + ' Visualizzo il Log del Server... \n' + strfree ); } else { this.nonAbilitato(msg); } } async menuRebootSrv(rec, msg, cmd2) { if (cmd2 === '6711') { await MyTelegramBot.sendMsgTelegramToTheAdminAllSites( this.chisono(rec) + ' ha effettuato il Reboot del Server! ...' ); const ris = await tools.execScriptByTelegram( this.idapp, msg, '~/batch/esegui_reboot.sh', this.chisono(rec) + ' Eseguo il Reboot del Server !...' ); } else { this.nonAbilitato(msg); } } async menumsg_No_7_Req(msg) { await this.menumsgGenerico(msg, Destin.NO_7_REQ); } async menumsg_No_9_Req(msg) { await this.menumsgGenerico(msg, Destin.NO_9_REQ); } async menumsg_to_Nave(msg, nave) { await this.menumsgGenerico(msg, Destin.MSG_TO_NAVE, undefined, nave); } async menumsg_Si_Invitati_No_7Req(msg) { await this.menumsgGenerico(msg, Destin.SI_INVITATI_NO_7REQ_INVITATI); } async menumsg_A_Utente(msg) { const arr = msg.text.split(' '); if (!!arr && arr.length > 1) { const username = arr[1]; const rec = this.getRecInMem(msg); rec.msg_wait = true; await this.SendMsgToUser(msg, rec, username, msg.text); } } permitSendMsg(user) { return User.isAdmin(user.perm); } async menumsgGenerico(msg, dest, username, extraparam) { const rec = this.getRecInMem(msg); if (rec.user) { if (this.permitSendMsg(rec.user)) { rec.msgall_status = StatusMSGALL.ASK; rec.msgall_achi = dest; rec.extraparam = extraparam; if (!!username) { rec.msgall_username_specifico = username; } const mystr = 'Scrivi qui un Messaggio da inviare a' + ' [' + this.getDestinStr(msg, dest, rec) + ']:'; await this.sendMsg(msg.chat.id, mystr, MenuSend); } } } async menumsgDomanda( msg, cmd, dest, username, extraparam, domanda, msgYes, msgNo, destYes, destNo, username_risposta ) { const rec = this.getRecInMem(msg); if (rec.user) { rec.msgall_status = StatusMSGALL.CONFIRM; rec.msgall_achi = dest; rec.extraparam = extraparam; rec.cmd_to_set = cmd; rec.msg_username_domanda = username; rec.msg_username_risposta = username_risposta; rec.msgtosent = msgYes; rec.msgNo = msgNo; rec.msg_toDest_yes = destYes; rec.msg_toDest_no = destNo; return this.ChiediSINO(msg, domanda); } } getlink(qualelink) { if (qualelink === 'website') { return ''; } else if (qualelink === 'biblio') { return ''; } else if (qualelink === 'help') { return tools.HELP_CHAT; } else if (qualelink === 'faq') { return ''; } } async menuAssistenza(msg) { const sito = this.getlink('website'); const empower = this.getlink('empower'); const biblio = this.getlink('biblio'); const faq = this.getlink('faq'); let help = ''; let helpaperta = true; /*if (tools.isMonToFri() && tools.isBetweenTwoTime('9:00:00', '19:00:00')) { help = '✅ ' + this.getlink('help'); } else { help = "🔴 [ORA CHIUSA - NOW CLOSED]"; helpaperta = false; }*/ help = '✅ ' + this.getlink('help'); let mytext = ''; if (this.getlang(msg) === 'it') mytext = printf(tools.get__('TESTO_ASSISTENZA', this.getlang(msg)), sito, biblio, empower, faq, help); else mytext = printf(tools.get__('TESTO_ASSISTENZA', this.getlang(msg)), sito, biblio, empower, help); let menu = null; const rec = this.getRecInMem(msg); if (!rec.user) { menu = null; } await this.sendMsg(msg.chat.id, mytext, menu); } existInMemory(msg) { const rec = this.getRecInMem(msg); return !!rec; } getstatus(rec) { if (!!rec) return rec.status; else return Status.NONE; } getstatusInMemory(msg) { const rec = this.getRecInMem(msg); return this.getstatus(rec); } getRecInMem(msg) { return this.arrUsers.find((rec) => rec.id === this.getchatid(msg)); } getRecInMemById(id) { return this.arrUsers.find((rec) => rec.id.toString() === id.toString()); } getRecByUsername(username) { return this.arrUsers.find((rec) => rec.username_bo === username); } setRecByUsername(username, myrec) { const ind = this.arrUsers.findIndex((rec) => rec.username_bo === username); if (ind >= 0) { this.arrUsers[ind] = myrec; } } deleteRecInMem(msg) { this.arrUsers = this.arrUsers.filter((rec) => rec.id !== this.getchatid(msg)); } async getUser(msg, rec, conmsg) { let myid = 0; let ok = false; let mystruser = tools.getFirstWord(msg.text.trim()); const user = await User.findByUsername(this.idapp, mystruser, true); if (!user) { if (conmsg) { await this.sendMsg(msg.from.id, getstr(this.getlang(msg), 'MSG_ERRORE_USERNAME_NOT_FOUND'), null); const lang = this.getlang(msg); // const textman = msg.chat.first_name + ' ' + msg.chat.last_name + ' sta tentando di autenticarsi con il BOT (lang=' + lang + ') (username che scrive: ' + msg.text + ') '; // await local_sendMsgTelegramToTheManagers(this.idapp, textman, msg); rec.username_bo = ''; } } else { rec.username_bo = user.username; myid = user._id; ok = true; } return { rec, user, myid, ok }; } async setUsernameBo(msg) {} async askUsernameInvitante(msg, linkreg) { try { let rec = this.getRecInMem(msg); if (msg.text === undefined || msg.text === 'undefined') return false; if (rec && !rec.aportador_solidario) { rec.status = Status.SET_USERNAME_INVITANTE; let mystr = getstr(this.getlang(msg), 'MSG_ASK_USERNAME_INVITANTE', null); if (this.idapp === tools.RISO) { mystr += getstr(this.getlang(msg), 'MSG_NEW_REG'); } await this.sendMsg(msg.chat.id, mystr); } else { // if (linkreg) // this.asktoRegistrationByLink(msg); } } catch (e) { console.error('Error setUsernameBo:', e); } } async sendMsgByTemplate(title, myuser) { try { const msg = await MsgTemplate.getMsgByTitleAndLang(myuser.idapp, title, myuser.lang); const mytext = await tools.convertSpecialTags(myuser, msg.body); return await this.sendMsg(myuser.profile.teleg_id, mytext); } catch (e) { console.error('ERR sendMsgByTemplate', e); } } async sendMsgByTemplateByMsgStrutt(title, msg) { try { let langcode = 'it'; let id = 0; try { langcode = msg.from.language_code; id = msg.from.id; } catch (e) {} const mymsg = await MsgTemplate.getMsgByTitleAndLang(tools.RISO, title, langcode); const mytext = await tools.convertSpecialTags(null, mymsg.body); if (id > 0) return await this.sendMsg(id, mytext); } catch (e) { console.error('ERR sendMsgByTemplateByMsgStrutt', e); } } async sendMsgByTextByMsgStrutt(keytext, msg) { try { let langcode = 'it'; let id = 0; try { id = msg.from.id; langcode = msg.from.language_code; } catch (e) {} const text = getstr(langcode, keytext); const mytext = await tools.convertSpecialTags(null, text); if (id > 0) return await this.sendMsg(id, mytext); } catch (e) { console.error('ERR sendMsgByTextByMsgStrutt', e); } } async checkIfUsernameTelegramSet(msg) { try { if (!msg.from.username) { await this.sendMsgByTemplateByMsgStrutt('MSG_SET_USERNAME', msg); // await this.sendMsgByTextByMsgStrutt('MSG_SET_USERNAME_TELEGRAM', msg); return false; //await this.sendMsgByTemplate('MSG_SET_USERNAME', myuser); } return true; } catch (e) { console.error('e'); return false; } } async setUsernameInvitante(msg) { try { let mymsg = msg.text?.toString()?.trim().toLowerCase(); let nomeapp = tools.getNomeAppByIdApp(this.idapp); if (!!mymsg) { const rec = this.getRecInMem(msg); let aportador_solidario = rec.aportador_solidario; if (!aportador_solidario) { aportador_solidario = mymsg; aportador_solidario = tools.removeAtChar(aportador_solidario); let user = await User.getUserShortDataByUsername(this.idapp, aportador_solidario); if (!user) { // check if is username telegram inserted user = await User.getUserShortDataByUsernameTelegram(this.idapp, aportador_solidario); } if (user) rec.aportador_solidario = user.username; } if (rec.aportador_solidario) { // Link per Registrarsi this.asktoRegistrationByLink(msg); } else { // rec.status = Status.WAITFOR_USERNAME_INVITANTE; rec.status = Status.SET_USERNAME_INVITANTE; const str2 = '\n' + getstr(this.getlang(msg), 'MSG_ASK_USERNAME_INVITANTE', nomeapp); if (msg.from.username) console.log(msg.from.username + ' ha digitato: ' + msg.text); await this.sendMsg( msg.from.id, getstr(this.getlang(msg), 'MSG_ERRORE_INVITANTE_NOT_FOUND', nomeapp) + str2, null ); } } } catch (e) { console.error('Error setUsernameInvitante', e); } } async setVerifyCode(msg) { try { if (!!msg.text) { const code = msg.text.toString().trim(); const rec = this.getRecInMem(msg); let user = await User.findByUsername(this.idapp, rec.username_bo, true); let telegcode = 0; if (user) { telegcode = user.profile.teleg_checkcode.toString(); } else { await this.sendMsg(msg.from.id, getstr(this.getlang(msg), 'MSG_ERRORE_USERNAME_NOT_FOUND'), null); return; } if (code.length < 7) { if (rec) { if (code === telegcode) { try { await User.setUsernameTelegram( this.idapp, user._id, msg.from.username || '', msg.from.first_name || '', msg.from.last_name || '' ); } catch (e) {} // let ris = await this.getUser(msg, rec, false); rec.status = Status.VERIFIED; rec.datemenu_updated = null; rec.menuDb = null; const recuser = await User.SetTelegramIdSuccess(this.idapp, user._id, msg.from.id); if (recuser) { console.log(recuser.username, " SI E' VERIFICATO CON TELEGRAM !"); let username = recuser.name; if (!!msg.from.username) { await MyTelegramBot.askConfirmationUser(this.idapp, shared_consts.CallFunz.REGISTRATION, recuser); } else { console.log(" ... MA GLI MANCA L'USERNAME TELEGRAM !! "); } // this.checkIfUsernameTelegramSet(msg, recuser); // local_sendMsgTelegramToTheManagers(this.idapp, recuser.name + ' ' + recuser.surname + ' si è Verificato a Telegram BOT! (lang=' + recuser.lang + ')' + emo.STARS, msg); } else { this.sendMsgLog(msg.from.id, getstr(this.getlang(msg), 'MSG_ERR_UNKNOWN_VERIFY_CODE')); } } else { if (rec.retry < 2) { rec.retry++; await this.sendMsgLog( msg.from.id, printf(getstr(this.getlang(msg), 'MSG_ERR_VERIFY_CODE'), tools.getHostByIdApp(this.idapp)) ); } else { rec.status = Status.NONE; await this.sendMsgLog(msg.from.id, getstr(this.getlang(msg), 'MSG_ERRORE_USERNAME_ANNULLA')); this.deleteRecInMem(msg); } } } } else if (msg.text.length === 0) { if (rec) rec.status = Status.NONE; await this.sendMsgLog(msg.from.id, getstr(this.getlang(msg), 'MSG_ERRORE_USERNAME_ANNULLA')); } else { await this.sendMsgLog(msg.from.id, getstr(this.getlang(msg), 'MSG_ERRORE_VERIFY_CODE_MAXLEN')); } } } catch (e) { console.error('Error setVerifyCode', e); } } async addUserInDB_enteringInTelegramBot(msg) { try { // cerca se esiste già l'utente in Memoria const rec = this.getRecInMem(msg); if (!rec.user) { // cerca se esiste già l'utente con il suo ID Telegram const user = await User.UserByIdTelegram(this.idapp, msg.from.id); if (!user) { // Se non esiste già, creo la registrazione dell'Utente, senza password: const myuserdata = { idapp: this.idapp, username: msg.from.username || msg.from.id, name: msg.from.first_name || '', lang: msg.from.language_code || 'it', surname: msg.from.last_name || '', profile: { teleg_id: msg.from.id, }, }; const recuser = await FuncUsers.createRegistration_withTelegram(myuserdata); if (recuser) { rec.user = recuser; console.log(recuser.username, " SI E' VERIFICATO CON TELEGRAM !"); // let username = recuser.name; /*if (!!msg.from.username) { await MyTelegramBot.askConfirmationUser(this.idapp, shared_consts.CallFunz.REGISTRATION, recuser); } else { console.log(' ... MA GLI MANCA L\'USERNAME TELEGRAM !! '); } */ } } } return { ris: !!rec.user, recuser: rec.user }; } catch (e) { console.error('Error addUserInDB_enteringInTelegramBot', e); } return { ris: false, recuser: null }; } async sistemaRecDest(rec, msg) { let recdest = this.getRecByUsername(rec.msgall_username_specifico); if (!recdest) { const userdest = await User.findByUsername(this.idapp, rec.msgall_username_specifico); if (!!userdest) { let msgdest = msg; msgdest.from.id = userdest.profile.teleg_id; await this.createIfNotExist(msgdest); recdest = this.getRecByUsername(rec.msgall_username_specifico); } } if (!!recdest) { recdest.msgall_username_specifico = rec.username_bo; } else { rec.msgall_username_specifico = ''; } return recdest; } async setCmdToUsername(rec, username, cmd_to_set, valuebool) { if (cmd_to_set === Cmd.VALIDATE_REGISTRATION) { return await User.setVerifiedByAportador(rec.user.idapp, username, valuebool); } } async sendMsgToAll(rec, msg, texttosend, destin) { try { if (texttosend.length < 3 && destin !== Destin.A_UTENTE) { // NOTHING } else { let contanumutenti = 0; let usersall = null; let myusername = ''; if (destin === Destin.A_UTENTE) { myusername = rec.msgall_username_specifico; } else if (destin === Destin.DOMANDA) { myusername = rec.msg_username_domanda; } else if (destin === Destin.RISPOSTA) { myusername = rec.msg_username_risposta; } if (myusername) usersall = await User.getUsersTelegALL(rec.user.idapp, myusername); else usersall = await User.getUsersTelegALL(rec.user.idapp); let nummsgsent = 0; let textdainviare = ''; let preparatesto = ''; let myid = ''; if (this.isSelMenu(msg, texttosend, 'ZOOM')) { texttosend = await this.getNextZoom(msg); } const cmd = texttosend?.toLowerCase(); if (usersall) { if (this.isSelMenu(msg, cmd, 'INDIETRO')) { rec.msgall_status = StatusMSGALL.NONE; return; } tools.writeEventsLog(this.getDestinStr(msg, destin, rec) + ':\n' + texttosend); // let chiedisino = false; for (const utente of usersall) { let FormDaMostrare = null; const lang = utente.lang; if (!utente.deleted && !utente.sospeso) { if (this.isSelMenu(msg, texttosend === 'LAVAGNA')) { textdainviare = await this.getLavagnaByUser(utente, msg); } else if (destin === Destin.A_UTENTE) { textdainviare = texttosend; } else { textdainviare = texttosend; } let invia = false; if (destin === Destin.STAFF) { invia = User.isManager(utente.perm); } else if (destin === Destin.APPARTIENE_CIRCUITO_RIS) { invia = await User.ExistAtLeastOneCircuit(utente.idapp, utente.username); } else if (destin === Destin.TUTTI) { invia = true; } else if (destin === Destin.PAOLO) { invia = utente.username === shared_consts.ADMIN_USER_SERVER; } else if (destin === Destin.A_UTENTE) { invia = utente.username === rec.msgall_username_specifico; } else if (destin === Destin.DOMANDA) { invia = utente.username === rec.msg_username_domanda; } else if (destin === Destin.RISPOSTA) { invia = utente.username === rec.msg_username_risposta; } else if (destin === Destin.NO_7_REQ) { invia = !(await User.isUserQualified7(this.idapp, utente.username)); } else if (destin === Destin.MSG_TO_NAVE) { // invia = !await Nave.findDonatoreByNave(this.idapp, rec.extraparam); } // TEST invia = true; if (invia) { let inviaveramente = false; if (cmd === RICEVI_EMAIL) { preparatesto += utente.email + ', '; } else if (cmd === NOME_COGNOME) { preparatesto += utente.name + ' ' + utente.surname + '(' + utente.username + ')' + '\n'; } else if (cmd === CONTA_SOLO) { contanumutenti++; // Niente } else if (cmd === CHEDI_SE_IMBARCARTI) { textdainviare = tools.gettranslate('VUOI_IMBARCARTI', lang); FormDaMostrare = this.getInlineKeyboard(lang, [ { text: Menu[lang].SI, callback_data: InlineCmd.VOGLIO_IMBARCARMI + tools.SEP + utente.username, }, { text: Menu[lang].NO, callback_data: InlineCmd.NON_VOGLIO_IMBARCARMI + tools.SEP + utente.username, }, ]); inviaveramente = true; } else { inviaveramente = true; } if (inviaveramente) { textdainviare = await tools.convertSpecialTags(utente, textdainviare); if (destin === Destin.A_UTENTE) { await this.sistemaRecDest(rec, msg); await this.sendMsg( utente.profile.teleg_id, '[' + rec.username_bo + ' ti scrive]:\n' + textdainviare, MenuChat ); } else { // if (chiedisino) { // this.ChiediSINO(msg, textdainviare); // } else { // TEST let telegid = utente.profile.teleg_id; // if (process.env.PROD === "0") { // telegid = 12429864; // } if (rec.forwardMessage && rec.chatId && rec.messageId) { // Inoltra il messaggio alla stessa chat o ad un'altra this.bot.forwardMessage(rec.chatId, telegid, rec.messageId); } else { await this.sendMsg(telegid, textdainviare, null, FormDaMostrare); } // break; } await tools.snooze(100); nummsgsent++; } if (!SendMsgCmd.includes(cmd)) { if (nummsgsent % 100 === 0) { myid = await this.sendMsg( msg.chat.id, nummsgsent + ' ' + getstr(this.getlang(msg), 'MSG_MSG_INCORSO'), null, null, myid ); await tools.snooze(100); } } } } } } let msgris = ''; if (cmd === CONTA_SOLO) { msgris = contanumutenti + ' ' + getstr(this.getlang(msg), 'MSG_MSG_TOSENT'); } else if (cmd === NOME_COGNOME) { msgris = nummsgsent + ' ' + 'Utenti'; await this.sendMsg(msg.chat.id, msgris); msgris = preparatesto; } else if (cmd === RICEVI_EMAIL) { msgris = nummsgsent + ' ' + 'Email'; await this.sendMsg(msg.chat.id, msgris); msgris = preparatesto; } else { if (destin !== Destin.DOMANDA && destin !== Destin.RISPOSTA) { msgris = nummsgsent + ' ' + getstr(this.getlang(msg), 'MSG_MSG_SENT'); } } if (destin === Destin.A_UTENTE) { const recdest = await this.sistemaRecDest(rec); if (!!recdest) { await this.sendMsg( msg.chat.id, 'Conversazione Iniziata con ' + rec.msgall_username_specifico + ' !', MenuChat ); } else { await this.sendMsg(msg.chat.id, 'Utente ' + rec.msgall_username_specifico + ' non presente sul BOT !'); } } else { if (msgris) { tools.writeEventsLog(msgris); await this.sendMsg(msg.chat.id, msgris); } } } rec.start_write_msgall = false; } catch (e) { console.error(e.message); } } selectMenuHelp(msg) { return this.isSelMenu(msg, msg.text, 'INFO') || this.isSelMenu(msg, msg.text, 'ASSISTENZA'); } selectMenuLang(msg) { return ( msg.text === Menu.LANG || msg.text === Menu.LANG_EN || msg.text === Menu.LANG_IT || msg.text === Menu.LANG_ES || msg.text === Menu.LANG_FR || msg.text === Menu.LANG_SI || msg.text === Menu.LANG_PT ); } async setInit(msg) { let status = this.getstatusInMemory(msg); if (status === Status.NONE) { await this.start(msg); let status = this.getstatusInMemory(msg); if (status !== Status.VERIFIED) return Status.EXIT; } else { await this.setUser(msg); } return status; } getInvitanteByMsg(msg) { try { let mymsg = msg.text?.toString().trim().toLowerCase(); let invitante = ''; let regexpire = ''; const sep = '-'; if (mymsg.startsWith('/start')) { let myarrmsg = mymsg.split(' '); if (myarrmsg.length > 0) { mymsg = myarrmsg[1]; if (mymsg.startsWith('inv' + sep)) { let arrparams = mymsg.split(sep); if (arrparams.length > 2) { invitante = arrparams[1]; regexpire = arrparams[3]; } return { invitante, regexpire }; } } } } catch (e) {} return ''; } async setInvitante(msg, ris, crea) { let rec = this.getRecInMem(msg); if (!rec && crea) { let status = await this.setInit(msg); rec = this.getRecInMem(msg); } if (rec) { if (!rec.aportador_solidario && ris && ris.invitante) { rec.aportador_solidario = ris.invitante; rec.regexpire = ris.regexpire; rec.status = Status.SET_USERNAME_INVITANTE; } } } async receiveMsg(msg) { // Check if Username Telegram Present if (!this.checkIfUsernameTelegramSet(msg)) { return; } let status = await this.setInit(msg); if (status === Status.EXIT) { return; } const rec = this.getRecInMem(msg); let testo = msg.text?.toLowerCase()?.trim(); status = this.getstatus(rec); if (testo === Menu.EXIT_TELEGRAM) { await this.menuExitToTelegram(msg); } else if (status === Status.WAITFOR_USERNAME_TELEGRAM && !this.selectMenuHelp(msg) && !this.selectMenuLang(msg)) { // await this.setUsernameBo(msg); await this.settotheDatabase(msg); } else if (status === Status.WAITFOR_USERNAME_INVITANTE && !this.selectMenuHelp(msg) && !this.selectMenuLang(msg)) { await this.askUsernameInvitante(msg, true); // await this.settotheDatabase(msg); } else if (status === Status.SET_USERNAME_INVITANTE) { const ris = this.getInvitanteByMsg(msg); if (ris.invitante) { await this.setInvitante(msg, ris, true); } await this.setUsernameInvitante(msg); } else if (status === Status.NONE) { await this.start(msg); } else if (status === Status.VERIFIED) { let normale = true; if (rec.msgall_status === StatusMSGALL.CONFIRM) { if (this.isSelMenu(msg, msg.text, 'SI')) { // Take msg to send to ALL await this.sendMsgToAll(rec, msg, rec.msgtosent, rec.msgall_achi); } else { let msgout = rec.msgNo; if (!msgout) msgout = getstr(this.getlang(msg), 'MSG_OPERAZ_ANNULLATA'); this.sendMsg(msg.chat.id, msgout); } if (rec.msgall_achi === Destin.DOMANDA) { if (rec.msg_toDest_yes) { rec.msgall_achi = Destin.RISPOSTA; if (this.isSelMenu(msg, msg.text, 'SI')) { const ris = await this.setCmdToUsername(rec, rec.msg_username_risposta, rec.cmd_to_set, true); if (ris) { await this.sendMsgToAll(rec, msg, rec.msg_toDest_yes, rec.msgall_achi); } } else if (this.isSelMenu(msg, msg.text, 'NO')) { const ris = await this.setCmdToUsername(rec, rec.msg_username_risposta, rec.cmd_to_set, false); await this.sendMsgToAll(rec, msg, rec.msg_toDest_no, rec.msgall_achi); } } } rec.msgall_status = StatusMSGALL.NONE; normale = false; } else if (rec.msgall_status === StatusMSGALL.ASK) { if (!this.isSelMenu(msg, msg.text, 'INDIETRO')) { rec.msgtosent = msg.text; rec.entities = msg.entities; // Se contiene della formattazione allora fai il FORWARD DEL MESSAGGIO //rec.forwardMessage = !!rec.entities; rec.forwardMessage = false; rec.chatId = msg.chat.id; rec.messageId = msg.message_id; rec.msgall_status = StatusMSGALL.CONFIRM; const cmd = rec?.msgtosent?.toString()?.toLowerCase() ?? ''; let achi = this.getDestinStr(msg, rec.msgall_achi, rec); let domanda = ''; if (rec.msgall_domanda) { domanda = rec.msgall_domanda; } else { if (cmd === CONTA_SOLO) domanda = 'Confermi di vedere a quante persone arriverebbe questo messaggio, a ' + achi + ' ?\n' + rec.msgtosent; else if (cmd === RICEVI_EMAIL) domanda = 'Confermi di vedere la lista delle email di ' + achi + '?'; else if (cmd === NOME_COGNOME) domanda = 'Confermi di vedere la lista di persone ' + achi + '?'; else { if (rec.msgall_achi === Destin.A_UTENTE) domanda = "Confermi d'Iniziare una Chat messaggi con " + achi + ' ?\n' + rec.msgtosent; else domanda = "Confermi d'Inviare questo messaggio a " + achi + ' ?\n' + rec.msgtosent; } } this.ChiediSINO(msg, domanda); } else { rec.msgall_status = StatusMSGALL.NONE; await this.msgScegliMenu(msg); } normale = false; } if (normale) { // Check Menu await this.isMenu(rec, msg, msg.text, false); } } else { await this.isMenuNotVerified(rec, msg, false); } } async asktoRegistrationByLink(msg) { let rec = this.getRecInMem(msg); let visu = false; if (!rec) { rec = await this.addUser(msg); visu = true; } if (rec && !rec.username_bo) visu = true; if (visu) { const status = this.getstatus(rec); if (status === Status.SET_USERNAME_INVITANTE && rec.aportador_solidario) { let linkreg = tools.getLinkRegByIdAppAndMsgStrutt(this.idapp, msg, rec); if (process.env.LOCALE === '1') { // linkreg = 'http://localhost:8084/signup/' + rec.aportador_solidario + '/' + msg.from.username + '/' + msg.from.id; } const keyb = this.getInlineKeyboard(this.getlang(msg), [ { text: '✅ ' + i18n.__('CLICCA_QUI'), url: linkreg, }, ]); // await this.sendMsg(msg.chat.id, getstr(this.getlang(msg), printf(txt.MSG_ASK_USERNAME_BO, tools.getHostByIdApp(this.idapp)))); await this.sendMsg( msg.chat.id, getstr(this.getlang(msg), 'MSG_SIGNUP', tools.getNomeAppByIdApp(this.idapp)), null, keyb ); } else if (status === Status.WAITFOR_USERNAME_INVITANTE) { await this.askUsernameInvitante(msg, false); } return false; } return true; } async setUser(msg) { let id = this.getchatid(msg); const user = await User.UserByIdTelegram(this.idapp, id); let rec = this.getRecInMem(msg); if (user && rec) { rec.user = user; } } async setUserbyUsername(username) { const user = await User.findByUsername(this.idapp, username); let rec = this.arrUsers.find((rec) => rec.username_bo === username); if (user && rec) { rec.user = user; } } getchatid(msg) { if (msg.from.is_bot) return msg.chat.id; else return msg.from.id; } async alreadyExist(msg) { const id = this.getchatid(msg); let rec = null; try { let user = await User.UserByIdTelegram(this.idapp, id); let rec = this.getRecInMem(msg); if (user && !rec) { rec = await this.addUser(msg); } if (rec) { rec.user = user; if (user) rec.username_bo = user.username; else rec.username_bo = ''; } } catch (e) { console.error('Error: ', e); } return !!rec; } updateMenuBot() { for (let rec of this.arrUsers) { rec.menuDb = null; rec.datemenu_updated = null; } } async addUser(msg) { const lang = this.getlang(msg); const code = 100000 + Math.round(Math.random() * 899999); const rec = { id: this.getchatid(msg), code, lang, statusmsg: 0, msgcodeprec: '', sex: 0, numdomande: 0, retry: 0, username_bo: '', msgall_status: StatusMSGALL.NONE, msgall_domanda: '', msgall_achi: 0, msgall_username_specifico: '', cmd_to_set: 0, msg_username_domanda: '', msg_username_risposta: '', extraparam: '', msgtosent: '', entities: [], msgNo: '', msg_toDest_yes: '', msg_toDest_no: '', msg_wait: false, lastmenu: null, datemenu_updated: null, pageChange: false, menuSaved: {}, pagenow: 1, parse_mode: 'HTML', menuDb: null, aportador_solidario: '', }; rec.status = Status.NONE; if (!msg.from.username) { // Non ha l'Username: // Chiedi l'username sul Bot: if (tools.getConfSiteOptionEnabledByIdApp(this.idapp, shared_consts.ConfSite.AskUsernameSulBot)) { rec.status = Status.WAITFOR_USERNAME_TELEGRAM; } } else { // Ha l'Username // Chiedi l'invitante ? if (tools.getConfSiteOptionEnabledByIdApp(this.idapp, shared_consts.ConfSite.AskInvitantesulBot)) { rec.status = Status.WAITFOR_USERNAME_INVITANTE; } } if (rec.status === Status.NONE) { // Se il Sito non chiede di autenticarsi o l'invitante, allora lo Verifico direttamente ! rec.status = Status.VERIFIED; } this.arrUsers.push(rec); if (tools.getConfSiteOptionEnabledByIdApp(this.idapp, shared_consts.ConfSite.AskInvitantesulBot)) { // Aportador this.setInvitante(msg, this.getInvitanteByMsg(msg), false); } if (tools.getConfSiteOptionEnabledByIdApp(this.idapp, shared_consts.ConfSite.registerUserWithBot)) { const ris = await this.addUserInDB_enteringInTelegramBot(msg); if (ris && ris.recuser) { rec.recuser = ris.recuser; rec.status = Status.VERIFIED; } } return rec; } async insertIntoDB(msg) { return this.asktoRegistrationByLink(msg); } menuisVisible(idapp, menu) {} async loadMenuFromDb(idapp, id) { try { let load = false; const check = true; const recuser = this.getRecInMemById(id); if (recuser) { if (!recuser.datemenu_updated) load = true; } if (check) { if (recuser) { if (!recuser.menuSaved[idapp]) load = true; if (recuser.menuDb || recuser.pageChange) load = true; } } if (load) { // Check if you are Admin const user = await User.UserByIdTelegram(idapp, id); let isAdmin = user ? user.profile.admin_telegram : false; const isManager = user ? user.profile.manage_telegram : false; const isVerified = user ? user.profile.teleg_id > 0 && user.verified_by_aportador : false; recuser.menuDb = await MyBot.findAllIdApp(idapp); let arrlang = {}; let riga = 0; let arrtemp = []; let lang = ''; for (const rec of recuser.menuDb) { rec.active_mem = false; const visibilita = (tools.isBitAttivoESelez(rec.visibility, shared_consts.VISIB_ONLY_ADMIN, isAdmin) && tools.isBitAttivoESelez(rec.visibility, shared_consts.VISIB_ONLY_MANAGER, isManager) && tools.isBitAttivoESelez(rec.visibility, shared_consts.VISIB_ONLYIF_VERIFIED, isVerified)) || rec.visibility === 0; if (rec.active && rec.page === recuser.pagenow && visibilita) { rec.active_mem = true; if (true) { lang = rec.lang; if (!arrlang[rec.lang]) arrlang[rec.lang] = { menu: [] }; if (riga !== rec.riga) { if (arrtemp.length > 0) arrlang[rec.lang].menu.push(arrtemp); riga = rec.riga; arrtemp = []; } arrtemp.push(rec.label); } } } if (arrtemp.length > 0) arrlang[lang].menu.push(arrtemp); if (recuser) recuser.datemenu_updated = new Date(); recuser.pageChange = false; recuser.menuSaved[idapp] = arrlang; } return recuser ? recuser.menuSaved[idapp] : null; } catch (e) { console.log('Err loadMenuFromDb: ' + e); } } async isMenuSite(idapp, testo, lang, id) { try { // Check if Reload const recuser = await this.getRecInMemById(id); if (recuser) { if (!recuser.datemenu_updated) { await this.loadMenuFromDb(this.idapp, id); } } for (const rec of recuser.menuDb) { if (rec.active_mem) { if (rec.idapp === idapp && rec.lang === lang && rec.label?.toLowerCase() === testo) { return true; } } } } catch (e) { return false; } return false; } async getValueMenu(idapp, recuser, msg, testo, lang) { try { if (recuser) { for (const recdb of recuser.menuDb) { if (recdb.active_mem) { if (recdb.idapp === idapp && recdb.lang === lang && recdb.label?.toLowerCase() === testo) { if (recdb.type === shared_consts.BOTTYPE_TEXT) { return recdb.value; } else if (recdb.type === shared_consts.BOTTYPE_LINK) { //++TODO: Link diretto !? return recdb.value; } else if (recdb.type === shared_consts.BOTTYPE_PAGE) { if (tools.isNumber(recdb.value)) { recuser.pagenow = parseInt(recdb.value); recuser.pageChange = true; // this.setRecByUsername(recuser.username, recuser); } return ''; } else if (recdb.type === shared_consts.BOTTYPE_MENU) { if (recdb.value) { this.isMenu(recuser, msg, recdb.value, true); return shared_consts.RIS_OK; } } else if (recdb.type === shared_consts.BOTTYPE_MARKDOWN) { return recdb.value; } } } } } return ''; } catch (e) { return ''; } } async getParseModeByMenu(idapp, recuser, msg, testo, lang) { try { let parse_mode = 'HTML'; if (recuser) { for (const recdb of recuser.menuDb) { if (recdb.active_mem) { if (recdb.idapp === idapp && recdb.lang === lang && recdb.label?.toLowerCase() === testo) { if (recdb.type === shared_consts.BOTTYPE_MARKDOWN) { return 'Markdown'; } else { return parse_mode; } } } } } return ''; } catch (e) { return ''; } } async getArrBottInlineByMenu(idapp, recuser, msg, testo, lang) { try { let arr_bott_inline = []; if (recuser) { for (const recdb of recuser.menuDb) { if (recdb.active_mem) { if (recdb.idapp === idapp && recdb.lang === lang && recdb.label?.toLowerCase() === testo) { if (recdb.type === shared_consts.BOTTYPE_BOTTONI_INLINE) { const jsonString = '[{"text": "primo", "callback_data": "1"}, {"text": "sec", "callback_data": "2"}]'; const jsonObject = JSON.parse(jsonString); let myobj = JSON.parse(recdb.value); arr_bott_inline.push(myobj); } } } } } return arr_bott_inline; } catch (e) { console.error(e); return []; } } async getKeyboard(id, menu, lang) { let keyb = null; this.lastid = id; if (menu) { keyb = menu; } else { keyb = await this.loadMenuFromDb(this.idapp, id); } let mykeyb = undefined; if (!!keyb) { mykeyb = this.getmenuKey(keyb, lang); } if (mykeyb === null) { mykeyb = []; } // console.log('mykeyboard', mykeyb); return mykeyb; } modificaMsg(chatid, idmodif, text) { const form = { chat_id: chatid, message_id: idmodif, }; try { return this.bot.editMessageText(text, form); } catch (e) { console.log('Err Telegram: ' + e); } } // Soluzione 1: Converti PNG in JPG prima dell'invio async sendPhoto(chatId, imageUrl, opt) { try { // Scarica l'immagine const response = await axios.get(imageUrl, { responseType: 'arraybuffer' }); const imageBuffer = Buffer.from(response.data); // Controlla il formato e converti se necessario const metadata = await sharp(imageBuffer).metadata(); if (metadata.format === 'png') { console.log('Conversione PNG in JPG...'); const jpgBuffer = await sharp(imageBuffer).jpeg({ quality: 90 }).toBuffer(); return await this.bot.sendPhoto(chatId, jpgBuffer, opt); } // Se non è PNG, invia direttamente return await this.bot.sendPhoto(chatId, imageBuffer, opt); } catch (error) { console.error("Errore nell'invio della foto:", error); throw error; } } // Soluzione 2: Prova prima come PNG, se fallisce invia come documento async sendPhotoWithFallback(chatId, imageUrl, opt) { try { // Prova prima a inviare come foto await this.bot.sendPhoto(chatId, imageUrl, opt); } catch (error) { console.log('Invio come foto fallito, provo come documento...'); try { // Se fallisce, invia come documento await this.bot.sendDocument(chatId, imageUrl, opt); } catch (docError) { console.error("Anche l'invio come documento è fallito:", docError); throw docError; } } } async sendImageToTelegram(chatId, imageUrl, opt) { try { // Primo tentativo: invia direttamente l'URL try { return await this.bot.sendPhoto(chatId, imageUrl, opt); } catch (error) { console.log('Primo tentativo fallito, provo a convertire...'); } console.log('imageUrl', imageUrl); // Secondo tentativo: scarica e converte con sharp try { const response = await axios.get(imageUrl, { responseType: 'arraybuffer' }); const contentType = response.headers['content-type']; const imageBuffer = Buffer.from(response.data); if (!contentType.startsWith('image/')) { console.warn('Non è un formato immagine:', contentType); return await this.bot.sendDocument(chatId, imageBuffer, opt); } try { const jpgBuffer = await sharp(imageBuffer).jpeg({ quality: 90 }).toBuffer(); return await this.bot.sendPhoto(chatId, jpgBuffer, opt); } catch (err) { console.warn('Sharp conversion failed:', err.message); return await this.bot.sendDocument(chatId, imageBuffer, opt); } } catch (err) { console.warn("Errore nel download dell'immagine, provo con file locale..."); } // Terzo tentativo: accedi al file localmente try { if (!imageUrl.includes('/upload/')) { throw new Error('URL non contiene "/upload/", impossibile determinare il path locale.'); } let dirmain = ''; if (!tools.sulServer()) { dirmain = server_constants.DIR_PUBLIC_LOCALE; } const relativePath = imageUrl.split('/upload/')[1]; // es. "profile/surya1977/mygoods/1_module.jpg" const mydir = tools.getdirByIdApp(opt.idapp) + dirmain + server_constants.DIR_UPLOAD; const localPath = path.join(mydir, relativePath); console.log('Cerco il file localmente:', localPath); const localBuffer = fs.readFileSync(localPath); return await this.bot.sendDocument(chatId, localBuffer, opt); } catch (err) { console.error('Lettura file locale fallita:', err.message); } // Se tutto fallisce console.error('Tutti i tentativi di invio sono falliti'); return false; } catch (error) { console.error('Errore generale:', error); return false; } } async _inviaMsg(id, text, form, menu, msg_id, chat_id, ripr_menuPrec, opt) { if (!text) return 0; if (process.env.LOCALE === '1') { if (id !== ADMIN_IDTELEGRAM_TEST) { text = '[Msg da inviare ipoteticamente a : ' + id + ']' + '\n' + text; id = '12429864'; } } if (!!msg_id) { return this.modificaMsg(chat_id, msg_id, text); } const recmem = this.getRecInMemById(id); if (!menu) { if (recmem) { if (recmem.msgall_username_specifico !== '') { menu = MenuChat; } } } if (recmem) { recmem.lastmenu = menu; } if (ripr_menuPrec) { if (recmem && !!recmem.lastmenu) { menu = recmem.lastmenu; } } let mylang = 'it'; if (!!recmem) { mylang = recmem.lang; } try { console.log('<<< SEND MSG TELEGRAM: >>> [id=', id, ']', text.substring(0, 100)); text = text.replace(/
/g, '\n'); text = text.replace(//g, '\n'); text = text.replace(/
/g, ''); text = text.replace(//g, ''); text = text.replace(//g, ''); text = text.replace(/

/g, ''); text = text.replace(/<\/div>/g, '\n'); // text = text.replace(/<\/div>/g, ''); text = text.replace(/ /g, ' '); if (!form) { form = { parse_mode: opt && opt.parse_mode ? opt.parse_mode : 'HTML', message_id: msg_id, disable_web_page_preview: true, reply_markup: { resize_keyboard: true, keyboard: await this.getKeyboard(id, menu, mylang), keyboard_inline: opt && opt.keyboard_inline ? opt.keyboard_inline : undefined, }, }; } let inviato = false; let risSendPhoto = null; if (opt && opt.img) { if (false) { opt.img = 'https://riso.app/upload/profile/paoloar77/mybachecas/Fermentazione-Ruello-sito.png'; } opt.img = tools.fixUrl(opt.img, opt.idapp); console.log('opt.img', opt.img); risSendPhoto = await this.sendImageToTelegram(id, opt.img, { caption: text, ...form, ...opt }).catch((e) => { let blocked = false; if (e.message.indexOf('Forbidden') > 0 || e.message.indexOf('chat not found') > 0) { blocked = true; } if (!blocked) { console.error(e.message.substring(0, 200)); } if (blocked) { User.SetTelegramWasBlocked(this.idapp, id); } }); } if (risSendPhoto) { inviato = true; } if (!inviato) { return this.bot.sendMessage(id, text, form).catch((e) => { let blocked = false; if (e.message.indexOf('Forbidden') > 0 || e.message.indexOf('chat not found') > 0) { blocked = true; } if (!blocked) { console.error(e.message.substring(0, 200)); } if (blocked) { User.SetTelegramWasBlocked(this.idapp, id); // ++Todo: DA FARE ! local_sendMsgTelegramToTheManagers(this.idapp, addtext + text); } return 0; }); } return risSendPhoto; } catch (e) { if (e.message.indexOf('OK') === 0) { console.log('INFO INVIAMSG:', e.message); } else { console.error('ERROR INVIAMSG:', e.message, 'text', text.substring(0, 100)); } return 0; } } async SendMsgToUser(msg, rec, username, text) { if (rec.msg_wait) { await this.menumsgGenerico(msg, Destin.A_UTENTE, username); rec.msg_wait = false; } else { const telegid = await User.TelegIdByUsername(this.idapp, username); if (telegid > 0) { await this.sistemaRecDest(rec, msg); // await this.sendMsg(msg.chat.id, '[Msg inviato a ' + username + ']: '); await this.sendMsg(telegid, Menu.CHAT_PERSONALE + '[' + rec.username_bo + ' ti scrive]:\n' + text, MenuChat); } else { await this.sendMsg(msg.chat.id, 'Username non valido'); rec.msgall_username_specifico = ''; } } } async sendMsg(id, text, menu, form, msg_id, chat_id, ripr_menuPrec, img = '', opzioni = null) { if (!id || !text) return false; try { if (text.length > 4090) { let text1 = text.slice(0, 4090); let text2 = text.slice(4090, text.length); await this._inviaMsg(id, text1, form, menu, msg_id, chat_id, ripr_menuPrec, { img, ...opzioni }); return await this._inviaMsg(id, text2, form, menu, msg_id, chat_id, ripr_menuPrec, { img, ...opzioni }); } else { return await this._inviaMsg(id, text, form, menu, msg_id, chat_id, ripr_menuPrec, { img, ...opzioni }); } } catch (e) { console.error('Error sendMsg', e); return null; } } async sendMsgLog(id, text, menu, form, msg_id, chat_id, ripr_menuPrec) { const rec = this.getRecInMemById(id); let username = rec ? rec.username_bo : ''; if (!username) { } console.log('Msg inviato a ', username, '(', id, ')', text); return await this.sendMsg(id, text, menu, form, msg_id, chat_id, ripr_menuPrec); } getmenuKey(mymenu, lang) { let mymenuout = null; try { mymenuout = mymenu[lang].menu; } catch (e) { if (!!mymenu['it']) mymenuout = mymenu['it'].menu; } return mymenuout; } async setResetPwd(rec, msg) { try { if (rec.user) { const idapp = this.idapp; const username = rec.user.username; const lang = rec.user.lang; const link = await User.createNewRequestPwdByUsernameAndGetLink(idapp, username); if (link) { local_sendMsgTelegram(idapp, username, getstr(lang, 'MSG_RESETPWD') + '\n' + link); } } } catch (e) { console.error('Err', e); } } async setPhotoProfile(user, telegid, showmsg = true) { try { console.log('setPhotoProfile', user ? user.username : ''); if (user) { const idapp = this.idapp; const bot = this.bot; const username = user.username; const lang = user.lang; const token = this.token; const editprofile = tools.getHostByIdApp(idapp, true) + '/editprofile'; let myfileprofile = tools.getdirByIdApp(idapp, true) + server_constants.DIR_UPLOAD + '/profile/' + username + '/'; let user_profile = bot.getUserProfilePhotos(telegid); user_profile.then(function (res) { if (res.total_count === 0) { // Non ho l'accesso oppure sono davvero senza foto ! } if (res.photos[0]) { var file_id = res.photos[0][2].file_id; var file = bot.getFile(file_id); file.then(async function (result) { const file_path = result.file_path; const photo_url = 'https://api.telegram.org/file/bot' + token + '/' + file_path; // console.log('1) photo_url', photo_url); let filename = tools.extractFileName(photo_url); myfileprofile += filename; const pathfile = tools.extractFilePath(myfileprofile); await tools.mkdirpath(pathfile); // console.log('2) myfileprofile', pathfile); return tools .downloadImage(photo_url, myfileprofile) .then((ris) => { try { let resized_img_small = tools.extractFilePath(myfileprofile) + '/' + server_constants.PREFIX_IMG_SMALL + filename; // SMALL // questa opzione 'failOnError' serve per risolvere l'errore (Error: VipsJpeg: Invalid SOS parameters for sequential JPEG sharp(myfileprofile, { failOnError: false }) .resize(64, 64) .withMetadata() .toFile(resized_img_small); } catch (e) { console.error('setPhotoProfile sharp', e); } // console.log('3) setPicProfile ris', ris); return User.setPicProfile(idapp, username, filename).then((ris) => { // console.log('4) sendMsg picprofile Copied !'); if (showmsg) { local_sendMsgTelegram(idapp, username, printf(getstr(lang, 'MSG_SET_PICPROFILE'), editprofile)); } }); // console.log('scaricato'); }) .catch((err) => { console.error('Error setPhotoProfile', err); }); }); } }); } } catch (e) { console.error('Error setPhotoProfile', e); } } getInlineKeyboard(lang, arrrisp1, arrrisp2, arrrisp3) { let mykeyb = { parse_mode: 'HTML', reply_markup: { inline_keyboard: [], }, }; // text // callback_data // url const arrriga1 = []; if (!!arrrisp1) { for (const ris of arrrisp1) { arrriga1.push(ris); } } const arrriga2 = []; if (!!arrrisp2) { for (const ris of arrrisp2) { arrriga2.push(ris); } } const arrriga3 = []; if (!!arrrisp3) { for (const ris of arrrisp3) { arrriga3.push(ris); } } if (arrriga1.length > 0) mykeyb.reply_markup.inline_keyboard.push(arrriga1); if (arrriga2.length > 0) mykeyb.reply_markup.inline_keyboard.push(arrriga2); if (arrriga3.length > 0) mykeyb.reply_markup.inline_keyboard.push(arrriga3); return mykeyb; } async ChiediSINO(msg, domanda) { const lang = this.getlang(msg); if (msg.forwardMessage && msg.chatId && msg.messageId) { // Inoltra il messaggio alla stessa chat o ad un'altra this.bot.forwardMessage(msg.chatId, msg.chatId, msg.messageId); } else { this._inviaMsg(msg.from.id, domanda, { disable_web_page_preview: true, reply_markup: { resize_keyboard: true, one_time_keyboard: true, keyboard: this.getmenuKey(MenuYesNo, lang), }, }); } } async ScegliLang(msg, lang) { const rec = this.getRecInMem(msg); if (rec) { if (rec.user) { User.SetLang(null, this.idapp, rec.user._id, lang); rec.user.lang = lang; } rec.lang = lang; // await this.sendMsg(msg.chat.id, lang); this.msgScegliMenu(msg); } } async msgScegliMenu(msg) { this._inviaMsg(msg.from.id, getstr(this.getlang(msg), 'MSG_SCEGLI_MENU'), { parse_mode: 'HTML', disable_web_page_preview: true, reply_markup: { resize_keyboard: true, keyboard: await this.getKeyboard(msg.from.id, undefined, this.getlang(msg)), }, }); } } const arrTelegram = []; function getclTelegBytoken(token) { const rec = arrTelegram.find((rec) => rec.cl.token === token); if (!!rec) return rec.cl; else return null; } // Funzione per ottenere il nome del gruppo async function getGroupName(bot, groupId) { try { const chat = await bot.getChat(groupId); return chat.title; } catch (error) { console.error("Errore durante l'ottenimento del nome del gruppo:", error); return null; } } function getclTelegByidapp(idapp) { // **************************** if (appTelegramFinti.includes(idapp)) { const ind = appTelegramFinti.indexOf(idapp); if (ind >= 0) idapp = appTelegramDest[ind]; // Invia } const rec = arrTelegram.find((rec) => rec.idapp === idapp); if (!!rec) return rec.cl; else return null; } //if (!tools.testing() || true) { if (true) { let arrTeleg = MyTelegramBot.getAppTelegram(); var internetAvailable = require('internet-available'); internetAvailable() .then(() => { // .. if (appTeleg_BotOnGroup.length > 0) { console.log('TELEGRAM BOT GROUP .... '); for (const idapp of appTeleg_BotOnGroup) { const token = tools.getTelegramKeyByIdApp(idapp); const nomebot = tools.getTelegramBotNameByIdApp(idapp); if (token && nomebot) { const bot = new TelegramBot(token, { polling: true }); // Gestisce il comando /start bot.onText(/\/start/, (msg) => { console.log('START BOT GROUP ... '); /* const chatId = msg.chat.id; const message = 'Benvenuto! Usa il comando /request per inviare una richiesta di accesso al gruppo.'; bot.sendMessage(chatId, message); */ }); bot.onText(/\/request/, (msg) => { const chatId = msg.chat.id; const fromId = msg.from.id; const fromUsername = msg.from.username; const groupId = chatId; if (chatId == groupId) { const message = `Richiesta di accesso al gruppo da parte di ${msg.from.first_name} ${msg.from.last_name} (@${fromUsername})`; bot.sendMessage(groupId, message); } else { console.log('Comando /request ricevuto in una chat privata.'); } }); bot.on('text', (msg) => { console.log('TEXT...'); const chatId = msg.chat.id; const userName = msg.from.username || msg.from.first_name; const userId = msg.from.id; }); bot.on('new_chat_members', async (msg) => { const chatId = msg.chat.id; const newMembers = msg.new_chat_members; const groupId = chatId; const nomegruppo = await getGroupName(bot, groupId); // Ottiene la lista degli amministratori del gruppo const admins = await bot.getChatAdministrators(chatId); // Trova l'ID dell'amministratore del gruppo const adminId = admins.find((admin) => admin.status === 'administrator').user.id; // Verifica se il nuovo membro è stato aggiunto al gruppo if (chatId == groupId) { newMembers.forEach(async (member) => { //const message = `🔑 Nuova Richiesta di accesso al gruppo ${nomegruppo} da parte di ${member.username} (` + member.first_name + ' ' + member.last_name + ')'; const message = `Benvenuto/a ${member.first_name} (${member.username}) sul gruppo "${nomegruppo}" !`; bot.sendMessage(adminId, message); // bot.sendMessage(groupId, message); }); } }); } } } console.log('TELEGRAM STARTING.... ', process.env.NODE_ENV); for (const idapp of arrTeleg) { try { const token = tools.getTelegramKeyByIdApp(idapp); const nomebot = tools.getTelegramBotNameByIdApp(idapp); // console.log('idapp', idapp, 'token', token); if (!!token) { console.log('-------------------------------------'); console.log('*** STARTING BOT ' + nomebot); console.log('-------------------------------------'); 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}`); }); } arrTelegram.push({ idapp, cl: new Telegram(idapp, bot) }); bot.onText(/\/start/, (msg) => { console.log('*** BOT PARTITO CORRETTAMENTE !!! (Start Cmd)'); 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', async (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); // RISPOSTE ALLE CALLBACK (Bottoni) let testo_notifica_di_risposta = ''; try { const myclTelegram = getclTelegBytoken(bot.token); let dataarr = []; let data = { action: '', username: '', userDest: '', groupId: 0, circuitId: '', groupname: '', }; 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] ? dataarr[3] : '', circuitId: dataarr[4] ? dataarr[4] : '', groupname: dataarr[5] ? dataarr[5] : '', }; } } const msg = callbackQuery.message; const opts = { chat_id: msg.chat.id, message_id: msg.message_id, }; const status = await myclTelegram.setInit(msg); const rec = myclTelegram.getRecInMem(msg); const username_action = rec.user ? rec.user.username : ''; 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; 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; if (!!rec) { if (!!user) { if (data.action === InlineZoomConferma.CONFERMA_ZOOM_PRESENZA) { await User.setZoomPresenza(user.idapp, user._id, true); } else if (data.action === InlineZoomConferma.NON_CONFERMA_ZOOM_PRESENZA) { 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); nomeapp = tools.getNomeAppByIdApp(user.idapp); // await User.setFriendsCmd(req, user.idapp, data.username, userDest.username, shared_consts.FRIENDSCMD.SETFRIEND, null, true); await User.setaportador_solidario(user.idapp, data.username, userDest.username); const msgOrig = printf( getstr(userDest.lang, 'MSG_APORTADOR_DEST_CONFIRMED', nomeapp), `${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); // Invia questo msg anche all'Admin await local_sendMsgTelegramToTheAdmin(user.idapp, msgDest, msg, data.userDest); } } 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 (changed) { const nomeDest = tools.getNomeCognomeEUserNameByUser(userDest); const nomestr = tools.getNomeCognomeEUserNameByUser(user); 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.REFUSE_REQ_GROUP; 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_FIDO) { if (circuit) { // Abiglitagli il Fido cmd = shared_consts.CIRCUITCMD.SETFIDO; await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action, { groupname: data.groupname, }); } } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_CIRCUIT) { console.log(' CLICK per Aggiungere ', data.username, 'nel circuito', circuit?.name); if (circuit) { // Aggiungilo nel Circuito cmd = shared_consts.CIRCUITCMD.SET; await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action, { groupname: data.groupname, }); } } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_CIRCUIT) { if (circuit) { cmd = shared_consts.CIRCUITCMD.REFUSE_REQ; let foundIfAlreadyCircuit = false; if (data.groupname) { foundIfAlreadyCircuit = await MyGroup.ifCircuitAlreadyInGroup( user.idapp, data.groupname, circuit.name ); } else { 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, { groupname: data.groupname, }); } } } 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; // Rimuovilo nelle Amicizie const req = tools.getReqByPar(user.idapp, username_action); 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); } } } else if ( data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_HANDSHAKE ) { if (userDest) { cmd = shared_consts.FRIENDSCMD.SETHANDSHAKE; const foundIfAlreadyFriend = await User.isMyHandShake(user.idapp, data.userDest, data.username); if (!foundIfAlreadyFriend) { // Aggiungilo nelle HandShake const req = tools.getReqByPar(user.idapp, username_action); const ris = await User.setFriendsCmd(req, user.idapp, data.userDest, data.username, cmd); } } } } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.ENTRA_RIS_ITALIA) { } } // CALLBACK DI RISPOSTA AL BOT bot.answerCallbackQuery(callbackQuery.id, { text: testo_notifica_di_risposta }); } catch (e) { console.error('Error BOT callback_query', e); } /* let text; if (action === 'edit') { text = 'Edited Text'; } bot.editMessageText(text, opts); */ // bot.answerCallbackQuery(callbackQuery.id, { url }); }); } } catch (e) { console.error('Error Telegram LOOP : ' + e.message); } } }) .catch((e) => { arrTeleg = []; console.error('Error internetAvailable:' + e); }); } module.exports = MyTelegramBot;