# Inventario de Comandos del Bot de Tareas

Ámbito: WhatsApp (DM y grupos)  
Objetivo: fuente única y estable de copy y comportamiento actual.

Notas generales
- El bot responde por DM, incluso cuando escribes en un grupo, salvo mensajes muy concretos de estado. En modo de “gating” estricto de grupos (GROUP_GATING_MODE='enforce'), si el grupo no está permitido, el bot puede no responder en absoluto.
- Zona horaria: se usa TZ (por defecto Europe/Madrid) para calcular “hoy”, “mañana” y vencimientos.
- IDs: se muestran con 4 dígitos (ej.: `0026`), pero puedes escribirlos sin ceros (ej.: 26).
- Límite de listados: 10 elementos por sección; si hay más, se muestra “... y N más”.
- Fechas: formato visual DD/MM; indicador de vencida con ⚠️.

---

## /t nueva (crear)

Alias: `n`, `nueva`, `crear`, `+`  
Sintaxis: `/t n <descripción> [fecha] [@menciones...]`

Parámetros
- descripción: texto libre.
- fecha (opcional): formatos aceptados:
  - `YYYY-MM-DD`
  - `YY-MM-DD` (se expande a `20YY-MM-DD`)
  - Tokens naturales: `hoy`, `mañana` (con o sin acento)
  - Se ignora puntuación adyacente simple; se usa la última fecha válida encontrada; no se aceptan fechas pasadas.
- @menciones (opcional): puedes mencionar JIDs crudos o tokens `@...`. Se filtran no plausibles y se intenta resolver alias. Si no se puede, se envía un DM al creador con instrucciones de onboarding (activar).

Asignación por contexto
- En grupos: si no hay menciones, la tarea queda “sin responsable”.
- En DM: si no hay menciones, se asigna al creador.

Grupo asociado
- Solo se asigna `group_id` si el grupo está activo. Si GROUP_GATING_MODE='enforce' y el grupo no está permitido, se crea “sin grupo”.

Ejemplos
- `/t n Preparar informe 2025-11-05 @600123456`
- `/t + Comprar pan mañana`
- `/t crear Llamar a proveedores @ana @juan`
- `/t n Presentación 25-02-02` (→ 2025-02-02)

---

## /t ver (listar)

Alias: `ver`, `mostrar`, `listar`, `ls`  
Sintaxis: `/t ver [grupo|mis|todos|sin]` (el alcance es opcional)

Alcances
- `grupo`: lista pendientes del grupo actual (solo desde grupo activo).
- `mis`: tus tareas pendientes (por DM).
- `todos`: “Tus tareas” + “sin responsable”.
  - En grupo: incluye “sin responsable” solo del grupo actual (compatibilidad).
  - En DM: incluye “sin responsable” de todos los grupos donde eres miembro activo (si el snapshot de membresía es fresco).
- `sin`: solo tareas sin responsable del grupo actual (desde grupo).

Indicadores
- Fechas en `DD/MM`.
- ⚠️ delante de la fecha si está vencida (según TZ configurada).

Límites
- Máx. 10 elementos por sección; si hay más, se añade “... y N más”.

Ejemplos
- En grupo: `/t ver` (equivale a `grupo`), `/t ver sin`
- Por DM: `/t ver mis`, `/t ver todos`

---

## /t x (completar)

Alias: `x`, `hecho`, `completar`, `done`  
Sintaxis: `/t x <id|id,id,...|id id ...>`  
Soporta múltiples IDs separados por espacios y/o comas. Máx. 10 IDs.

Resolución de ID
- Primero intenta `display_code` (código corto de 4 dígitos) en tareas activas; si no, usa el ID real.

Gating de membresía (opcional)
- Si `GROUP_MEMBERS_ENFORCE=true` y el snapshot del grupo es fresco, debes ser miembro activo para completar.

