Murad Library
RESEARCH#md

RESEARCH

Projeto: IdleRPG para WhatsApp

IdleZap_RPG_passivo_para_WhatsApp.md

research·#MD·IdleZap_RPG_passivo_para_WhatsApp.md
Date
Reading
12 min read

Projeto: IdleRPG para WhatsApp

Resumo executivo

A ideia é criar um RPG passivo inspirado no IdleRPG de IRC, mas adaptado ao comportamento e às limitações do WhatsApp. Em vez de tentar copiar literalmente a experiência de um canal IRC — onde o jogador fica “idle” em um canal e é penalizado por falar — o jogo seria redesenhado para funcionar como uma experiência assíncrona por mensagens, com progressão automática, comandos simples, ranking, guildas, duelos e eventos acumulados.

O ponto central: não devemos fazer um clone cego do IdleRPG para WhatsApp. Isso seria tecnicamente frágil e provavelmente ruim como produto. O WhatsApp não é IRC. O melhor caminho é criar um jogo nativo para mensagens: menos spam, mais opt-in, mais progresso passivo e comandos curtos.


Inspiração

O IdleRPG original nasceu no IRC e funciona com uma lógica deliberadamente absurda: o jogador progride ao ficar parado. Falar, trocar nick, sair do canal ou ser kickado pode gerar penalidades. O charme está justamente nessa inversão: o melhor jogador é quem “não joga”.

No WhatsApp, essa mecânica precisa ser reinterpretada. Não existe o mesmo conceito público de presença em canal IRC, e uma experiência baseada em grupos poderia facilmente virar spam. Portanto, o espírito do IdleRPG deve ser preservado, mas a implementação precisa mudar.


Tese do produto

Um RPG passivo por WhatsApp, opt-in, 1:1, com ranking público, guildas, duelos assíncronos e eventos acumulados.

O jogo não deve depender de conversa constante. Ele deve recompensar a volta ocasional do jogador, não a insistência. A graça está em abrir o WhatsApp, digitar perfil, e descobrir que algo aconteceu enquanto você estava fora.


Princípios de design

1. WhatsApp não é IRC

Tentar simular um canal IRC dentro de um grupo de WhatsApp é uma má ideia. O grupo vira barulho, a API oficial não é ideal para esse tipo de uso, e bots não oficiais são instáveis.

2. O jogo deve ser assíncrono

O jogador não precisa estar online. O servidor calcula tudo com base no tempo passado desde a última resolução.

Exemplo:

Você ficou fora por 7h42m.
Enquanto isso:
- Encontrou uma Capa do Silêncio +2.
- Perdeu um duelo contra Ana.
- Sua guilda avançou 12% na quest "O Kernel Perdido".

3. Poucas mensagens, alto valor

O jogo não deve mandar notificações o tempo todo. O ideal é responder quando o jogador interage. Mensagens proativas devem ser raras, configuráveis e úteis.

4. Anti-spam como mecânica

No IRC, falar demais era penalizado. No WhatsApp, isso pode virar uma mecânica de “fadiga”.

Exemplos:

  • comandos repetidos não aceleram progresso;
  • flood aumenta fadiga;
  • sumir por algumas horas gera bônus de descanso;
  • interagir uma vez por dia dá recompensa;
  • mandar mensagens inúteis como “up” não melhora nada.

5. O jogo precisa ser simples antes de ser complexo

O MVP deve ter poucos comandos e uma progressão clara. Nada de começar com IA, mapa gigante, economia complexa ou 40 classes.


Experiência do jogador

Registro

registrar Pablo Programador

Resposta:

Personagem criado.

Nome: Pablo
Classe: Programador
Nível: 1
Status: descansando

Use "perfil" para ver seu progresso.

Perfil

perfil

Resposta:

Pablo, Programador Nível 7

XP: 82%
Próximo nível em: 3h42m
Ouro: 128
Item raro: Teclado Mecânico +4
Status: descansando
Fadiga: baixa

Eventos acumulados

eventos

Resposta:

Enquanto você estava fora:

- Você encontrou Botas do Silêncio +2.
- Ganhou 31 de ouro.
- Foi desafiado por Ana e perdeu.
- Sua guilda concluiu 18% da quest "Compilar o Kernel Perdido".

