Bot de Telegram para concursos por invitaciones (referidos) + ranking y anti-fraude

Job ID: 39724503

Budget: €30 – €250 EUR

Busco desarrollador/a con experiencia en bots de Telegram para crear un bot de concursos por invitaciones en un grupo (≈1.000 miembros). El bot debe generar enlaces personales (deep links), atribuir quién invitó a cada nuevo miembro, mantener un ranking en vivo y aplicar reglas anti-fraude básicas. Se usará de forma recurrente (2–3 veces/año) para distintos retos/sorteos.

Entregables mínimos:

Bot funcional con comandos:

/start, /link (devuelve deep link personal), /top (top 10), /rules, /close (cerrar concurso), /getgroupid.

Lógica de referidos con deep links: t.me/ElBot?start=<user_id>.

Validación de invitaciones: el punto solo se otorga cuando el referido entra al grupo y permanece ≥24 h.

Anti-fraude básico:

Sin auto-referidos.

No contar reingresos/duplicados.

Descontar si el referido abandona en <24 h.

Opción de exigir antigüedad mínima de cuenta (configurable).

Ranking en vivo (mensaje por comando; opcional: actualización periódica del mensaje fijado).

Persistencia en base de datos (SQLite o PostgreSQL).

Configuración por variables de entorno (token, id de grupo, enlace del grupo, fecha fin, días mínimos de antigüedad).

Despliegue en un servicio sencillo (Railway, Render o Docker en VPS) y breve guía de operación (README).

Código fuente en mi repositorio (propiedad intelectual para el cliente).

Deseable (no imprescindible):

Panel web simple (login básico) para ver ranking, descargar CSV y cerrar/abrir concurso.

Captcha de acceso (integración con Rose u otro bot) o check de cuenta sospechosa.

Tests básicos de lógica de referidos.

Tecnología preferida (abierta):

Python (python-telegram-bot) o Node.js (Telegraf/grammY).

BD: SQLite (MVP) o PostgreSQL (si hay panel).

Despliegue: Railway/Render/Docker.
Indica tu stack y por qué.

Entrega esperada:

Tiempo estimado: 3–7 días laborables para MVP.

Comunicación en español.


Especificación técnica

Flujo:

Usuario existente en el grupo → escribe /link en privado con el bot → recibe su deep link.

Nuevo usuario pulsa el deep link → el bot guarda “pendiente de atribución” (referrer_id ↔ referred_id).

Cuando el nuevo usuario entra al grupo, el bot marca la invitación como válida y suma 1 punto al referrer.

Si el invitado abandona <24 h → se invalida el punto.

/top devuelve top 10 con @usuario y puntos.

/close detiene el conteo (o por fecha fin).

Comandos:

/start (bienvenida + enlace del grupo + instrucciones)

/link (muestra deep link del usuario)

/top (ranking)

/rules (reglas)

/close (solo admin/lista blanca)

/getgroupid (en el grupo, para extraer el ID)

Eventos a escuchar:

chat_member en el GROUP_ID para detectar entradas/salidas.

Mensajes directos al bot para /start con parámetro start=<referrer_id>.

Anti-fraude (mínimo):

No sumar si referrer_id == referred_id.

Un solo referrer por referido.

Invalidar si el referido se va antes de 24 h.

Config MIN_ACCOUNT_DAYS (placeholder; se puede reforzar con checks adicionales).

Modelo de datos (ejemplo):

users(user_id PK, username, first_seen_ts)

referrals(referred_id PK, referrer_id, created_at_ts, joined_at_ts, valid BOOL)

settings(k PK, v)

Config (ENV):
BOT_TOKEN, GROUP_ID, GROUP_LINK, MIN_ACCOUNT_DAYS, CONTEST_END_TS, ADMIN_IDS


) Pruebas de aceptación (checklist)

Deep link personal funciona y registra referrer pendiente.

Al entrar al grupo, el referido suma punto a su referrer.

Reingresos no duplican puntos.

Auto-referido no suma.

Salida <24 h invalida el punto.

/top muestra top correcto con conteo real.

/close bloquea nuevas altas.

Variables ENV permiten cambiar grupo/enlaces/fechas sin tocar código.

BD exportable a CSV (ranking final).

Logs mínimos para auditar incidencias.