Skip to content

mateustoin/Bittoin-Telegram-Bot

Repository files navigation

  

Este bot multifuncional pode fazer de tudo um pouco! É uma pokedex, encurtador de URL e até te tira to tédio caso não tenha nenhuma ideia do que fazer. Foi desenvolvido na live do meu canal na twitch com o objetivo de todos aprenderem diversas técnicas, funções e implementação de ideias dentro de apenas um projeto. Além disso, não coleta nenhum dado do usuário que interage com ele no Telegram, apenas responde com as requisições feitas.

Abaixo você poderá ver quais API's e tecnologias foram utilizadas no projeto, instruções de instalação dos pacotes necessários e de uso da aplicação. O projeto foi finalizado e colocado para funcionar na nuvem, garantindo que todos possam usurfruir a qualquer momento. Basta adicionar @BittoinLiveBot no telegram e se divertir!

A plataforma utilizada para rodar o bot na nuvem foi o Heroku, pois é rápido, simples e eficiente. O uso dessa plataforma não é obrigatório, tanto para testes do bot quanto para a execução na nuvem, pois ele pode rodar localmente na sua máquina ou outras plataformas podem ser utilizadas, como AWS, Google, entre outras.

Lista de API's utilizadas no desenvolvimento do BOT:

  1. PokéAPI (Pokédex aberto)
  2. Relink (Encurtador de URL grátis)
  3. Bored API

Fonte: Lista de API's públicas no Github

Principais pacotes python utilizados no desenvolvimento do BOT

  1. Requests
  2. Python Telegram Bot
  3. Google Translate

Versão python utilizada no projeto: Python 3.8


Sumário

  1. Introdução
  2. Como o projeto está organizado
  3. To-Do List das Funcionalidades
  4. Como utilizar o Bot e Resultados

Instalação

Para instalar os pacotes que foram utilizados nesse projeto e replicá-lo na sua máquina ou criar outro baseado nesse, algumas informações são necessárias para tudo dar certo! Primeiro, se quiser replicar em um bot próprio, será necessário criar seu bot lá no telegram, utilizando o chat do @BotFather. Nesse chat é possível criar um bot, editar comandos, adicionar descrição, etc. Mas o mais importante, para replicar o projeto, é salvar o API Token gerado na sua criação. Esse token pode ser colocado no arquivo bot.py no projeto, na variável bot_token, para que todas as funcionalidades rodem direto no seu bot.

Existem duas formas de instalar tudo necessário para a execução do código, deverás escolher a que você achar melhor. Através do requirements.txt ou Pipenv. A configuração do bot na nuvem não será abordado aqui, visto que a própria documentação da plataforma utilizada (Heroku) tem o passo a passo para colocar o código rodando lá, mas vale a pena ressaltar que pelo menos um desses métodos de instalação de pacotes é necessário para a configuração do ambiente na nuvem, bem como no seu computador.

Instalando pelo requirments.txt

Instalar pelo requirments.txt é simples, pois só precisa ter o pip instalado na máquina e executar o seguinte comando:

pip install requirments.txt

A vantagem de instalar dessa forma é que é rápido, simples e fácil. Porém é necessário destacar que esse método garante apenas que as principais bibliotecas utilizadas no projeto sejam instaladas nas suas versões corretas, mas não suas sub dependências. Daqui há alguns anos talvez dê errado por isso, mas não precisa se preocupar.

Instalando pelo Pipenv

Para instalar os pacotes utilizando o Pipenv é simples, primeiro garanta que o Pipenv está instalado na sua máquina, com o seguinte comando:

pip install pipenv

Depois, instale os pacotes através do arquivo Pipfile.lock, com o comando:

pipenv install --ignore-pipfile

Com tudo instalado, só precisará rodar o comando pipenv shell dentro da pasta do projeto e assim que estiver dentro do ambiente virtual com tudo instalado, executa o código normalmente.

pipenv shell

python main.py


Ferramentas e recursos

  

Nesse tópico será explicado como o projeto está estruturado, entre os arquivos e como os códigos se conectam, para que todos entendam e possam modificar da forma que for necessária. A forma de implementar é explicada já na própria documentação das bibliotecas, portanto o foco será na forma em que foi organizado neste projeto. Na figura a seguir é possível observar como os arquivos estão estruturados e a partir disso entraremos nas conexões entre eles (pasta img ignorada pois contém apenas as imagens utilizadas neste README).

  

O projeto pode ser dividido em três seções:

  1. Códigos: main.py e pasta funcs
  2. Exemplos: pasta sample
  3. Pacotes: Procfile, requirements.txt, Pipfile e Pipfile.lock

Códigos

Toda a organização do bot e códigos das funcionalidades estão dentro do diretório funcs/. O arquivo python main.py contém apenas a criação do objeto da classe Bot que está dentro de bot.py para realizar a execução do bot com a função run().

Cada funcionalidade criada para este projeto tem sua própria classe, class Pokedex(), class Bored() e class Urlshort(). Para manter o código organizado e fácil para manutenção, cada comando existente no bot está lotado nos métodos da classe. Na seção de uso do bot você deve notar que os nomes dos métodos são iguais aos nomes dos comandos do próprio bot, para que não haja confusões em relação a implementação de cada coisa. Como foram utilizadas algumas API's para a coleta de dados do bot, então cada classe também tem sua URL base, a fim de separar bem cada API e organizar suas respectivas requisições e particularidades. Um exemplo de implementação de comando pode ser visto a seguir, com o comando mais básico do bot, utilizando a função send_message() com o texto escrito, para a própria pessoa que chamou o comando.

