Plugin para Discourse que permite visualizar usuarios de Discourse, agrupándolos por país con funcionalidades de filtrado y búsqueda.
- Visualización de usuarios de Discourse via API
- Agrupación por país con contadores en tiempo real
- Filtros avanzados por país y búsqueda de texto
- Interfaz responsive similar al diseño de Discourse
- API REST para integración con otros sistemas
- Configuración desde admin sin modificar código
- Información detallada de usuarios (username, trust level, avatar)
- Discourse 3.0+
- API Key de administración de Discourse
- Acceso a la API de usuarios de Discourse
cd /var/discourse
git clone https://github.com/hectorsanchez/discourse-users-extend.git plugins/discourse-users-extendcd /var/discourse
sudo ./launcher rebuild app- Ir a Admin → Plugins → Discourse API Settings
- Configurar:
- dmu_enabled:
true(habilitar plugin) - dmu_discourse_api_url: URL del servidor Discourse (ej: https://discourse.youth-care.eu)
- dmu_discourse_api_key: API Key de administración
- dmu_discourse_api_username: Usuario para la API (recomendado: system)
- dmu_enabled:
- Ir a Admin → Customize → Navigation Menu
- Agregar nuevo enlace:
- Name:
Users Extend - URL:
/discourse-users-page - Icon:
users - Position: Después de "Categories"
- Name:
- Ir a Admin → API
- Crear nueva API Key
- Asignar permisos necesarios para leer usuarios
- Copiar la API Key generada
- URL de desarrollo:
https://discourse.youth-care.eu - URL de producción:
https://assembly.youth-care.eu
Una vez configurado, el plugin proporciona:
- Vista de usuarios agrupados por país
- Filtros por país con dropdown
- Búsqueda de texto en nombre, email y username
- Información detallada de cada usuario
- Actualización en tiempo real de estadísticas
Script para cargar el cache de usuarios con una estrategia optimizada que evita rate limiting y mejora la eficiencia.
- Procesamiento por lotes: 60 usuarios por lote con pausa de 30 segundos entre lotes
- Manejo de rate limiting: Reintentos automáticos con backoff exponencial
- Configuración flexible: Permite procesar todos los lotes o un número específico
- Mapeo de países: Normalización automática de ubicaciones a países
- Persistencia: Guarda el cache en disco para recuperación rápida
# Procesar todos los lotes disponibles
./load-users-cache-optimized.sh
# Procesar solo 3 lotes (útil para pruebas)
./load-users-cache-optimized.sh 3- Sin parámetros: Procesa todos los lotes disponibles
- Número entero: Procesa solo el número especificado de lotes
- Lotes de 60 usuarios con pausa de 30 segundos entre lotes
- Delay de 500ms entre peticiones individuales
- Reintentos automáticos para errores 429 (rate limit)
- Mapeo inteligente de ubicaciones a países
- Eliminación de duplicados por username
- Todos los lotes: ~11 minutos (para ~660 usuarios)
- 3 lotes: ~3 minutos (para ~180 usuarios)
El script utiliza la configuración del plugin:
dmu_discourse_api_key: API Key de administracióndmu_discourse_api_username: Usuario para la APIdmu_discourse_api_url: URL del servidor Discourse
El script genera:
- Cache en memoria (
$users_by_country_cache) - Archivo de cache en disco (
tmp/discourse_users_cache.json) - Estadísticas detalladas del procesamiento
- Lista de países encontrados y conteo de usuarios
GET /discourse/users- Obtener usuarios agrupados por paísPOST /discourse/save_settings- Guardar configuración (solo admin)
{
"success": true,
"users_by_country": {
"España": [
{
"firstname": "Juan",
"lastname": "Pérez",
"email": "juan@example.com",
"username": "juanperez",
"trust_level": 2,
"avatar_template": "https://..."
}
]
},
"total_users": 150,
"timestamp": "2025-01-27T10:30:00Z"
}Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Héctor Sánchez - @hectorsanchez