Esse projeto é um bot no Telegram que lê e retorna informações sobre os livros da Bíblia Sagrada.
- Motivação
- Tecnologias e os motivos de escolher elas
- Estrutura do Projeto
- Instruções de instalação
- Comandos disponíveis
- Guia de contribuição
- Roadmap
Eu me converti ao evangelho aos 18 anos. Nunca me veria no lugar onde estou agora, mas sei que foi Deus que me trouxe até aqui. Uma forma de ser grato a Deus é usar a tecnologia pra propagar a Palavra que me salvou e salvou minha família.
Por extrema afinidade com aplicações JavaScript/TypeScript para Backend, escolhi o NodeJS.
Utilizei Typescript para o desenvolvimento desse bot por familiaridade e afinidade com a linguagem.
Temos um comando em específico, o /daily_thought, que tem como objetivo buscar um versículo aleatório na Bíblia e retornar ao usuário.
A fim de que o versículo não se repita antes que o dia mude, armazeno no Redis uma chave com o seguinte formato: thoughts:{{id_do_usuário}}:{{data_atual}}
. No dia seguinte, o valor armazenado é inválidado, sendo substituido pelo dado que foi processado hoje.
Essa é a única interação que temos atualmente que depende de um contexto de usuário, e esse é o motivo de eu utilizar Redis pra isso, para não ter que precisar criar uma tabela, ou uma coleção.
Puppeteer deve ser a ferramenta mais conhecida no mundo JavaScript/TypeScript para realizar Scrapping.
Ele é extremamente útil pois implementa todo tipo de interação que pode existir entre um usuário e um browser.
Utilizamos ele para buscar novas versões da bíblia e inserir em JSON.
Docker é uma framework Open Source usada para permitir com que aplicações sejam empacotadas em Containers, permitindo com que uma aplicação/projeto possa ser executado sem ter que se preocupar com coisas como: Sistema operacional, Biblíotecas, Armazenamento, etc.
Utilizamos Docker para dar poder para o desenvolvimento, permitindo com que qualquer pessoa que tenha Docker instalado em seu computador, consiga executar e contribuir para nossa aplicação.
O projeto tem a seguinte estrutura:
.
└── [4.0K] src
├── [4.0K] config
├── [4.0K] domain
│ └── [4.0K] errors
├── [4.0K] handlers
│ └── [4.0K] implementations
├── [4.0K] infra
│ ├── [4.0K] adapters
│ ├── [4.0K] database
│ ├── [4.0K] entrypoint
│ ├── [4.0K] providers
│ │ ├── [4.0K] bot
│ │ │ ├── [4.0K] factories
│ │ │ └── [4.0K] implementations
│ │ └── [4.0K] cache
│ │ ├── [4.0K] factories
│ │ └── [4.0K] implementations
│ └── [4.0K] utils
└── [4.0K] modules
└── [4.0K] bible
└── [4.0K] repositories
└── [4.0K] implementations
Onde, respectivamente, equivale a:
- src: Pasta base do projeto, contendo todo o core da aplicação
- config: Pasta que contém todos os arquivos de configurações do projeto, todo tipo de configuração que usa variável de ambiente estará aqui
- domain: Pasta que mapeia todas as entidades do nosso projeto, a representação dos objetos que compõe as nossas regras de negócio.
- domain/errors: Pasta que mapeia todos os erros utilizados na aplicação, com o objetivo de normalizá-los no tratamento de exceções.
- handlers: Os casos de uso da aplicação. Todo comando de um bot do telegram precisa de uma função de callback, esse callback será uma função de um Handler presente nessa pasta.
- infra: Todo código que de alguma forma envolve uma entidade ou domínio externo. Exemplo: O processo que inicia o bot no telegram.
- modules: Os módulos da aplicação divididos por domínios. Contendo: Repositórios de banco de dados, providers e handlers específicos do módulo.
- Docker Engine instalado na máquina.
- NodeJS instalado na sua máquina na versão 16.3.0 ou superior.
- Yarn instalado na sua máquina.
- Um bot cadastrado no catálogo do Telegram
- Uma instância de Redis executada no Docker.
Primeiro, é necessário que você rode uma instância do Redis na sua máquina utilizando Docker:
docker run --rm -it -p 6379:6379 -d redis
Isso vai criar uma instância do Redis que será exposta na porta 6379.
Crie um arquivo chamado .env
e copie o conteúdo do arquivo .env.example
para dentro dele. Em seguida, troque o conteúdo do arquivo para algo parecido com isso:
BOT_TOKEN={{seu_token_gerado_no_telegram}}
REDIS_HOST=localhost
REDIS_PORT=6379
Para instalar as dependências da aplicação, execute um dos comandos abaixo:
yarn
# ou
npm install
Execute o comando abaixo:
yarn start
- /books: Lista todos os livros da bíblia, dividido por velho e novo testamento
- /chapter {{referencia_do_capitulo}}: Retorna todos os versículos de um capítulo.
Exemplo:/chapter 1 Corintios 13
- /verse {{referencia_completa_do_versiculo}}: Retorna o versículo encontrado.
Exemplo:/verse 1 Corintios 13 1
, ou caso queira um intervalo de versículos, utilize traço:/verse 1 Corintios 13 1-10
- /daily_thought: Retorna um versículo aleatório para o dia em que a soliticação foi feita. Essa referência só é modificada no dia seguinte.
- /search: Busca uma referência ou uma lista de referências da bíblia por texto. Exemplo:
/search amor é paciente
.
Para contribuir com o projeto, veja como aqui.
- Automatização de testes
- Crawler de novas versões da bíblia
- Comando que diga fatos históricos sobre um determinado texto ou livro
- Curiosidades sobre a bíblia
- Jogos sobre a bíblia: (quiz, encontre a citação, etc)
- Devocionais
- Criar imagens de maneira dinâmica para cada conteúdo retornado do comando
/daily_thought