Skip to content

PT-BR | Whatsapp API para automação de Envio e Análise de Mensagens com Python e Selenium

License

Notifications You must be signed in to change notification settings

AzraArts/AllWhatsPy

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


AllWhatsPy - AWP

AllWhatsPy

PT-BR

Criado por Lucas Lourenço

Manutenido por Lucas Lourenço

ATENÇÃO


O código estará passando por um grande update.
Aos poucos estarei refatorando-o e explicando as novas funções.

Att,
Lucas Lourenço

Sumário

Tutorial em Vídeo

⭐ Avalie o Código! ⭐

É de muitíssima importância a Estrela que você pode estar dando para colaborar com a Manutenção e Atualização do código! Se você utiliza o AllWhatsPy com frequência, gosta da forma que foi desenvolvido, se inspira nele, serei muito grato por sua avaliação!

Por que AllWhatsPy?

Como já sabemos, o Whatsapp é uma ferramenta que não podemos mais viver sem. Seja para cunho profissional ou pessoal, é necessário o manuseio completo desta aplicação.

Então... por que não torná-lo ainda mais eficiente?

Depois de ter pensado nisso, comecei a pesquisar sobre Bots e APIs do Whatsapp, me inspirei em códigos como o do PyWhatsapp e PyWhatKit para a realização deste.

Após passar um tempo estudando e alternando entre o trabalho e o software, botei a mão na massa e comecei a minha jornada indo atrás da melhoria e da qualidade de Software. Continuo atualizando e desenvolvendo, fazendo isso único e exclusivamente sozinho.

Foram usadas mais de 11 mil linhas de logs para o total funcionamento do código.

Com o AllWhatsPy, você consegue fazer o que quiser!



Começando no AllWhatsPy

INSTALAÇÃO

Para a instalação da lib, no terminal faça:

pip install -U allwhatspy-awp

Após, chame o pacote. Segue um exemplo:

import AllWhatsPy as awp

Você também pode estar baixando os arquivos e colar na sua pasta, caso sua máquina esteja tendo problemas em instalar esta lib.


Lógica:

flowchart LR;
    awp.conexao-->awpe[awp.encontrar_contato];
    awp.conexao-->awpu[awp.encontrar_usuario];
    awp.conexao---->awp.enviar_mensagem_por_link;
    awp.conexao---->awp.enviar_mensagem_direta;
        
    
    awpe-->awp.enviar_mensagem;
    awpe-->awp.enviar_mensagem_paragrafada;
    
    awpu-->awp.enviar_mensagem;
    awpu-->awp.enviar_mensagem_paragrafada;
    
    awp.enviar_mensagem-->E{Enviar outra coisa?};
    awp.enviar_mensagem_paragrafada-->E;
    awp.enviar_mensagem_direta---->d[awp.desconectar];
    awp.enviar_mensagem_por_link---->d;
    
    
    
    E -- Sim --> awp.enviar_imagem;
    E -- Sim --> awp.enviar_video;
    E -- Sim --> awp.enviar_arquivo;
    
    
    awp.enviar_imagem --> d;
    awp.enviar_video --> d;
    awp.enviar_arquivo --> d;
    E -- Não --> d;
       
Loading

Objetivos a Serem Terminados

  • Criar alternativas para envio de mensagem (Realizado - 19/12/2022)
  • Tratar as except Exception (Realizado - 21/12/2022)
  • Resolver bug na urllib (Realizado - 21/12/2022)
  • Alimentar o código com opções alternativas para awp.conexao() e awp.desconectar() (Realizado - 21/12/2022)
  • Corrigir excepts de NoSuchElementException (Realizado - 22/12/2022)
  • Implementar WebDriverWait para melhor responsividade do software (Realizado - 27/12/2022)
  • Configurar a entrada de logs (Realizado - 28/12/2022)
  • Atualizar ActionChains (Realizado - 15/01/2023)
  • Terminar ultimas_mensagens_conversa() (Realizado - 18/01/2023)
  • Explicar todas as fórmulas (Realizado - 21/01/2023)
  • Aperfeiçoar a função de agendamento (Realizado - 21/01/2023)
  • Terminar o sumário (Realizado - 21/01/2023)
  • Implementar a área de Exemplos Práticos (Realizado - 21/01/2023)
  • Fazer vídeo e postar no Youtube de explicação para utilizar o código (Realizado - 22/01/2023)
  • Implementar exemplos convencionais (Realizado - 23/01/2023)
  • Alterar Imagem da lógica do AWP com Mermaid (Realizado - 23/01/2023)
  • Finalizar função encontrar_numeros_não_salvos() (Realizado - 25/01/2023)
  • Implementação de Classes (Realizado - 12/02/2023)
  • Desenvolver um pip install para AWP (Realizado - 12/02/2023)
  • Atualizar nome_usuario() (Realizado - 15/02/2023)
  • Atualizar bug da função desconectar() (Realizado - 20/02/2023)
  • Corrigir bug na função pegar_foto_contato() (Realizado - 21/02/2023)
  • Atualizar icon do AWP (Realizado - 25/02/2023)
  • Atualizar contato_nome()
  • Realizar a explicação de como começar no AWP
  • Performar criação de pastas com a lib pathlib para melhor qualidade de software
  • Terminar função buscar_contatos_não_lidos()
  • Terminar função retornar_posicao_anterior()
  • Implementação de Classes, Métodos e Módulos auxiliaers