Ranking

ranking

Resposta:

Top jogadores:

1. Ana — Nível 14
2. Pablo — Nível 12
3. Bruno — Nível 11
4. Clara — Nível 9
5. Diego — Nível 8

Duelo

duelar Ana

Resposta:

Você desafiou Ana.

Resultado:
Ana venceu.

Motivo:
Ela tinha mais agilidade e um Amuleto de Deploy +3.

Penalidade:
+18 minutos até seu próximo nível.

Comandos do MVP

registrar <nome> <classe>
perfil
eventos
ranking
inventario
duelar <nome>
guilda
quest
ajuda

Esses comandos são suficientes para validar se o loop central é divertido.


Classes iniciais

As classes devem ter sabor, mas sem balanceamento complexo no começo.

Sugestões:

ClasseTemaBônus
Programadorcódigo, bugs, deploymais chance de item técnico
Bardocomunicação, carismabônus em guildas
Guerreirocombate diretobônus em duelos
Ladinosorte, evasãochance de evitar penalidade
Magoeventos raroschance maior de evento especial
Clérigorecuperaçãoreduz fadiga

Mecânicas principais

Progressão passiva

Cada personagem tem um campo last_resolved_at.

Quando o jogador manda qualquer comando, o servidor calcula quanto tempo passou desde a última resolução e aplica:

  • ganho de XP;
  • chance de item;
  • eventos aleatórios;
  • duelos pendentes;
  • progresso de quest;
  • efeitos de fadiga;
  • mudanças de ranking.

Tempo até o próximo nível

O jogo pode manter o espírito do IdleRPG usando um contador regressivo.

Exemplo:

Próximo nível em: 5h13m

Eventos positivos reduzem esse tempo. Penalidades aumentam.

Fadiga

Fadiga é a resposta elegante ao spam.

Ações que podem aumentar fadiga:

  • repetir comandos em sequência;
  • tentar duelar muitas vezes;
  • mandar mensagens sem comando;
  • usar comandos em cooldown.

Efeitos possíveis:

  • menor chance de item;
  • mais tempo até o próximo nível;
  • bloqueio temporário de duelos;
  • mensagens sarcásticas do bot.

Descanso

O oposto da fadiga.

Se o jogador fica algumas horas sem interagir, recebe bônus moderado de descanso.

Exemplo:

Você descansou bem.
Bônus: -12 minutos até o próximo nível.

Itens

Itens devem ser simples no MVP.

Campos básicos:

  • nome;
  • raridade;
  • tipo;
  • modificador;
  • descrição;
  • equipado ou não.

Exemplo:

Teclado Mecânico +4
Tipo: arma
Raridade: raro
Efeito: melhora duelos contra bugs e deploys.

Duelos assíncronos

O jogador desafia outro personagem. O resultado pode ser resolvido imediatamente ou quando o alvo voltar.

Critérios simples:

  • nível;
  • classe;
  • itens;
  • fadiga;
  • sorte.

Guildas

Guildas podem ser o equivalente social dos canais IRC, mas sem exigir grupo de WhatsApp.

Comandos:

guilda criar <nome>
guilda entrar <nome>
guilda membros
guilda ranking

Quests globais

Quests são objetivos coletivos que avançam com o tempo e com participação moderada.

Exemplo:

Quest ativa:
"O Kernel Perdido"

Progresso: 41%
Recompensa: item raro para todos os membros da guilda vencedora.

Arquitetura recomendada

Versão séria e estável

WhatsApp Cloud API
        ↓
Webhook HTTP
        ↓
Backend FastAPI ou NestJS
        ↓
PostgreSQL
        ↓
Redis
        ↓
Worker / fila / cron
        ↓
Painel web opcional

Componentes

1. WhatsApp Cloud API

Recebe mensagens e envia respostas. É o caminho oficial e mais seguro.

2. Backend

Responsável por:

  • autenticar webhooks;
  • interpretar comandos;
  • resolver eventos;
  • consultar e atualizar estado;
  • enviar respostas.

3. PostgreSQL

