TibiaTracker - Monitor de Progresso para o jogo Tibia
📊 Visão Geral do Projeto
Dashboard interativo e de alta performance para acompanhar a jornada rumo ao Level 1000 no Tibia.
Automatiza a coleta diária de dados via Google Apps Script e armazena tudo em Google Sheets, oferecendo análises detalhadas e visualizações ricas através de um dashboard construído com Dash (Plotly).
📂 Estrutura de Arquivos
TIBIATRACKER-PY/
├── 📁 .venv/ # Ambiente virtual (isolamento de bibliotecas)
├── 📁 assets/ # CSS, imagens e identidade visual (Cyborg)
├── 📄 app.py # Core do Dashboard (Dash/Plotly)
├── 📄 tibiatracker.js # Script de automação (Google Apps Script)
├── 📄 requirements.txt # Dependências do projeto (pip install)
├── 📄 README.md # Documentação técnica e guia de uso
├── 📄 .env # Variáveis de ambiente (Segredo)
├── 📄 .gitignore # Proteção contra upload de arquivos sensíveis
└── 📄 credenciais.json # Chave de acesso à API do Google
🔄 Fluxo Lógico (Simplificado)
- EXTRAGEM:
tibiatracker.js➔ TibiaData API - DEPÓSITO: Google Sheets (Banco de dados)
- ANÁLISE:
app.py➔ Pandas/Plotly (Processamento) - DEPLOY: Render ➔ Usuário final
Deseja ver o resultado final?
🔗 Repositório no GitHub:
👉 https://github.com/peixotojeff/tibiatracker.py
🔗 Acesse o dashboard online (exemplo):
👉 https://tibia-tracker.onrender.com
🎯 Principais Funcionalidades e Visualizações
- Roadmap de Progresso (Milestones): Evolução do level ao longo do tempo
- Heatmap de Intensidade de Hunts: Ganho diário e semanal de experience (identifica dias/horários mais produtivos)
- Análise de Cenários ETA: Previsões de tempo restante para o level 1000 (cenários: ritmo atual, melhor caso, pior caso, média dos últimos 30 dias)
- Aderência à Meta Diária (SLA): Você está "pagando o boleto" de XP todo dia?
- Curva de Entrega vs. Plano Acumulado: Desvio acumulado em relação à meta
- Indicadores de Tendência e Performance: Taxa média diária/semanal, impacto de mortes, hunts recorde
- Esforço Residual: Quanto XP falta para o próximo level / milestone
Exemplos de insights que o dashboard entrega
- Quantos dias faltam (projeção realista, otimista e pessimista)
- Taxa média de XP/hora e XP/dia nos últimos 7/30/90 dias
- Períodos de maior produtividade (fim de semana vs. dias úteis)
- Impacto real das mortes e paradas no progresso geral
- Comparativo: ritmo atual vs. ritmo necessário para chegar em 1000 até [data desejada]
Arquitetura e Stack Tecnológica
Nesta seção, detalhamos as camadas do projeto, desde a extração dos dados até a disponibilização do dashboard final.
📡 Coleta de Dados
Tecnologia: TibiaData API
Finalidade: Fonte oficial e gratuita para obtenção dos dados brutos dos personagens.
⚙️ Automação
Tecnologia: Google Apps Script
Finalidade: Execução de rotinas diárias automáticas para coleta e inserção de dados no ecossistema Google.
🗄️ Armazenamento
Tecnologia: Google Sheets
Finalidade: Utilizado como um banco de dados temporal simples, facilitando o acesso e a edição rápida.
🧠 Processamento e Análise
Tecnologia: Python 3.8+ (pandas, gspread)
Finalidade: Realiza a leitura da planilha, limpeza dos dados e todos os cálculos estatísticos necessários.
📊 Dashboard e Interface
Tecnologia: Dash (Plotly) & Dash Bootstrap Components
Finalidade: Criação da interface web interativa, com gráficos responsivos e filtros dinâmicos.
🎨 Design Visual
Tecnologia: Tema Cyborg (Bootstrap)
Finalidade: Implementação de uma interface dark mode moderna, otimizada para visualização de dados.
🚀 Hospedagem e Deploy
Tecnologia: Render (Plano Gratuito)
Finalidade: Hospedagem da aplicação com deploy contínuo integrado ao repositório.
🔐 Segurança
Tecnologia: python-dotenv
Finalidade: Gerenciamento de credenciais e tokens sensíveis através de variáveis de ambiente.
🚀 Como Funciona (Fluxo Completo)
-
Google Apps Script roda diariamente (trigger às 8h ou horário configurado)
→ consulta TibiaData API
→ salva level, experience, vocação, data, etc. no Google Sheets -
Dashboard Dash lê a planilha
→ processa séries temporais
→ calcula taxas, projeções lineares/exponenciais, heatmaps, ETAs
→ gera gráficos interativos -
Usuário acessa o dashboard via navegador
⚙️ Configuração e Uso
Opção 1 – Rodar localmente (recomendado para desenvolvimento)
-
Clone o repositório
- git clone https://github.com/peixotojeff/tibiatracker.py.git
- cd tibiatracker.py
-
Crie e ative ambiente virtual
- python -m venv .venv
- source .venv/bin/activate # Linux / macOS ou
- ..venv\Scripts\activate # Windows
-
Instale dependências
- pip install -r requirements.txt
-
Crie o arquivo .env na raiz do projeto
- GOOGLE_CREDENTIALS='{"type":"service_account", ...}' # todo o JSON
- GOOGLE_SPREADSHEET_ID='abc123xyz...'
- GOOGLE_WORKSHEET_NAME='EXP/DIA' # ou o nome da aba
- Rode o dashboard
- python app.py
Acesse: http://127.0.0.1:8050
Opção 2 – Deploy no Render (gratuito)
Siga o passo a passo detalhado já presente no seu README atual (está muito bom).
Resumo rápido:
.gitignoredeve conter.env,credenciais.json,.venv/- No Render → New Web Service → conecte o repositório
- Build Command:
pip install -r requirements.txt - Start Command:
gunicorn app:server - Variáveis de ambiente:
GOOGLE_CREDENTIALS→ cole o JSON inteiroGOOGLE_SPREADSHEET_IDGOOGLE_WORKSHEET_NAME
Como obter o arquivo de credenciais do Google (Service Account)
Para o dashboard acessar o Google Sheets de forma segura e automática, você precisa criar uma Service Account no Google Cloud e baixar o arquivo JSON de credenciais. Siga os passos abaixo:
- Acesse o Google Cloud Console
- Crie ou selecione um projeto existente (recomendado: crie um novo só para este projeto, ex: "TibiaTracker")
- No menu lateral, vá em APIs & Services → Credentials
- Clique em + CREATE CREDENTIALS → Service account
- Preencha:
- Service account name: algo como "tibiatracker-service"
- Service account ID: gerado automaticamente
- Description (opcional): "Acesso ao Google Sheets para TibiaTracker" Clique em CREATE AND CONTINUE
- Step 2 – Grant this service account access to project
Pode pular (deixe sem roles por enquanto) → CONTINUE - Step 3 – Grant users access to this service account
Pode pular → DONE - Na lista de Service Accounts, clique no e-mail da conta recém-criada
- Vá na aba Keys → ADD KEY → Create new key
- Escolha JSON → CREATE
- O arquivo
seu-projeto-123456789.jsonserá baixado automaticamente
Próximo passo importante:
Compartilhe sua planilha do Google Sheets com o e-mail da Service Account (o e-mail termina em @seu-projeto.iam.gserviceaccount.com).
- Abra a planilha → Compartilhar → cole o e-mail da service account → dê permissão de Editor.
Pronto! Agora você tem o arquivo JSON que será usado como GOOGLE_CREDENTIALS (localmente via .env ou no Render como variável de ambiente).
Configuração do Google Apps Script (automação diária)
O script trackertibia.js deve ser colado no Google Apps Script do seu projeto.
Principais parâmetros a editar:
// Configuration - EDITE AQUI
const WORLD = "SeuMundo"; // Ex: "Antica", "Calmera"
const CATEGORY = "experience"; // Geralmente "experience"
const VOCATION = "druid"; // "knight", "paladin", "sorcerer", "druid" ou "all"
const CHARACTER_NAME = "Nome Do Personagem"; // Exato como aparece no jogo
const START_PAGE = 1;
const END_PAGE = 4; // Ajuste conforme necessário para encontrar o personagem
const SPREADSHEET_ID = "ID_DA_SUA_PLANILHA"; // Encontrado na URL do Google Sheets
const SHEET_NAME = "Dados"; // Nome da aba onde os dados serão salvos
const TIMEZONE = "GMT-3"; // Ajuste para seu fuso (ex: "GMT-3" para Brasil)
Trigger: diário → 8h (ou horário que preferir).
🛡️ Segurança
- Nenhuma credencial fica no repositório (Push Protection do GitHub ativado)
- Uso exclusivo de Service Account do Google
- Variáveis de ambiente no Render (nunca commitadas)
Próximos Passos / Ideias
- Adicionar login simples (para múltiplos personagens)
- Integração com deaths / kills da API
- Alertas via Telegram/Discord quando meta diária é atingida
- Cálculo de XP/hora por hunt (se registrar manualmente)
- Exportar relatório PDF mensal
Se você quiser, posso ajudar a implementar alguma dessas ideias ou melhorar algum gráfico específico.
Boa caçada e boa sorte rumo ao level 1000! ⚔️🧙♂️
Publicado por Jefferson Peixoto em 03 de janeiro de 2026