🚨Exemplos🚨

🚨Exemplos Práticos🚨

🚨Exemplos🚨

O que você pode fazer com AllWhatsPy

  • Conectar

É de enorme importância a utilização deste código! Afinal, ele é o responsável pela integração do AllWhatsPy ao Whatsapp. É possível utilizar como awp.conexao() ou awp.conexao(2). No primeiro caso, abrirá um popup na tela esperando a confirmação para dar continuidade. No segundo caso, será ignorado o popup que aparece após a inicialização do algoritmo.

import AllWhatsPy as awp

awp.conexao()

ou

import AllWhatsPy as awp

awp.conexao(2)

  • Desconectar

Após a conclusão de todas as funções que forem usadas por você, caso seja de sua vontade desconectar o Whatsapp, rode este código. Caso contrário, o seu login ficará sempre registrado como ainda conectar, por mais que feche a janela. É possível utilizar como awp.desconectar() ou awp.desconectar(2). Caso utilize-se o primeiro caso, o software encerrará e fechará a janela. No segundo caso, irá manter a janela do QR Code aberta.

import AllWhatsPy as awp


awp.conexao()
awp.desconetar()

  • Trabalhando com Chats/Contatos/Usuários

    • encontrar_contato(contato)

    Com esta função, iremos abrir conversas para prosseguirmos com os demais códigos. Buscará pelo nome ou pelo número, contanto que o mesmo já esteja salvo.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.encontrar_contato('Lucas Lourenço')
     
    awp.desconectar()

    • encontrar_usuario(numero)

    Já com esta função, nós não conseguimos buscar pelo nome, mas somente pelo número. Entretando, você NÃO precisa estar com o número salvo. Pode ser viável para o envio de mensagem para planilhas de números e afins.

    import AllWhatsPy as awp
    
      
    awp.conexao()
    awp.encontrar_usuario('21900000000')
     
    awp.desconectar()

    • encontrar_primeira_conversa(ignorar_fixado = True)

    Essa função será responsável por abrir a primeira conversa do seu Whatsapp. Caso "ignorar_fixado" for True, ele irá verificar se há uma conversa fixada e pular a mesma. Se o valor de "ignorar_fixado" for False, irá selecionar o primeiro comentário fixado.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.encontrar_primeira_conversa()
     
    awp.desconectar()

    • descer_conversa_origem_atual(quantidade: int = 1)

    Essa função irá descer a conversa atual que estiver aberta. Como argumento, é possível indicar quantas você quer descer. Já é 1 por padrão.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.encontrar_contato('Lucas Lourenço')
    awp.descer_conversa_origem_atual()
     
    awp.desconectar()

    • subir_conversa_origem_atual(quantidade: int = 1)

    Essa função irá subir a conversa atual que estiver aberta. Como argumento, é possível indicar quantas você quer subir. Já é 1 por padrão.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.encontrar_contato('Lucas Lourenço')
    awp.subir_conversa_origem_atual()
     
    awp.desconectar()

    • descer_chat_quantidade(quantidade: int)

    Essa função irá desce a conversa atual que estiver aberta de acordo com a quantidade declarada.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.descer_chat_quantidade()
     
    awp.desconectar()

    • sair_da_conversa()

    Função responsável por sair da conversa atualmente aberta.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.encontrar_usuario(21900000000)
    awp.enviar_mensagem('Olá!')
    awp.sair_da_conversa()

    • aplicar_filtro()

    Função responsável por aplicar o filtro, aparecendo somente as mensagens que não foram lidas.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.aplicar_filtro()
     
    awp.desconectar()

    • pegar_dados_contato()

    Esta função retornará uma lista contendo o nome e o número do contato que está aberto. Sendo o índice 0 o nome e o índice 1 o número

    import AllWhatsPy as awp
    
      
    awp.conexao()
    dados = awp.pegar_dados_contato()

    • apagar_conversa()

    Através desta função, a conversa atualmente aberta será excluida.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.encontrar_contato('Lucas Lourenço')
    awp.apagar_conversa()
    
    awp.desconectar()

    • arquivar_conversa()

    Através desta função, a conversa atualmente aberta será arquivada.

    import AllWhatsPy as awp
    
      
    awp.conexao()
    awp.encontrar_contato('Lucas Lourenço')
    awp.arquivar_conversa()
    
    awp.desconectar()

    • marcar_como_nao_lida()

    Através desta função, a conversa atualmente aberta será marcada como não lida.

    import AllWhatsPy as awp
      
    awp.conexao()
    awp.encontrar_contato('Lucas Lourenço')
    awp.marcar_como_nao_lida()
    
    awp.desconectar()

    • nome_usuario()

    Esta função retorna o nome do usuário.

    import AllWhatsPy as awp
    
    awp.conexao()
    nome = awp.nome_usuario()
    awp.enviar_mensagem(f'Olá! eu sou o {nome}')
    
    awp.desconectar()
  • Enviando Mensagens

    • enviar_mensagem(mensagem)

    Função responsável pelo envio de mensagens. Esta função em específico irá enviar, dependendo do dado inserido, uma mensagem atrás da outra. Isto é: Caso você insira uma lista contendo todos as mensagens que você quer que envie, ela assim fará. Entretando, cada item desta lista será uma mensagem diferente. Caso você insira números e strings, ela também entenderá. É a mais usada das 4 funções de envio de mensagem, por ser mais simples de manusear.

    import AllWhatsPy as awp
    
    awp.conexao()
    awp.encontrar_contato('Lucas Lourenço')
    awp.enviar_mensagem('Hello World!')
    
    awp.desconectar()

    • enviar_mensagem_paragrafada(mensagem)

    Ao contrário da "enviar_mensagem()", esta não irá enviar uma atrás da outra. Caso a string contenha mais de uma linha, a função irá analisar e irá alocar tudo à uma única linha, sendo assim, não enviando várias mensagens uma atrás da outra, mas sim uma única.

    import AllWhatsPy as awp
    
    awp.conexao()
    awp.encontrar_contato('Lucas Lourenço')
    awp.enviar_mensagem_paragrafada(
    '''
    Olá!
    Meu nome é Lucas Lourenco.
    Sou o Criador do AWP.
    '''
    )
    
    awp.desconectar()

    • enviar_mensagem_por_link(numero, mensagem)

    Esta função irá pegar uma funcionalidade do Whatsapp e irá fazer com que se envie através dela! Não há a necessidade de usar o "encontrar_usuario()" ou "encontrar_contato()" OBS.: Não use esta função para enviar para muitas pessoas, senão poderá bloquear seu número.

    import AllWhatsPy as awp
    
    awp.conexao()
    awp.enviar_mensagem_por_link(21900000000 ,'E ai, tudo bem?')
    
    awp.desconectar()

    • enviar_mensagem_direta(contato, mensagem, selecionar_funcao, salvo):

    Ela fará com que todo o processo que teria que ser feito com as outras functions não seja necessário. Tudo será feito por esta única.

    contato = O destino da mensagem, seja ela número ou nome.

    mensagem = A mensagem que será enviada ao contato.

    selecionar_função = Entre 1 e 2, serão as funções enviar_mensagem(), enviar_mensagem_paragrafada() respectivamente.

    salvo = Se for True, o contato deverá estar salvo, portanto, o argumemento contato deve ser um número que já está salvo no seu Whatsapp. Caso contrário, se for False, usará o método por link, o qual deverá ser um número no argumento Contato

    Para número salvo:

    import AllWhatsPy as awp
    
    awp.conexao()
    awp.enviar_mensagem_direta('Lucas Lourenco','Olá! Tudo bem?',1 ,True)
    
    awp.desconectar()

    Para número não salvo:

    import AllWhatsPy as awp
    
    awp.conexao()
    awp.enviar_mensagem_direta(21900000000,'Olá! Tudo bem?',1 ,False)
    
    awp.desconectar()

  • Voltar ao último contato que parou