Guarda estado persistente:

  • jogadores;
  • personagens;
  • itens;
  • eventos;
  • guildas;
  • duelos;
  • quests;
  • logs de mensagens.

4. Redis

Útil para:

  • cooldowns;
  • rate limit;
  • filas leves;
  • cache de ranking;
  • bloqueios temporários.

5. Worker

Processa tarefas periódicas:

  • quests globais;
  • expiração de duelos;
  • rankings;
  • eventos sazonais;
  • limpeza de logs.

6. Painel web

Não é obrigatório no MVP, mas seria ótimo para:

  • ranking público;
  • perfis;
  • mapa ou lore;
  • status de quests;
  • administração.

Modelo de dados inicial

players

CREATE TABLE players (
    id UUID PRIMARY KEY,
    phone_number TEXT UNIQUE NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT now(),
    last_seen_at TIMESTAMP
);

characters

CREATE TABLE characters (
    id UUID PRIMARY KEY,
    player_id UUID REFERENCES players(id),
    name TEXT NOT NULL,
    class TEXT NOT NULL,
    level INTEGER NOT NULL DEFAULT 1,
    xp INTEGER NOT NULL DEFAULT 0,
    gold INTEGER NOT NULL DEFAULT 0,
    fatigue INTEGER NOT NULL DEFAULT 0,
    next_level_at TIMESTAMP,
    last_resolved_at TIMESTAMP NOT NULL DEFAULT now()
);

events

CREATE TABLE events (
    id UUID PRIMARY KEY,
    character_id UUID REFERENCES characters(id),
    type TEXT NOT NULL,
    message TEXT NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT now(),
    seen_at TIMESTAMP
);

items

CREATE TABLE items (
    id UUID PRIMARY KEY,
    character_id UUID REFERENCES characters(id),
    name TEXT NOT NULL,
    rarity TEXT NOT NULL,
    slot TEXT,
    modifier INTEGER NOT NULL DEFAULT 0,
    equipped BOOLEAN NOT NULL DEFAULT false
);

guilds

CREATE TABLE guilds (
    id UUID PRIMARY KEY,
    name TEXT UNIQUE NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT now()
);

API interna sugerida

Resolver personagem

resolveCharacter(character_id)

Responsável por calcular o tempo desde last_resolved_at e aplicar eventos.

Interpretar comando

parseCommand(message_text)

Transforma texto cru em intenção.

Exemplo:

{
  "command": "duel",
  "target": "Ana"
}

Executar comando

executeCommand(player_id, command)

Aplica a lógica do jogo e retorna uma resposta formatada para WhatsApp.


WhatsApp: caminhos possíveis

Caminho A — Oficial

Usar a WhatsApp Cloud API.

Vantagens:

  • mais estável;
  • menor risco de banimento;
  • adequado para produto real;
  • webhooks oficiais;
  • controle melhor de mensagens.

Desvantagens:

  • menos liberdade;
  • regras de templates;
  • janela de atendimento;
  • grupos podem ser limitados ou inviáveis dependendo do caso;
  • custos e aprovação de conta/template.

Caminho B — Não oficial

Usar automação de WhatsApp Web, como Baileys.

Vantagens:

  • mais liberdade;
  • pode funcionar em grupos;
  • bom para protótipo privado;
  • mais parecido com bot de IRC.

Desvantagens:

  • não é oficial;
  • pode quebrar sem aviso;
  • risco de bloqueio;
  • risco operacional;
  • péssima base para produto público.

Veredito: usar Cloud API para MVP sério. Usar Baileys apenas se for um experimento fechado, descartável e sem número importante.


Riscos

1. Política da plataforma

Esse é o maior risco. WhatsApp não é uma plataforma aberta como IRC. O produto precisa respeitar o modelo de mensagens, opt-in e baixa frequência.

2. Grupos

Bot em grupo é a fantasia mais divertida, mas também a parte mais problemática. Não deve ser o centro do MVP.

3. Spam

Se o jogo mandar mensagens demais, morre rápido. WhatsApp é íntimo; notificação ruim ali irrita mais que notificação em Discord ou Telegram.

4. Retenção falsa

Se o jogo recompensar interação compulsiva, pode virar um clicker chato. A graça deve estar no retorno ocasional.

