Automatizando o envio de mensagens no Discord

Automatizando o envio de mensagens no Discord

Há pouco tempo conheci a sigla RPA e o universo à sua volta e hoje venho compartilhar minha experiência através do passo a passo para criar uma automação com o intuito de ajudar na organização de um clube de leitura.

Para esse projeto vamos usar algumas ferramentas como Python, BotCity e Discord.

Conhecendo as tecnologias

RPA

Inicialmente, vamos entender o significado da sigla: Robotic Process Automation. Em uma tradução para o português, podemos dizer: automação robótica de processos. Essa tecnologia pode ser utilizada para criar robôs que realizam aqueles processos repetitivos que nos deparamos no cotidiano, como preenchimento de planilhas, leitura de arquivos, acesso a portais governamentais, etc.

Ao usar código para o desenvolvimento desse robô, podemos definir todos os passos a serem seguidos para resolver algum processo, tendo infinitas possibilidades, passando por interação com o sistema operacional, páginas web e diversos programas de computador.

Python

O Python é uma linguagem de programação de alto nível, ou seja, sua escrita é bastante próxima da linguagem natural. Essa característica facilita o entendimento do código, deixando sua aprendizagem mais leve, porém é sempre importante entender os conceitos por trás de cada expressão que escrevemos.

Outro ponto forte dessa linguagem é ela ser open source, ou seja, tem uma comunidade ao redor do mundo todo dando suporte, e devido a sua popularidade, podemos encontrar facilmente resolução de problemas comuns com os quais nos deparamos durante o processo de aprendizagem.

BotCity

É uma ferramenta open source brasileira, com suas bibliotecas temos acesso a aceleradores de código, que são funções intuitivas que facilitam o desenvolvimento de automações.

Além do auxílio na construção, também possui um portal de orquestração e gerenciamento de automações integrados ao código, assim podemos definir diversos recursos como tarefas, logs e alertas.

Discord

O Discord é um aplicativo de comunicação por texto, imagem, voz e vídeo. Está disponível em diversos sistemas operacionais e com uma versão em navegadores web.

Através dele podemos criar grupos, servidores e canais com interesses comuns e trocar informações sobre algum assunto específico.

Clube de leitura

Após conhecer um pouco sobre as ferramentas que utilizaremos nesse projeto, vamos identificar os principais objetivos do clube de leitura para então desenvolvê-lo.

Principais requisitos

  • A reunião do clube de leitura vai ocorrer uma vez por semana no Discord, por canal de voz e vídeo, para discutir sobre os aprendizados adquiridos em cima de um artigo.
  • O robô fará a busca do artigo para discussão na comunidade da Revelo com uma semana de antecedência a reunião.
  • O robô montará a apresentação da mensagem as seguintes informações:

-Título do artigo;

-Resumo;

-Nome e foto da pessoa autora;

-Capa do artigo;

-Link direcionando para a leitura.

  • O artigo será disponibilizado automaticamente pelo robô, no canal de texto do clube de leitura, para os integrantes lerem durante a semana.

Configurando o Discord

Caso ainda não tenha, crie uma conta seguindo os passos disponíveis no site oficial do Discord. Após isso, vamos criar um servidor que será nosso clube de leitura da seguinte maneira:

  • Encontre o botão de adicionar um servidor na barra lateral esquerda do aplicativo;
  • Abrirá uma aba de opções, escolha a opção “Clube escolar”;
  • Selecione a opção “Para meus amigos e eu”;
  • Dê um nome e carregue um ícone para o servidor;
  • Finalizar clicando em criar.

Dessa forma, será criada uma estrutura com canais pré definidos, esses canais podem ser modificados de acordo com o seu uso. Para o clube de leitura, vamos criar um canal de texto chamado artigos para receber as mensagens do robô.

Precisaremos criar um webhook, que é um token de conexão da automação com o Discord. Para isso, acessamos no aplicativo as configurações do servidor, na aba de integrações, onde encontramos um card com nome de webhooks e clicamos em criar.

Quando criado, alteramos o nome dele para ‘Robô Leitor’ e definimos o canal que ele enviará as mensagens para ‘artigos’, por fim, copiamos a URL do webhook para utilizarmos posteriormente no código.

Desenvolvendo o bot

Para o desenvolvimento do robô, vamos começar definindo os pacotes Python que utilizaremos, em um arquivo requirements.txt.

O que cada pacote faz:

  • Framework web: facilita a interação do robô com páginas web;
  • Maestro: faz a integração do robô com a orquestração;
  • Discord plugin: facilita a interação do robô com o aplicativo.

Para instalá-los, utilizamos o seguinte comando no terminal na raiz do projeto, onde está salvo o arquivo:


O próximo passo será baixar o webdriver do navegador. Para esse projeto vamos utilizar o geckodriver do Firefox. Colocaremos ele dentro de uma pasta chamada resources.