Primeiro, use o código a seguir para registrá-lo.

import AllWhatsPy as awp
  
awp.conexao()
awp.contato_registrar()
  
awp.desconectar()

Após já ter registrado, use o seguinte para voltar ao contato. Existem 2 opções. Se o valor declarado for 1, ele buscará pelo nome do contato. Caso o valor declarado for 2, ele buscará pelo número.

(Mesmo se a máquina for desligada, ainda está salvo. Basta rodar o código abaixo)

import AllWhatsPy as awp
  
awp.conexao()
awp.contato_abrir_registrado(2)
  
awp.desconectar()

  • Agendamento

O código irá aguardar até a chegada da hora planejada. Feito isso, irá liberar para que o restante do código siga adiante.

awp.agendamento(dia_programado, hora_programado, minuto_programado)

import AllWhatsPy as awp

  
awp.conexao()
awp.agendamento('20', '08', '30')
awp.encontrar_contato('Lucas Lourenço')
awp.enviar_mensagem('Hello World')
  
awp.desconectar()

  • Enviando Arquivos, Vídeos e Imagens

    • enviar_imagem(nome_imagem)

      Esta função é responsável pelo envio de imagens. A imagem tem que estar na mesma pasta que o módulo principal ou passar o caminho dela.

      import AllWhatsPy as awp
      
      awp.conexao()
      awp.encontrar_contato('Lucas Lourenço')
      awp.enviar_imagem('AlgumaImagem.png')
      
      awp.desconectar()

    • enviar_video(nome_video)

      Esta função é responsável pelo envio de vídeos. O vídeo tem que estar na mesma pasta que o módulo principal ou passar o caminho dela.

      A função analisará se o arquivo é menor do que a capacidade máxima de tamanho de vídeo para envio no whatsapp.

      import AllWhatsPy as awp
      
      
      awp.conexao()
      awp.encontrar_contato('Lucas Lourenço')
      awp.enviar_video('nome_video.mp4')
      
      awp.desconectar()

    • enviar_arquivo(nome_arquivo)

      Esta função é responsável pelo envio de arquivo. O arquivo tem que estar na mesma pasta que o módulo principal ou passar o caminho dela.

      import AllWhatsPy as awp
      
      awp.conexao()
      awp.encontrar_contato('Lucas Lourenço')
      awp.enviar_arquivo('nome_arquivo.ext')
      
      awp.desconectar()

  • Listando as Ultimas Mensagens e Contatos Aparentes

    • lista_ultimas_mensagens_recebidas_de_contatos(quantidade: int = 1)

      Função responsável para encontrar as últimas mensagens enviadas por cada contato de acordo com a quantidade oferecida na aplicação da função. Por padrão, a quantidade é 1, mas basta alterar a mesma que retornará quantas conversas forem pré-determinadas. Esta função retornará um dicionário contendo 2 dados, sendo eles:

      1- Key - Nome do contato

      2- Values: tupla - No índice 0 será a hora que a última mensagem foi enviada e no índice 1 será a última mensagem

      import AllWhatsPy as awp
      
      awp.conexao()
      dados = awp.lista_ultimas_mensagens_recebidas_de_contatos()

  • Mensagens de Conversas

    • ultimas_mensagens_conversa()

      Esta função irá, na conversa atualmente aberta, pegar as mensagens que foram enviadas.0
      Em seu início, ela subirá para ser possível de captar mais inforamções e, logo após, irá retornar tudo em um dicionário separado por índices. E os valores desses índices serão mais um dicionário contendo todas as informações daquela conversa.

      import AllWhatsPy as awp
      
      awp.conexao()
      awp.encontrar_contato('Lucas Lourenço')
      dados = awp.ultimas_mensagens_conversa()

      output:

      >>> {0 : {'[09:30, 21/01/2023] Lucas Lourenço: ': 'Me encaminha oq ela disse kkkkk'}, 
      >>> 1 : {'[09:32, 21/01/2023] Jenyfer: ': ['Me encaminha oq ela disse kkkkk','taaa']},
      >>> 2 : {'[09:32, 21/01/2023] Jenyfer: ': 'você vai adorar kkkkkk'}}

      Como é possível reparar, será trazido informações com o índice. Os values deles serão outra dicionário onde você pode estar trabalhando.

      quando a mensagem for citando uma outra mensagem enviada pela pessoa que está conversando, o value desse dicionário será uma lista

Acesso ao Código

Se quiser ter acesso ao código, basta Clicar Aqui

Notas do Criador

Para a criação deste código, foram usadas mais de 11 mil linhas de log

11k log lines

Na primeira vez que você rodar o código, será criada um arquivo de log. Lá, estarão todos os acontecimentos necessários para sua informação.

Autor

Problemas com o AllWhatsPy

Ainda não foi encontrado problemas no código.

Caso você tenha percebido algo, sinta-se à vontade para descrevê-lo na aba Issues!

E também para você que está tendo dificuldades em trabalhar com esta lib, basta descrevê-la que irei ajudá-lo!

Contribuição

Pull Requests são muito bem vindas!

Caso seja uma grande mudança, por favor, abra uma discussão na aba Issues para maior compreensão do seu caso.

About

PT-BR | Whatsapp API para automação de Envio e Análise de Mensagens com Python e Selenium

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%