Advertisement
CarlosDelfino

findAndSaveGroupInfo

Oct 30th, 2024
126
0
80 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     async findAndSaveGroupInfo(from, to, message){
  2.         //let resolver;
  3.         //let promise = new Promise((resolve) => {
  4.         //    resolver = resolve;
  5.         //});
  6.  
  7.         //if (this.findAndSaveGroupInfoControl) {
  8.         //    await this.findAndSaveGroupInfoControl;
  9.         //}
  10.  
  11.         //this.findAndSaveGroupInfoControl = promise;
  12.  
  13.         // Expressão regular para capturar todas as ocorrências
  14.         const regex = /https:\/\/chat\.whatsapp\.com\/([a-zA-Z0-9-_]+)/g;
  15.  
  16.         // Armazena todas as ocorrências e grupos capturados
  17.         const linksCapturados = [...message.matchAll(regex)];
  18.  
  19.         const urlsIds = linksCapturados.map(match => {
  20.             return {
  21.               url: match[0],   // URL completa
  22.               id: match[1]     // ID capturado
  23.             };
  24.         });
  25.         this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: urls e ids: ${JSON.stringify(urlsIds)}`);
  26.  
  27.         for(const urlId of urlsIds){
  28.             const groupInvitationId = urlId.id;
  29.             const groupInvitationUrl = urlId.url;
  30.             const url = `https://api.textmebot.com/send.php?apikey=${this.apiKey}&group_info=${groupInvitationId}`;
  31.  
  32.             try {
  33.                 // Faz a requisição GET para a API
  34.                 let response;
  35.                 try {
  36.                     response = await axios.get(url, {
  37.                     validateStatus: function (status) {
  38.                       return status < 500; // Resolve only if the status code is less than 500
  39.                     }
  40.                   });
  41.                   this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: data: ${response.data}`);
  42.                   this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: status: ${response.status}`);
  43.                   this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: statusText: ${response.statusText}`);
  44.                 }catch(error){
  45.                     this.logger.error(`WhatsappLib.findAndSaveGroupInfo: erro na requisição do axios`, error);
  46.                     continue;
  47.                 }
  48.  
  49.                 if (!response || response.data.trim().replace('\n','') == ''  || response.status >= 500 || response.statusText.toLowerCase() != 'ok')
  50.                     continue;
  51.  
  52.                 // Carrega o conteúdo HTML da resposta
  53.                 const html = response.data;
  54.                 this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: ${html}`);
  55.  
  56.                 // Utilizando regex para capturar o ID do grupo e o nome do grupo com base no texto indicativo
  57.                 const regexGroupId = /Group ID:\s*<b>(.*?)<\/b>/;
  58.                 const regexGroupName = /Subject:\s*<b>(.*?)<\/b>/;
  59.  
  60.                 const groupIdMatch = html.match(regexGroupId);
  61.                 const groupNameMatch = html.match(regexGroupName);
  62.  
  63.                 // Se encontrarmos os matches corretos, extraímos o ID do grupo e o nome
  64.                 const groupWhatsappId = groupIdMatch ? groupIdMatch[1] : null;
  65.                 const groupName = groupNameMatch ? groupNameMatch[1] : null;
  66.  
  67.                 this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: Dados do Grupo: ${groupIdMatch}, ${groupNameMatch}, ${groupWhatsappId}, ${groupName}`);
  68.  
  69.                 if(groupWhatsappId){
  70.                     // verifica se o grupo já está cadastrado na lista de contatos
  71.                     const groupContact = await this.dataService.getContactByContact(groupWhatsappId)
  72.                     this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: ${JSON.stringify(groupContact)}`);
  73.                     let contactId;
  74.  
  75.                     // se nome diferente ou não tiver o nome ainda
  76.                     // então atualiza
  77.                     if(groupContact && ((groupContact.name && groupContact.name.trim().toLowerCase() != groupName.trim().toLowerCase())
  78.                              || !groupContact.name)){
  79.                         this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: "Atualizando nome do Contato: ${JSON.stringify(groupContact)}, Nome: ${groupName})}`)
  80.                        // se o grupo existe e tem nome diferente, ajusta o nome
  81.                        await this.dataService.updateContactName(groupContact, groupName)
  82.                        .then((result)=>{
  83.                            this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: updateContactName sucess! ${result}`);
  84.                        }).catch((error)=>{
  85.                            this.logger.error("whatsappLib.findAndSaveGroupInfo: updateContactName Error!", error);
  86.                        });
  87.                        contactId = groupContact.id;
  88.                    }else if (!groupContact){
  89.                        // se o grupo não existe salva o contato,
  90.                        // registra a origem como sendo o contato de origem da mensagem
  91.                        contactId = await this.saveContact(this.alias, 'whatsapp_group', groupWhatsappId, groupName, from, 'Message Process')
  92.                        .then((contactId) => {
  93.                            this.logger.info(`WhatsappLib.findAndSaveGroupInfo: Dados do grupo ${groupName} (bot ${this.alias} salvos com ID ${groupWhatsappId}`);
  94.                            return contactId;
  95.                        });
  96.                    }else{
  97.                        contactId = groupContact.id;
  98.                    }
  99.                    this.logger.info(`WhatsappLib.findAndSaveGroupInfo: pré save update: ${this.alias}, ${contactId}, ${groupName}, ${groupInvitationId}`);
  100.                    await this.dataService.saveUpdateGroup(this.alias, contactId, groupName, null, groupInvitationId)
  101.                    .then(()=>{
  102.                        this.logger.info(`WhatsappLib.findAndSaveGroupInfo: salvado dados do grupo e convite`)
  103.                    })
  104.                    .catch((erro)=>this.logger.error("WhatsappLib.findAndSaveGroupInfo: erro ao salvar dados do grupo e convite", erro));
  105.                                        // Envia mensagem para o grupo de administração de grupos
  106.                    // TODO ver uma forma melhor de identificar o grupo de administração de grupos
  107.                    // TODO ver uma forma melhor de identificar os grupos de administração de grupos
  108.                    //      to é igual ao grupo que está sendo enviado, isso identifica um loop de mensagens
  109.                    this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: checando ${to}`);
  110.                    if(to != '120363298339678004@g.us'){
  111.                        const contact = await this.getContactByDbId(137257);
  112.                        this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: Enviando URL para contato: ${JSON.stringify(contact)} -> ${groupInvitationUrl}`);
  113.                        this.sendMessage(contact, `Grupo: ${groupName}, Convite: ${groupInvitationUrl}`);
  114.                    }
  115.                    this.sendMessage(from,`Obrigado por compartilhar o grupo ${groupName}, verifique em https://groups.rapport.tec.br, se ele já foi indexado, caso contŕario entre em contato com (85) 985205490 e informe o o problema`);                    
  116.                }
  117.            } catch (error) {
  118.                console.error('Erro ao obter e registrar informações do grupo:', error);
  119.          //      resolver();
  120.          //     this.findAndSaveGroupInfoControl = undefined;
  121.                throw error;
  122.            }
  123.        }
  124.        //resolver();
  125.        //this.findAndSaveGroupInfoControl = undefined;
  126.  
  127.        return urlsIds;
  128.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement