Skip to content

Dedo-Finger2/fam-birthday-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎂 FamBirthday Bot 🤖

🚀 Receba notificações das datas de aniversário de pessoas queridas no Telegram! 🚀


📔 Descrição

O Fam Birthday Bot é um cron job que roda um sistema de mensageria feito em Golang, integrando com a API do Telegram para criar um bot.

Este bot é usado para enviar mensagens para uma lista de usuários com permissão de receber suas mensagens, e isso é definido em um arquivo .env. Com isso vem o cron job, que está configurado para rodar sempre as 5 horas da manhã de diariamente, nesse processo o sistema faz uma validação indo ao banco de dados. Que atualmente é um arquivo de configuração em YAML, e itera sobre todas as datas presentes lá. Cada data possui um array de pessoas, e cada pessoa possui nome, idade e complemento.

| O complemento serve para identificar pessoas com nomes iguais. Diferenciando eles.

Se a data atual bater com uma data no arquivo YAML, então todas as pessoas dentro do array de pessoas daquela data fazem aniversário no dia. Então é pego o complemento e nome das pessoas e enviado com uma mensagem pre-feita para os usuários com permissão de receber mensagens do bot. Depois disso o sistema entra em hiato por 24 horas, fazendo a validação apenas 24 horas depois.

🎯 Objetivo

O objetivo deste projeto é auxiliar o usuário que frequentemente esquece as datas de aniversário de pessoas conhecidas através do envio de mensagens no Telegram as 5 horas da manhã sempre que houver um aniversariante no dia. Dando assim tempo para o usuário dar feliz aniversário para esta pessoa.

Como usar

Clone the repo

git clone https://github.com/Dedo-Finger2/fam-birthday-bot.git

Creates the birthdates config file

cp internal/config/birth_dates.example.yml internal/config/birth_dates.yml

Creates the .env file OBS: The TESTING_CHAT_ID can be your chat id

cp .env.example .env

Execute the tests

make test

Runs the application

make dev

⚠️ Requisitos

Funcionais

  • O sistema deve poder enviar mensagens para uma lista de usuários
  • O sistema deve usar um cron job para executar a validação de data em um determinado horário dia
  • O sistema deve poder integrar com a API do Telegram
  • O sistema deve poder enviar as mensagens através de um bot no Telegram
  • O sistema deve poder lidar com casos onde hajam mais de um aniversariante no dia, formatando a mensagem template para encaixar mais de um nome
  • O sistema só deve mandar mensagem para uma lista seleta de usuários com permissão para receber as mensagens
  • Deve ser usado um arquivo YAML para configuração
  • Deve ser usado um arquivo JSON para testes

Não funcionais

  • Deve haver um QR code para acessar o Bot no Telegram;
  • O sistema deve constar com um subsistema de logs feitos a nível de linha de comando;
  • Deve existir um Google Forms que seja capaz de coletar dados para serem usados no sistema;
  • Log de erros durante o envio de mensagens
  • Segurança dos dados do bot e do nome dos aniversariantes
  • Performance para lidar com vários envios sem sobrecarregar o servidor

Regras de negócio

  • As mensagens só devem ser enviadas para IDs cadastrados no sistema;
  • A validação de data deve ser feita apenas uma vez por dia
  • As mensagens só devem ser enviadas caso haja um match com uma data de aniversário e a data atual da validação
  • Caso não hajam aniversariantes no dia o sistema deve aguardar 24 horas para validar novamente as datas

⚒️ Infraestrutura

Fluxograma

🖿 Estrutura de pastas

- builds/
  - fam-birthdate-amd
  - fam-birthdate-arm
  - fam-birthdate.exe
- cmd/
  - main.go
- internal/
    - config/
      - birth_dates.yml
      - birth_dates.json
      - bot.go
    - types/
    - utils/
- public
  - images/
Makefile
README.md
LICENSE
go.mod
go.sum

🖥️ Tecnologias

Tech Utilidade Versão
Golang Linguagem de programação usada 1.22.6
Neovim Editor de código via terminal 10
tgbotapi API do Telegram 5.5.1
robfig/cron Biblioteca para criação de cron jobs em Golang 3.0.1
viper Biblioteca para trabalho com variáveis de ambiente em Golang 1.19.0
gopkg.in/yaml.v3 Biblioteca para trabalho com arquivos YAML em Golang 3.0.1

🌐 Implementações futuras

  • Deploy;
  • Cadastro de novas datas de aniversário através do bot;
  • Envio de mensagem de parabéns para o aniversariante;
  • Envio de mensagens seletas para usuários específicos;
    • Eu só quero ser notificado das datas de fulano, sicrano e beltrano.
  • Tratamento de erros na hora de enviar mensagens, adiando o envio até que seja enviada;
  • Separar em dois micro serviços dependentes;
  • Separação da aplicação em 2 micro serviços, um de mensageiria e outro para tratar das datas de aniversário;

✏️ O que eu aprendi com este projeto

  • Envio de mensagens mediante um bot no Telegram com a linguagem Go;
  • Criação de um bot de Telegram usando Go;
  • Agendamento de tarefas feitas em Go;
  • Deploy de aplicações Go;
  • Tratamento de erros em Go com SLog;
  • Calcular quanto tempo falta para determinada data em Go;
  • Criação de uma data customizada em Go;
  • Obtenção do diretório raiz do projeto em Go;
  • Formatação de horas e minutos oriundos da diferença de tempo entre duas datas em Go;
  • Testes unitários em Go;
  • Trabalho com variáveis de ambiente usando a biblioteca Viper em Go;

Meus contatos

About

Um cron job que envia lembretes de aniversários através de um bot do Telegram

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published