Por fim, vamos criar o arquivo principal chamado bot.py, nele desenvolveremos toda a lógica do nosso robô para capturar as informações dos artigos e montar uma mensagem para o clube de leitura.

A estrutura de arquivos ficará dessa forma:


No início do arquivo bot.py, vamos importar todas bibliotecas que utilizaremos, em seguida criar uma estrutura básica com a instância e configurações de um webbot dentro de uma função chamada main.


Vamos entender o que está acontecendo em cada linha dentro da função main:

  1. Define uma variável chamada robo_leitor que será uma instância do WebBot.
  2. Define que o robô rodará em background, ou seja, podemos usar a máquina normalmente enquanto o robô atua.
  3. Define qual navegador o robô vai utilizar.
  4. Armazena o caminho do webdriver em uma variável chamada driver.
  5. Configura o webdriver.
  6. Define a url da página que o robô acessará.

Após essa etapa, vamos fazer uma busca na página web para capturar os elementos que precisamos para montar a mensagem que o robô mandará para o Discord.

Para isso, vamos usar a DOM da página, ela pode ser visualizada nos navegadores através do teclado pressionando F12 ou clicando em algum local da página com o botão direito do mouse e selecionando a opção inspecionar, assim temos acesso a vários elementos.

Para ilustrar, veja como fica a DOM:


Podemos capturar vários tipos de elementos, como texto, imagens, links, entre outros. Para nossa mensagem, vamos buscar inicialmente o link do artigo em destaque, para que as pessoas do clube possam acessar, o código ficará assim:


Vamos observar o que temos aqui:

  • find_element é uma função da biblioteca BotCity onde ele busca pelo elemento na DOM da página web que acessamos. Temos dois parâmetros nessa função, o primeiro é o nome do seletor e o segundo define o tipo de seletor. Nesse caso estamos usando um seletor css.
  • Com o elemento capturado, vamos utilizar a função get_property(‘href’) para extrair o link do elemento.

Dessa forma, capturamos o link do artigo.

Com a mesma lógica, buscamos por todos os elementos necessários navegando na DOM procurando pelos elementos: título do artigo, resumo, capa, nome e foto da pessoa autora. O código com todas as informações capturadas fica dessa forma:


Agora podemos montar uma mensagem incorporando as informações que foram capturadas do site.

Vamos entender esse trecho:

  1. Criamos uma variável chamada mensagem que será uma instância de EmbeddedMessage com 3 parâmetros.
  2. Parâmetro título da mensagem que recebe o título do artigo.
  3. Parâmetro de descrição da mensagem que recebe o resumo.
  4. Parâmetro com a cor que ficará visível na borda da caixa de mensagem.
  5. Definimos um campo com o link para direcionar as pessoas leitoras.
  6. Definimos a capa do artigo como imagem de ilustração.
  7. Definimos as informações da pessoa autora do artigo.

Por fim, vamos instanciar o BotDiscordPlugin, ele fará a conexão com o Discord e enviará a mensagem que montamos acima.

  1. Token que pegamos ao criar o webhook.
  2. Nome que demos ao robô no Discord.
  3. Instância do plugin para conexão com Discord.
  4. Envio da mensagem para o canal definido no Discord.

Execução de teste

Após o desenvolvimento, vamos executar o robô localmente para confirmar que todas as informações coletadas estão corretas. Para isso, no terminal, na raiz do projeto, onde está localizado o arquivo bot.py, chamamos o seguinte comando:


Para avaliarmos o resultado, vamos até o Discord, no servidor do clube de leitura e verificamos no canal escolhido, nesse caso, o canal chamado #artigos. Deverá conter uma mensagem nesse formato, com todas as informações atualizadas:


Outro modo de executar

Além de executar localmente chamando o comando, podemos fazer o gerenciamento através de um orquestrador, também da BotCity. Nele podemos fazer o deploy do robô, criar uma série de logs que podem ser definidos no código, criar tarefas determinando as datas de execução, além disso, podemos definir o robô para buscar um artigo semanalmente.

Como exemplo, vamos criar no código um log para registrarmos o título do artigo e a data que ele foi enviado para o clube de leitura. Para isso, vamos incluir mais algumas linhas de código no arquivo bot.py, antes do robô fechar o navegador:


Com a função new_log_entry do maestro, conseguimos definir um registro de log nomeado lista_de_artigos_do_clube com os valores de data, título do artigo e nome da pessoa autora. Ao fazer a integração com o orquestrador, podemos manter esse registro no portal para acompanhar todos artigos já lidos e discutidos pelo clube.

Essa e outras formas de integração estão descritas na documentação.

Considerações finais

Criar automações de vários tipos facilitam a vida das pessoas, transformando o tempo gasto com atividades repetitivas em tempo para ser criativo ou realizar outras tarefas.

Pense em quantas atividades do seu cotidiano podem ser automatizadas levando a melhorar sua qualidade de vida, tanto profissional quanto pessoal.

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.