🚀 Receba notificações das datas de aniversário de pessoas queridas no Telegram! 🚀
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.
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.
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
- 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
- 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
- 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
- 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
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 |
- 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;
- 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;