Escrevendo um bot para Telegram em Node+TS

Lucas Almeida Carotta
6 min readMar 27, 2018

--

Essa é uma das reportagens de uma série, se veio parar aqui por causa de algum algoritmo de recomendação e estás perdido, recomendo dar uma olhada sobre mais nessa introdução.

Podcast mais famosa segundo uma reportagem daqui do Medium

Antes de tudo

Caso você nunca tenha feito um bot antes, independentemente de linguages ou de ser do Telegram ou não, saiba que serviços assim requerem uma API Key, uma chave de conexão que assegura que apenas você é o responsável pelo seu bot. Para conseguir uma você deve seguir os seguintes passos:

Deixando tudo pronto

“Moshi, moshi”

Para facilitar, crie um repositório no Github com os dados do projeto, o clone em um diretório mais conveniente para ti e inicialize com os seguintes comandos:

Pode parecer meio estranho instalar duas vezes o TS, mas acredite a global será a utilizada pelo seu terminal na sua máquina e a dev será a versão que será instalada no Heroku uma vez que fizer deploy.

Caso tenha algum problema em configurar tais instalações, recomendo instalar o Node.js através do nvm. Eu mesmo em um outro projeto tive que reinstalar por causa de uma dependência; uma dica para saber se precisa reinstalar antes de quebrar a cabeça por horas e horas é que caso esteja em um ambiente Linux tenha que dar o comando sudo para executar a segunda linha.

Uma vez realizados tais comandos você terá um diretório com os seguintes arquivos:

Configuração inicial

Caso tenha inicializado o repositório com um README, LICENSE ou até mesmo .gitignore, esses arquivos se encontrarão presentes, não se preocupe em deletá-los ou nada do tipo, apenas deixe-os aí.

Uma vez confirmados, faça a criação das pastas e arquivos até ficar da seguinte forma:

Configuração mínima necessária

Como essa reportagem irá cobrir o mínimo para as configurações inciais de um bot só esses arquivos serão necessários por ora, mais para frente nas próximas reportagens outros serão adicionados.

Agora, adicione as seguintes linhas no seu .gitignore:

Isso impedirá que você acabe enviando desnecessariamente arquivos que são irrelavantes ou de extrema segurança para o projeto. Não se preocupe, o seu bot ainda funcionará.

Aproveite também e copie e cole a API Key do Telegram no .env:

Maquinário necessário

Uma ferramenta que faça tudo

Até agora configuramos só o básico, agora vem a parte da instalação das bibliotecas necessárias para o projeto:

Telegraf

Irá realizar toda e qualquer intermediação do seu bot com o Telegram, essa biblioteca é um wrapper para a API do Telegram. Altamente recomendo deixar uma aba aberta com o site deles para sempre poder olhar e sanar todas as dúvidas sobre as funções e como elas funcionam.

Dotenv

Uma biblioteca necessária para gerenciar as variáveis globais salvas no seu arquivo .env.

Itunes-search

Sistema no qual serão feitas as requisições na API do iTunes para as pesquisas de podcasts. Vale ressaltar que não se trata de uma API exclusiva de podcasts ou nada do tipo, ela realiza pesquisas na iTunes seja de filmes, músicas, podcasts e etc, mas por causa de um parametro filtraremos apenas para as podcatas — o que não necessariamente significa que tenha que fazer o mesmo, o seu bot pode ser sobre filmes ou músicas também.

@types

“Mas que biblioteca é essa que eu, que programei sempre em Node, nunca ouvi falar?” — Alguém que programa em Node desde que a linguagem não era peixe mas era beta e.e

Toda biblioteca com o @types na frente se trata de uma tipagem para um código que atualmente existente em JavaScript e fora portado para TS. Nesse caso as de Node e do Dotenv.

obs: se olharem meu código fiz um arquivo de tipagem para o itunes-search também, caso queriam utilizar; como não está bem feito ainda resolvi segurar o Pull Request (PR) pra quem fez a biblioteca.

package.json

No seu package.json haverá informações sobre o projeto como o nome, Github, dependências e coisas assim. Além de tudo isso haverá uma seção chamada scripts, nela você será capaz de colocar os comandos mais utilizados e poder facilitar os comandos durante o processo de codificar. Adicione os seguintes scripts:

Uma observação importante é renomear o main também, já que como no final de contas o Node que estará rodando o seu projeto e não o TS em si, se deve apontar para o arquivo principal que será aquele após o processo de compilação.

tsconfig.json

No seu tsconfig.json, coloque os trechos de código a seguir:

Essas são as diretrizes que o compilador de TS irá seguir toda vez que deixar rodando de background a compilação para que cada vez que salvar uma ateração em seu main.ts um main.js seja gerado na pasta dist:

npm run watch

E que será executado pelo Node toda vez que executar:

npm run start

Finalização das configuração inicinais

Rode um o seguinte comando apenas para verificar se nada de errado ocorreu durante suas configurações:

npm run build

Nada deverá ser impresso na tela, apenas deverá gerar um arquivo em branco chamado main.js na pasta dist.

Inicializando o bot

Data :3

Uma vez com tudo configurado, chegou a hora de escrever o básico do bot. Digite o seguinte código em seu main.ts:

Se você deixou o comando build rodando, basta abrir uma nova aba em seu terminal e iniciar uma conversa com o seu bot, caso já tenha feito isso, basta enviar o seguinte comando para ele:

/start

Algo do tipo deve aparecer:

Bem maneiro, né? Com uma média de 10 linhas de código já fazer seu próprio bot e ele estar funcionando!

Mas a reportagem não foi sobre como fazer um Hello, World! com bot, foi como fazer um bot de pesquisas de podcasts e é isso que será feito em breve.

Conectando com as pesquisas

42

No seu cabeçalho de imports, adicione a seguinte linha:

import * as podcast from ‘itunes-search’;

Comandos

Uma vez carregada a biblioteca ela permitirá as pesquisas na iTunes através do seguinte código que deverá ser adicionado logo em seguida ao anterior:

Agora faça o teste:

/search The Story by The Mission

Inline

Comandos são legais mais quem em pleno 2018 — por favor viajante do futuro, se estiver lendo isso em um ano posterior não tire uma com a minha cara — ainda realiza pesquisas por comandos?

O legal dos bots é a opção online, que permite que você tenha o conteúdo a pronto consumo na hora que quiser e no chat que preferir. Mas para isso você precisará do seguinte código:

E parabéns! Seu bot está pronto :3

Well done, son

Por enquanto ele só funciona na sua máquina, ou seja, quando você desligar o computador ou matar o processo ele deixará de funcionar. Mas se quiser pode fazer com que ele rode em um servidor e é isso que mostrarei como, mas antes a próxima reportagem cobrirá como escrever testes para manter sua aplicação funcionando de maneira segurar sem você ter que fazer esses testes na mão sempre.

Eu não coloco esse código no Github por motivos de “não tem como”, e você pode se perguntar “como assim?”… Esses trechos de código que eu disponibilizo aqui são feitos com o intuito de serem didático, não são códigos do meu dia a dia, me preocupo mais com outras coisas também como segurança e lógica além de tipagem. Caso ainda continue com vontade de ver o código original que eu fiz, ele pode ser encontrado em:

--

--

Lucas Almeida Carotta

Graduating in Computer Science at the University of Sao Paulo (USP), bot maker, weeaboo and fitness enthusiastic http://www.fazendaaa.me/