Bot de Telegram para registrar horas de trabajo de forma sencilla. Permite iniciar y detener sesiones, consultar tus horas, obtener consolidado por usuario y administrar el estado de otros miembros.
- Estado del proyecto
- Características
- Requisitos
- Instalación rápida
- Configuración
- Uso básico
- Estructura del proyecto
- Guía para desarrolladores
- Documentación técnica
- Documentación automática (PHPDoc)
- Roadmap
- FAQ
- Recursos adicionales
- Créditos
Prototipo funcional / WIP. Falta fortalecer configuración por entorno, pruebas automatizadas y despliegue reproducible.
- Comandos para empezar a trabajar (
/trabajar) y pausar (/descansar). - Consulta de horas personales (
/horas) y consolidado global (/consolidado). - Panel de administración por comandos para verificar estados (
/estados) y forzar descanso/trabajo a otros usuarios. - Persistencia ligera con SleekDB (almacenado en disco).
- Implementado con Nutgram para la capa de Telegram.
- PHP 8.1+ (se usan enums).
- Composer.
- Token de bot de Telegram y una URL pública HTTPS para el webhook.
- Permisos de escritura en
src/Database/para el usuario del servidor web.
El paquete en composer.json se llama aefmind/corocoro mientras que el repositorio es corocoritobot. Se alinearán en la siguiente iteración para evitar confusión en instalaciones y futuras publicaciones en Packagist.
- Clona el repositorio y descarga dependencias (nota: el paquete en
composer.jsonse llamaaefmind/corocoro, pero el repositorio escorocoritobot; se alineará en una próxima iteración):
git clone https://github.com/aefmind/corocoritobot.git
cd corocoritobot
composer install- Configura los valores mínimos:
- Define tu token en
src/App/main.php::botToken(). - Agrega los usuarios autorizados en
src/App/main.php::users(), asignando rolAdminoUser. - Crea (si no existe) la carpeta
src/Database/con permisos de escritura.
-
Configura el endpoint del webhook apuntando a
src/public/niufn38fy3e98fhsff.php. El nombre aleatorio NO es seguridad; usa el token del bot,safeMode, filtrado de IPs (rango de Telegram), validación del headerX-Telegram-Bot-Api-Secret-Tokeno un proxy inverso con autenticación. Nutgram valida el header cuando se definesecretToken(actualmente se pasa el token del bot; puedes usar uno dedicado). Para entornos locales puedes usarphp -S localhost:8000 -t src/publicjunto con un túnel tipo ngrok. -
(Opcional) Crea el archivo
src/App/.needsetupy realiza una petición al webhook para que Nutgram intente fijar el webhook automáticamente (asegúrate de ajustarbotUrl()con tu URL pública antes de hacerlo).
- Token del bot: sustituye el valor retornado por
botToken()con tu token real. - Usuarios autorizados: edita la función
users()para declarar administradores y usuarios. - Directorio de datos: por defecto
dbDirectory()apunta asrc/Database/. Si cambias la ruta, asegúrate de que exista y tenga permisos de escritura. - Variables de entorno: se incluye
.env.examplecomo referencia; al migrar a carga por entorno, replica sus claves y usa una librería comovlucas/phpdotenvpara cargarlas.
- Mantén
safeModeactivado (ya configurado enbot.php). - Define un
secretTokendedicado y verifica que el servidor valide el headerX-Telegram-Bot-Api-Secret-Token(Nutgram lo hace al recibirlo). - Restringe el acceso al endpoint a las IPs de Telegram (consulta la lista oficial).
- Considera poner el endpoint detrás de un proxy que aplique TLS y autenticación adicional si se requiere.
Comandos disponibles dentro del chat del bot:
/start: da la bienvenida y registra al usuario si no existe./trabajaro botón Trabajar: abre una sesión de trabajo./descansaro botón Descansar: cierra la sesión activa y guarda la duración./horas: muestra las horas acumuladas del usuario./consolidado: (solo admin) total global y detalle por usuario./estados: (solo admin) estado actual de todos los usuarios./descansando {usuario}//trabajando {usuario}: (solo admin) fuerza descanso o trabajo.
src/
├─ App/
│ ├─ Classes/ # Enums y clases de apoyo
│ ├─ bot.php # Registro de comandos y webhook
│ ├─ controllers.php # Lógica principal de cada comando
│ ├─ functions.php # Helpers y acceso a la base de datos
│ └─ main.php # Configuración mínima (token, usuarios, rutas)
└─ public/
├─ index.php # Respuesta 404 por defecto
└─ niufn38fy3e98fhsff.php # Punto de entrada del webhook
- Estilo de código: sigue PSR-12 y documenta funciones públicas con PHPDoc.
- Dependencias: gestiona con Composer; no se versiona
vendor/en un flujo típico, aunque está presente en este snapshot. - Tests: aún no hay suite. Antes de abrir PRs, prueba manualmente los comandos clave.
- Flujo sugerido para nuevas features:
- Duplica este repo o crea una rama.
- Añade o ajusta comandos en
bot.phpy su lógica encontrollers.php. - Si introduces nuevos roles o configuraciones, refleja los cambios en
users()y en la documentación. - Considera agregar pruebas (por ejemplo con Pest o PHPUnit) y CI cuando sea posible.
Consulta CONTRIBUTING.md para abrir issues o PRs y conocer el proceso esperado.
- Webhook y modo seguro: se usa
Nutgram\RunningMode\WebhookconsafeModeactivado. - Persistencia:
SleekDBguarda coleccionesusersytimeRecordsen disco (src/Database/). - Autorización:
users()devuelve un mapausername => UserRole. Si el usuario no está, se responde con403. - Flujo de comandos: cada comando registrado en
bot.phpdelega en una función decontrollers.php, que valida rol, interactúa con la base y responde con teclados inline cuando aplica.
- Añade anotaciones PHPDoc a funciones y controladores para describir parámetros, roles y efectos colaterales.
- Para generar HTML de referencia se puede usar
phpDocumentor:Publica el contenido decomposer require --dev phpdocumentor/phpdocumentor vendor/bin/phpdoc -d src -t docs/api
docs/apien tu hosting estático o revísalo localmente.
- Configuración basada en variables de entorno (.env) y carga segura de secretos.
- Automatizar despliegue del webhook y saneamiento de
botUrl(). - Añadir suite de pruebas (unitarias y de integración) y CI.
- Dockerización y receta de desarrollo local (ngrok incluido).
- Internacionalización/multi-idioma y mensajes configurables.
- Reportes más ricos (exportar CSV, rangos de fechas, horas extras).
- Panel web ligero para admins (opcional).
- Alinear el nombre del paquete de Composer (
aefmind/corocoro) con el nombre del repositorio (corocoritobot) o publicar un alias en Packagist (prioridad alta para evitar confusiones).
- ¿Dónde se guardan los datos? En
src/Database/usando SleekDB. - ¿Puedo cambiar la ruta del webhook? Sí, renombra
src/public/niufn38fy3e98fhsff.phpy ajusta la URL que registras con Telegram. - ¿Qué pasa si dejo una sesión abierta? Solo se contabiliza cuando la cierres con
/descansar.
Creado por aefmind. Si usas el bot, comparte feedback o PRs para mejorarlo.