Ejemplos
- `/t x 26`
- `/t x 14 19 24`
- `/t x 14,19,24`

---

## /t tomar (asumir)

Alias: `tomar`, `claim`, `asumir`, `asumo`  
Sintaxis: `/t tomar <id|id,id,...|id id ...>`  
Múltiples IDs; máx. 10.

Gating de membresía (opcional)
- Si `GROUP_MEMBERS_ENFORCE=true` y snapshot fresco, debes ser miembro activo para tomar tareas del grupo.

Ejemplos
- `/t tomar 12`
- `/t tomar 12 19 50`
- `/t tomar 12,19,50`

---

## /t soltar (unassign)

Alias: `soltar`, `unassign`, `dejar`, `liberar`, `renunciar`  
Sintaxis: `/t soltar <id>`  
Un solo ID.

Gating de membresía (opcional)
- Si `GROUP_MEMBERS_ENFORCE=true` y snapshot fresco, debes ser miembro activo para soltar tareas del grupo.

Ejemplos
- `/t soltar 26`

---

## /t configurar (recordatorios)

Alias: `config`, `configurar`  
Sintaxis: `/t configurar diario|l-v|semanal|off [HH:MM]`

Valores admitidos y alias
- `diario`/`diaria` → recordatorio diario (se guarda como `daily`).
- `laborables` (`l-v`, `lv`) → lunes a viernes (se guarda como `weekdays`).
- `semanal` → semanal (asume lunes; se guarda como `weekly`).
- `off`/`apagar`/`ninguno` → sin recordatorios (se guarda como `off`).

Hora
- Formato `HH:MM` (minutos 00–59; hora se normaliza a 0–23).  
- Si omites la hora, se conserva la anterior o se usa `08:30` por defecto (y `lunes` para semanal).

Nota de localización
- Internamente se almacenan claves en inglés (`daily`, `weekdays`, `weekly`, `off`), pero el copy al usuario es en español. Pendiente de revisión futura para evitar fugas como “weekly” en mensajes.

Ejemplos
- `/t configurar diaria 09:00`
- `/t configurar l-v 08:30`
- `/t configurar semanal` (→ lunes 08:30)
- `/t configurar off`

---

## /t ayuda

Alias: `ayuda`, `help`, `?`  
Sintaxis: `/t ayuda` | `/t ayuda avanzada`

Comportamiento actual
- Ayuda rápida con comandos básicos, límites y ejemplos cortos.
- “Ayuda avanzada” lista alias y detalla opciones y límites.

Nota
- El contenido de ayuda está centralizado y consistente.

---

## /t web

Sintaxis: `/t web` (solo por DM)

Descripción
- Genera un token de acceso one‑shot válido 10 minutos, invalida tokens previos y devuelve una URL de login basada en `WEB_BASE_URL`.

Ejemplo
- `Acceso web: https://…/login?token=...`  
  “Válido durante 10 minutos. Si caduca, vuelve a enviar `/t web`.”

---

## Comandos desconocidos

Ante comandos no reconocidos, el bot responde por DM con un mensaje que incluye el encabezado “❓ Comando no reconocido”, la sugerencia “Prueba `/t ayuda`” y la ayuda rápida inline.

## Notas adicionales

- Estilo y formato:
  - IDs: `codeId()` → 4 dígitos entre backticks.
  - Fechas: `formatDDMM()` → `DD/MM`.
  - Estilos disponibles: negrita `*...*`, cursiva `_<...>_`. Próximamente: `code()`, `section()`, `bullets()`.
- Gating de grupos:
  - Si `GROUP_GATING_MODE='enforce'` y el grupo no está permitido, los comandos en ese grupo pueden quedar bloqueados (sin respuesta).
- Membresía de grupo:
  - Si `GROUP_MEMBERS_ENFORCE=true` y el snapshot es fresco, algunas acciones requieren ser miembro activo (ver grupo, completar, tomar, soltar).