5. Complexidade prematura

IA, lore procedural, marketplace, NFT, mapa gigante, app mobile: tudo isso é distração no começo. Primeiro o loop precisa ser divertido em texto puro.


Roadmap

Fase 0 — Protótipo local

Objetivo: validar regras sem WhatsApp.

Entregáveis:

  • motor de progressão;
  • classes;
  • itens;
  • eventos;
  • duelos;
  • ranking fake;
  • interface CLI.

Fase 1 — MVP WhatsApp 1:1

Objetivo: bot funcional com comandos básicos.

Entregáveis:

  • webhook;
  • cadastro;
  • perfil;
  • eventos acumulados;
  • ranking;
  • inventário;
  • duelos;
  • logs.

Fase 2 — Social leve

Objetivo: adicionar comunidade sem depender de grupos.

Entregáveis:

  • guildas;
  • ranking por guilda;
  • quests globais;
  • convites;
  • página web pública.

Fase 3 — Temporadas

Objetivo: dar motivo para voltar.

Entregáveis:

  • temporadas mensais;
  • reset parcial;
  • itens sazonais;
  • títulos;
  • conquistas.

Fase 4 — Experimento em grupo

Objetivo: testar bot em grupo sem comprometer o produto principal.

Entregáveis:

  • integração experimental;
  • grupo pequeno;
  • mensagens limitadas;
  • fallback para 1:1.

MVP técnico sugerido

Stack

  • Python + FastAPI
  • PostgreSQL
  • Redis
  • RQ ou Celery
  • WhatsApp Cloud API
  • Docker Compose
  • Painel simples em Next.js ou HTML server-side

Estrutura de pastas

whatsapp-idlerpg/
├── app/
│   ├── main.py
│   ├── config.py
│   ├── webhooks/
│   ├── game/
│   │   ├── commands.py
│   │   ├── resolver.py
│   │   ├── duels.py
│   │   ├── items.py
│   │   └── events.py
│   ├── db/
│   └── whatsapp/
├── migrations/
├── tests/
├── docker-compose.yml
└── README.md

Exemplo de loop de resolução

def resolve_character(character, now):
    elapsed = now - character.last_resolved_at

    if elapsed.total_seconds() <= 0:
        return []

    events = []

    # Progresso passivo
    minutes = elapsed.total_seconds() // 60
    character.xp += int(minutes * base_xp_rate(character))

    # Descanso
    if minutes >= 180:
        character.fatigue = max(0, character.fatigue - 2)
        events.append("Você descansou bem e reduziu sua fadiga.")

    # Evento aleatório
    if should_roll_event(minutes):
        events.append(roll_random_event(character))

    # Level up
    while character.xp >= xp_needed(character.level):
        character.xp -= xp_needed(character.level)
        character.level += 1
        events.append(f"Você subiu para o nível {character.level}.")

    character.last_resolved_at = now
    return events

Tom do bot

O bot deve ter personalidade seca, engraçada e levemente sarcástica. Nada de textão motivacional.

Exemplos:

Você tentou farmar digitando "perfil" 12 vezes.
Resultado: absolutamente nada.
Fadiga +1.
Você encontrou uma Espada de Deploy.
Ela parece poderosa e mal testada.
Você perdeu um duelo contra Ana.
Motivo: ela estava descansada. Você estava emocionado.

Nome do projeto

Sugestões:

  • ZapRPG
  • IdleZap
  • ZapQuest
  • RPG de Bolso
  • ZapIdle
  • MuradMUD
  • BotecoRPG
  • Descanso & Dragões
  • Calabouço Assíncrono

Melhor nome provisório: IdleZap.

É curto, claro e comunica a ideia rapidamente.


Decisão recomendada

Construir o projeto como IdleZap: um RPG passivo por WhatsApp, usando a API oficial como base e evitando grupos no MVP.

A primeira versão deve provar apenas uma coisa:

É divertido voltar depois de algumas horas e ver o que aconteceu com seu personagem?

Se a resposta for sim, vale expandir. Se a resposta for não, nenhum grupo, IA, ranking bonito ou feature social salva o produto.


Referências técnicas

Related documents

Projeto: IdleRPG para WhatsApp · Murad Library