You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
taskbot/docs/commands-inventory.md

186 lines
6.2 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 0059; hora se normaliza a 023).
- 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 oneshot 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).