def start(self, update, context):
    context.bot.send_message(chat_id=update.effective_chat.id, text="Bem vindo ao bot da transmissão (Ao vivo, não de covid)\nAcesse twitch.tv/bittoin para mais informações!")

Por último temos a classe principal do bot, no arquivo bot.py, que importa todas as classes de funcionalidades citadas anteriormente, cria seus respectivos objetos de classe e usa os métodos para gerenciar os comandos implementados e utilizados no chat do bot online. Depois que temos um objeto da classe da nossa funcionalidade, criamos um handler, onde serão passados o método que será chamado pelo bot e seu comando, como pode ser visto a seguir:

pokedex_handler = CommandHandler('pokedex', self.pokedex.pokedex)

O primeiro argumento é o nome do comando que será acionado no chat e o segundo o método que será chamado ao ser acionado. Após isso utilizamos o dispatcher do bot, que é responsável por gerenciar e fazer funcionar todos os handlers criados, a fim de responder a todas as requisições de usuários e manter a organização interna das chamadas.

self.dispatcher.add_handler(pokedex_handler)

No final do processo temos a execução do bot propriamente dito, com todas as suas funcionalidades adicionadas ao dispatcher e aguarda pela finalização.

# Inicia a execução do bot
self.updater.start_polling()

# Roda o bot até apertar CTRL + C ou receber um SIGNAL
self.updater.idle()

Possíveis erros

Erro com o google translator

Caso haja algum erro na execução do projeto relacionado as requisições que envolvem erro na tradução, acessar esse link com a solução.

Exemplos

A pasta sample/ possui os arquivos sample.py e inlinekeyboard.py. O sample.py possui os primeiros testes realizados no bot, no início da live, para testar como funcionam as funções da biblioteca de telegram para python, a fim de descobrir e validar algumas propriedades. Você pode notar que como está tudo em apenas um arquivo, fica bagunçado e difícil de separar, por isso a organização dos códigos em funcs/ foi adotada. Em inlinekeyboard.py o exemplo foi retirado direto da documentação da biblioteca, com o objetivo de testar teclas/botões no chat do telegram, para implementar a função da Bored API.

Pacotes

A instalação dos pacotes já foi explicada anteriormente na seção de Instalações, portanto o foco será no arquivo Procfile. O Procfile é o que será executado na nuvem, através da plataforma Heroku. É um arquivo simples e contém o simples comando:

worker: python main.py

Este comando simplesmente aloca uma instância do servidor na nuvem (worker) para executar o nosso bot, através do arquivo main.py, que ativa a execução.


  

Aqui estão listados todas as funcionalidades que foram discutidas durante as lives, escritas e preenchidas. Cada um desses tópicos foi implementado e testado ao vivo. A ideia é que durante as lives o público ajuda na criação das funcionalidades, determinando os requisitos e como vai ficar no final.

Funcionalidade: Ferramenta de pokédex

  • Imagem do pokemon
  • Número da pokedéx
  • Nome
  • Habilidades
  • Peso
  • Tratar erro se a pessoa colocou nome do pokemon errado
  • Colocar as habilidades e suas respectivas descrições em outro comando
  • Utilizar markdown para formatar o texto de saída
  • Listar/Filtrar os possíveis movimentos do pokemon
  • Pesquisar por número da pokédex

Funcionalidade: Ferramenta pra te tirar do tédio

  • Criar a chamada do comando
  • Criar os botões para acionar o comando
  • Criar chamada para API a partir do tipo
  • Conectar cada chamada a seu respectivo botão
  • Organiza mensagem de saída para o usuário

Funcionalidade: Encurtador de URL

  • Cria a chamada do comando
  • Realiza aquisição da URL através dos argumentos do comando
  • Realiza uma requisição na API com a URL
  • Organiza mensagem de saída para o usuário com a URL Encurtada

  

Nesta seção serão mostrados os resultados obtidos com o bot e casos de uso para cada funcionalidade. Aproveite e adicione o bot no telegram e teste também! Basta procurar por @BittoinLiveBot e começar a digitar os comandos no chat.

Se quiser ver uma demonstração completa e mais explicada de como tudo funciona, visita meu Instagram ou meu canal do YouTube que lá vai ter vídeos no IGTV/Canal com tudo e mais um pouco!

Comando /start

O comando /start exibe apenas uma mensagem de boas vindas.

  

  

Aqui são apresentados todos os comandos referentes à funcionalidade do pokédex.

Comando /pokedex nome_pokemon

  

Comando /pokedex numero_pokemon

  

Comando /habilidades nome_num_pokemon

  

Comando /moves nome_num_pokemon

  

  

Aqui são apresentados todos os comandos referentes à funcionalidade do encurtador de URL.

Comando /url link

  

  

Aqui são apresentados todos os comandos referentes à funcionalidade da ferramenta que te tira do tédio.

Comando /bored

  

Comando /participantes num_participantes