Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- async findAndSaveGroupInfo(from, to, message){
- //let resolver;
- //let promise = new Promise((resolve) => {
- // resolver = resolve;
- //});
- //if (this.findAndSaveGroupInfoControl) {
- // await this.findAndSaveGroupInfoControl;
- //}
- //this.findAndSaveGroupInfoControl = promise;
- // Expressão regular para capturar todas as ocorrências
- const regex = /https:\/\/chat\.whatsapp\.com\/([a-zA-Z0-9-_]+)/g;
- // Armazena todas as ocorrências e grupos capturados
- const linksCapturados = [...message.matchAll(regex)];
- const urlsIds = linksCapturados.map(match => {
- return {
- url: match[0], // URL completa
- id: match[1] // ID capturado
- };
- });
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: urls e ids: ${JSON.stringify(urlsIds)}`);
- for(const urlId of urlsIds){
- const groupInvitationId = urlId.id;
- const groupInvitationUrl = urlId.url;
- const url = `https://api.textmebot.com/send.php?apikey=${this.apiKey}&group_info=${groupInvitationId}`;
- try {
- // Faz a requisição GET para a API
- let response;
- try {
- response = await axios.get(url, {
- validateStatus: function (status) {
- return status < 500; // Resolve only if the status code is less than 500
- }
- });
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: data: ${response.data}`);
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: status: ${response.status}`);
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: statusText: ${response.statusText}`);
- }catch(error){
- this.logger.error(`WhatsappLib.findAndSaveGroupInfo: erro na requisição do axios`, error);
- continue;
- }
- if (!response || response.data.trim().replace('\n','') == '' || response.status >= 500 || response.statusText.toLowerCase() != 'ok')
- continue;
- // Carrega o conteúdo HTML da resposta
- const html = response.data;
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: ${html}`);
- // Utilizando regex para capturar o ID do grupo e o nome do grupo com base no texto indicativo
- const regexGroupId = /Group ID:\s*<b>(.*?)<\/b>/;
- const regexGroupName = /Subject:\s*<b>(.*?)<\/b>/;
- const groupIdMatch = html.match(regexGroupId);
- const groupNameMatch = html.match(regexGroupName);
- // Se encontrarmos os matches corretos, extraímos o ID do grupo e o nome
- const groupWhatsappId = groupIdMatch ? groupIdMatch[1] : null;
- const groupName = groupNameMatch ? groupNameMatch[1] : null;
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: Dados do Grupo: ${groupIdMatch}, ${groupNameMatch}, ${groupWhatsappId}, ${groupName}`);
- if(groupWhatsappId){
- // verifica se o grupo já está cadastrado na lista de contatos
- const groupContact = await this.dataService.getContactByContact(groupWhatsappId)
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: ${JSON.stringify(groupContact)}`);
- let contactId;
- // se nome diferente ou não tiver o nome ainda
- // então atualiza
- if(groupContact && ((groupContact.name && groupContact.name.trim().toLowerCase() != groupName.trim().toLowerCase())
- || !groupContact.name)){
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: "Atualizando nome do Contato: ${JSON.stringify(groupContact)}, Nome: ${groupName})}`)
- // se o grupo existe e tem nome diferente, ajusta o nome
- await this.dataService.updateContactName(groupContact, groupName)
- .then((result)=>{
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: updateContactName sucess! ${result}`);
- }).catch((error)=>{
- this.logger.error("whatsappLib.findAndSaveGroupInfo: updateContactName Error!", error);
- });
- contactId = groupContact.id;
- }else if (!groupContact){
- // se o grupo não existe salva o contato,
- // registra a origem como sendo o contato de origem da mensagem
- contactId = await this.saveContact(this.alias, 'whatsapp_group', groupWhatsappId, groupName, from, 'Message Process')
- .then((contactId) => {
- this.logger.info(`WhatsappLib.findAndSaveGroupInfo: Dados do grupo ${groupName} (bot ${this.alias} salvos com ID ${groupWhatsappId}`);
- return contactId;
- });
- }else{
- contactId = groupContact.id;
- }
- this.logger.info(`WhatsappLib.findAndSaveGroupInfo: pré save update: ${this.alias}, ${contactId}, ${groupName}, ${groupInvitationId}`);
- await this.dataService.saveUpdateGroup(this.alias, contactId, groupName, null, groupInvitationId)
- .then(()=>{
- this.logger.info(`WhatsappLib.findAndSaveGroupInfo: salvado dados do grupo e convite`)
- })
- .catch((erro)=>this.logger.error("WhatsappLib.findAndSaveGroupInfo: erro ao salvar dados do grupo e convite", erro));
- // Envia mensagem para o grupo de administração de grupos
- // TODO ver uma forma melhor de identificar o grupo de administração de grupos
- // TODO ver uma forma melhor de identificar os grupos de administração de grupos
- // to é igual ao grupo que está sendo enviado, isso identifica um loop de mensagens
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: checando ${to}`);
- if(to != '120363298339678004@g.us'){
- const contact = await this.getContactByDbId(137257);
- this.logger.debug(`WhatsappLib.findAndSaveGroupInfo: Enviando URL para contato: ${JSON.stringify(contact)} -> ${groupInvitationUrl}`);
- this.sendMessage(contact, `Grupo: ${groupName}, Convite: ${groupInvitationUrl}`);
- }
- 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`);
- }
- } catch (error) {
- console.error('Erro ao obter e registrar informações do grupo:', error);
- // resolver();
- // this.findAndSaveGroupInfoControl = undefined;
- throw error;
- }
- }
- //resolver();
- //this.findAndSaveGroupInfoControl = undefined;
- return urlsIds;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement