Um bot do telegram que conta piadas!
O objetivo de criar este bot foi para demonstrar para alunos de 1o semestre da faculdade o dia-a-dia de uma pessoa desenvolvedora e quais os desafios existentes para se criar uma aplicação. O bot do telegram foi utilizado por ser um tópico atual (conheça mais sobre bots).
Em um ambiente empresarial, a pessoa desenvolvedora recebe um requisito, no formato de uma estória de usuário ou documento de requisitos que diz o que precisa ser criado ou alterado em uma aplicação, sem no entanto, entrar nos detalhes técnicos. Geralmente, os requisitos especificam o que o usuário da aplicação espera do comportamento.
Para a nossa demonstração, o nosso requisito será bem simples:
Crie um bot na plataforma telegram que seja capaz de contar piadas e mostrar as tirinhas do site XKCD.
Observe que o requisito não especificou claramente de onde devemos buscar essas piadas. Temos apenas uma referência para as tirinhas, que é o site XKCD. Em situações como essa, a pessoa desenvolvedora tem duas opções: realizar uma pesquisa na internet para descobrir possíveis fontes de dados que atendam ao requisito (e posteriormente aprovar com o usuário) ou solicitar ao usuário que informe de quais fontes ele deseja buscar a informação.
Já se a pessoa desenvolvedora está programando de maneira independente, concretizando uma idéia, seja por lucro ou diversão (sim, acreditem, programar é divertido!), os requisitos são criados de maneira mais informal, isso quando são pensados. Uma dica: organize suas idéias para que consiga tira-las de sua cabeça e concretiza-las!
Para facilitar o nosso aprendizado, seguem aqui sugestões de fontes de dados para usarmos. Essas idéias foram tiradas do seguinte repositório da internet: Public APIs.
Essas fontes de dados são chamadas de APIs e tem como objetivo facilitar o acesso a informação. Geralmente uma API tem vários endpoints, que nada mais são que URLs parecidos com o de um site, mas que retornam dados. Você pode inclusive tentar no seu browser diretamente. APIs retornam a informação geralmente no formato JSON.
-
Chuck Norris Jokes - Chuck Norris é uma lenda da internet graças as piadas em forma de 'Fatos'. Quer saber mais sobre o Chuck Norris? Leia aqui
- URL: https://api.chucknorris.io/jokes/random.
- Formato:
{ "categories": [], "created_at": "2020-01-05 13:42:29.296379", "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png", "id": "jSy8jwZLQgKNJW0PBhMZAg", "updated_at": "2020-01-05 13:42:29.296379", "url": "https://api.chucknorris.io/jokes/jSy8jwZLQgKNJW0PBhMZAg", "value": "Chuck Norris can turn out the light, brush his teeth and get into bed before the room gets dark." }
-
Geek Jokes - Piadas para nerds.
- URL: https://geek-jokes.sameerkumar.website/api?format=json
- Formato:
{ "joke": "Beware of programmers that carry screwdrivers." }
-
Tirinhas XKCD: O site XKCD (https://xkcd.com) contém tirinhas baseados em assuntos científicos.
- URL: https://wvcode-persona-api.herokuapp.com/xkcd/${numero}
- ${numero} deve ser substituido por um numero qualquer e retornará a tirinha correspondente
- Formato:
{ "month": "1", "num": 1, "link": "", "year": "2006", "news": "", "safe_title": "Barrel - Part 1", "transcript": "[[A boy sits in a barrel which is floating in an ocean.]]\nBoy: I wonder where I'll float next?\n[[The barrel drifts into the distance. Nothing else can be seen.]]\n{{Alt: Don't we all.}}", "alt": "Don't we all.", "img": "https://imgs.xkcd.com/comics/barrel_cropped_(1).jpg", "title": "Barrel - Part 1", "day": "1" }
- URL: https://wvcode-persona-api.herokuapp.com/xkcd/${numero}
Nesta fase, tendo já os requisitos bem definidos, a pessoa desenvolvedora irá começar nas tecnologias que serão necessárias para atender os requisitos.
Normalmente, a pessoa desenvolvedora irá decidir, baseada em uma boa pesquisa na internet, os seguintes pontos:
- Qual a linguagem de programação mais indicada para a tarefa?
- Que bibliotecas a linguagem possui que auxiliam a resolver o problema?
- Essas bibliotecas são seguras?
No nosso caso, escolhemos a linguagem Javascript, por ser a única linguagem de programação que a turma conhece. Mais especificamente, como o código do bot não é um código que é executado a partir de uma página HTML, iremos utilizar javascript send executada através do nodeJS.
O assunto bibliotecas por si só é um mundo a parte. Chamamos de bibliotecas ou libraries em inglês a um pedaço de código que é auto-contido e que nos ajuda a escrever o nosso código. Geralmente, a biblioteca existe para resolver um problema específico em nosso código. No caso da nossa implementação de bot, precisamos de uma biblioteca para se conectar ao Telegram e também uma biblioteca que possa fazer a chamada as APIs.
Pesquisando na internet por artigos atuais, temos que as seguintes bibliotecas podem ser usadas para nosso objetivo:
- Telegraf - para conexão ao Telegram
- Node-fetch - para buscar dados em APIs
Como iremos utilizar node, as bibliotecas que instalamos em nosso programa podem ser gerenciadas através do NPM.
O código completo do nosso bot está aqui neste repositório (arquivo index.js), e colocamos comentários.
Abaixo, iremos listar os passos para que você consiga ver o bot funcionando.
- Clone este repositório
$ /projetos/ > git clone https://github.com/wvcode/funny-bot.git
- Navegue até o diretório recém-criado
$ /projetos/ > cd funny-bot
- Rode o comando para instalar as bibliotecas
$ /projetos/funny-bot > npm install
- Crie o seu próprio bot no Telegram
- Abra o Telegram e procure pelo BotFather
- Inicie a conversa com o BotFather
- Digite o comando /newbot
- Digite um nome para o seu bot
- Digite um username para o seu bot
- Copie o token
- Altere a linha 5 do index.js substituindo a variável process.env.FUNNY_BOT_TOKEN com o seu token ou criando uma variável de ambiente chamada FUNNY_BOT_TOKEN com o valor do seu token
- Agora é só rodar:
$ /projetos/funny-bot > node index.js
- Se nenhum erro ocorreu, vá até o Telegram, procure o seu bot pelo Nome ou username e clique START button. Voilá, seu bot no ar!
Espero que este pequeno tutorial, associado a gravação da palestra tenha ajudado vocês a entender um pouco como é o dia a dia de uma pessoa desenvolvedora e que tenham gostado de criar um bot de maneira tão rápida!
Att,
Walter