Sincronización con Discord y Steam - Raul125/PanelWiki GitHub Wiki
La sincronización con Discord es un proceso automático e integral que conecta los usuarios del panel web con sus cuentas de Discord y Steam. Este sistema garantiza que los roles, permisos y estado de los usuarios se mantengan coherentes entre todas las plataformas de la comunidad.
- Usuario inicia sesión → Accede al panel web
- Redirección OAuth Discord → Automática e inevitable
- Autorización Discord → Usuario concede permisos
- Autorización Steam* → Usuario concede permisos
- Creación de perfil unificado → Ambas cuentas vinculadas
- Sincronización inicial → Roles y datos actualizados
- No hay botones de vincular/desvincular → Proceso obligatorio
- Sincronización forzada → Requerida para acceso
- Cuentas automáticamente unificadas → Sistema integral
- Sin bypass disponible → Seguridad y consistencia
- Sincronización bidireccional → Panel ↔ Discord
- Aplicación inmediata → Cambios en tiempo real
- Colores consistentes → Paleta unificada
- Jerarquía respetada → Según pesos del panel
- Detección de cambios → En roles de Discord
- Actualización automática → Reflejado en panel
- Logs de actividad → Registro de sincronizaciones
- Estado de conexión → Verificación continua
- Manage Roles → Asignar/remover roles automáticamente
- Read Messages → Detectar actividad de usuarios
- Send Messages → Notificaciones automáticas
- View Audit Log → Registro de cambios
- Administrator → Acceso completo para sincronización
- Servidor principal → NeonCommunity Discord
- Canales específicos → Staff, general, reportes
- Categorías de roles → Staff, Donadores, Especiales
- Usuarios activos → Solo miembros del servidor
- Nombre de usuario → Discord username
- Avatar → Imagen de perfil de Discord
- ID único → Discord ID para identificación
- Estado de conexión → Online/offline
- Roles actuales → Lista completa de roles
- Fecha de ingreso → Al servidor de Discord
Panel Web ↔ Discord Server
Owner ↔ 👑 Owner
Admin Senior ↔ 🔴 Administrator
Admin ↔ 🟠 Moderator Senior
Mod Senior ↔ 🟡 Moderator
Mod ↔ 🔵 Helper
Donador VIP ↔ 💎 VIP
Donador Premium ↔ ⭐ Premium
Donador ↔ 💝 Supporter
Usuario ↔ 👤 Member
- Colores idénticos → Entre panel y Discord
- Iconos representativos → Identificación rápida
- Orden jerárquico → Mismo peso/posición
- Nombres coherentes → Misma nomenclatura
-
Servicio en segundo plano →
BackgroundService
corriendo continuamente - Inicio automático → Con el arranque de la aplicación
- Retraso inicial → 10 segundos para estabilización
- Ciclo regular → Cada 60 segundos sin parar
- Procesamiento por lotes → 100 usuarios por ciclo
- Proyección de datos → Solo carga campos necesarios
- Operaciones SQL directas → Para modificaciones masivas
- Paginación eficiente → OrderBy consistente para evitar duplicados
- Logging detallado → Progreso e información de troubleshooting
- Manejo de errores → Continúa funcionando ante fallos
- Cargar roles de Discord → Solo los que tienen DiscordRoleId
- Contar usuarios totales → Con DiscordId válido
- Crear diccionario de mapeo → DiscordRoleId → PanelRoleId
- Inicializar contadores → Para reporte de progreso
- Cargar lote de usuarios → 100 por vez con proyección
- Verificar existencia en Discord → GetUser() del servidor
- Comparar roles actuales → DB vs Discord del usuario
- Calcular diferencias → Roles a añadir/remover
- Aplicar cambios → SQL directo para eficiencia
-- Eliminar roles que no están en Discord
DELETE FROM UserRoles
WHERE UserId = {userId} AND RoleId IN ({roleIds})
-- Añadir roles que están en Discord
INSERT INTO UserRoles (UserId, RoleId)
VALUES ({userId1}, {roleId1}), ({userId2}, {roleId2})...
- Log por lote → "Progreso: X/Y usuarios procesados"
- Log final → "Usuarios actualizados: X/Y"
- Detalles de cambios → Roles añadidos/eliminados por usuario
- Manejo de errores → Usuarios no encontrados en Discord
- Usuario se une → Creación automática en panel
- Usuario se va → Marcado como inactivo
- Rol asignado → Sincronizado al panel
- Rol removido → Actualizado en panel
- Cambio de nickname → Reflejado si procede
- Actualización de avatar → Sincronizado automáticamente
- Rol asignado en panel → Aplicado en Discord
- Rol removido en panel → Removido de Discord
- Usuario sancionado → Posible kick/ban en Discord
- Cambios de permisos → Reflejados en accesos
- Actualización de datos → Propagado a Discord
- Servicio automático → Cada 60 segundos
- Inicio diferido → 10 segundos después del arranque
- Procesamiento por lotes → 100 usuarios por ciclo
- Proyección optimizada → Solo datos necesarios
- Manual → Trigger por administradores (si disponible)
- Batch processing → 100 usuarios por lote para eficiencia
- Proyección de datos → Solo campos necesarios cargados
- SQL directo → Para operaciones masivas de roles
- Paginación consistente → OrderBy para evitar duplicados
- Rate limiting → Respeto a límites de Discord API
- Error handling → Reintentos automáticos
- Logging detallado → Para troubleshooting y progreso
- OAuth2 Discord → Autenticación segura
- OpenID Steam → Verificación cruzada
- Tokens únicos → Por sesión y usuario
- Verificación 2FA → Si está habilitado
- IP tracking → Para detección de anomalías
- Permisos granulares → Por tipo de operación
- Jerarquía respetada → No escalar privilegios
- Audit logs → Registro de todas las acciones
- Rate limiting → Prevención de abuso
- Detección de bots → Filtrado automático
- Discord desconectado → Usuario se va del servidor
- Steam privado → Perfil no público
- Rol inexistente → Creación automática o mapeo
- Permisos insuficientes → Escalado o notificación
- API limitada → Queue y reintentos
- Reconexión automática → Si se pierde conexión
- Resincronización → Al reactivar cuenta
- Backup de datos → Estados anteriores
- Notificaciones admin → Errores críticos
- Logs detallados → Para diagnóstico
- Usuarios totales sincronizados → Contador global
- Usuarios activos → Última conexión < 7 días
- Usuarios con ambas cuentas → Discord + Steam
- Usuarios solo Discord → Sin Steam vinculado
- Usuarios problemáticos → Con errores de sincronización
- Roles sincronizados → Total en ambas plataformas
- Roles únicos Panel → No reflejados en Discord
- Roles únicos Discord → No mapeados al panel
- Sincronizaciones exitosas → Por período
- Errores de sincronización → Y resolución
- Timestamp → Fecha y hora exacta
- Tipo de evento → Creación, modificación, eliminación
- Usuario afectado → Discord ID + Panel ID
- Acción específica → Rol añadido/removido/modificado
- Estado anterior → Antes del cambio
- Estado posterior → Después del cambio
- Resultado → Éxito/error/pendiente
- Actividad por horas → Picos de sincronización
- Errores más comunes → Para mejoras
- Usuarios más activos → Cambios frecuentes
- Eficiencia del sistema → Tiempo de respuesta
- Single Sign-On → Una autenticación para todo
- Roles automáticos → Sin gestión manual
- Estado coherente → Mismos permisos en todas partes
- Acceso inmediato → A funcionalidades según rol
- Perfil unificado → Información centralizada
- Reconocimiento automático → En servidor SCP:SL
- Comandos disponibles → Según rol en Discord
- Estadísticas integradas → Entre plataformas
- Reportes centralizados → Desde cualquier plataforma
- Gestión centralizada → Un lugar para todo
- Aplicación automática → De cambios de roles
- Visibilidad completa → Estado de todos los usuarios
- Notificaciones automáticas → De eventos importantes
- Auditoría completa → Trazabilidad total
- Menos trabajo manual → Automatización completa
- Consistencia garantizada → Entre plataformas
- Respuesta rápida → A cambios y eventos
- Escalabilidad → Maneja crecimiento automáticamente
- Verificar conexión Discord → Usuario en servidor
- Verificar conexión Steam → Perfil público
- Revisar logs de sincronización → Errores específicos
- Forzar resincronización → Desde panel admin
- Verificar permisos bot → Accesos necesarios
- Verificar jerarquía bot → Posición en Discord
- Revisar mapeo de roles → Correspondencias correctas
- Verificar permisos → Bot puede gestionar roles
- Cache de Discord → Puede tardar unos minutos
- Logs de errores → API rate limits o errores
- API limits Discord → Rate limiting normal
- Muchos cambios simultáneos → Queue processing
- Conexión de red → Latencia alta
- Carga del servidor → Recursos limitados
- Mantenimiento Discord → Servicios degradados
- Estado del bot → Online/offline/errores
- Últimas sincronizaciones → Exitosas y fallidas
- Queue de operaciones → Pendientes de procesar
- Estadísticas en tiempo real → Métricas actuales
- Alertas activas → Problemas detectados
- Filtros por usuario → Seguimiento específico
- Filtros por tipo → Solo errores o éxitos
- Filtros por fecha → Período específico
- Exportación → Para análisis externo
- Alertas automáticas → Para admin
- Sistema de Roles - Configuración de roles sincronizados
- Gestión de Usuarios - Administración de cuentas vinculadas
- Autenticación - Proceso de login automático
- Logs de Auditoría - Registro de cambios de sincronización
- Panel de Moderación - Herramientas con roles de Discord
- Configuración del Sistema - Ajustes de integración
- Canal Staff Discord → [discord.neoncommunity.eu](https://discord.neoncommunity.eu/)
- Soporte técnico → Para problemas de sincronización
- Issues GitHub → Reportar bugs del sistema
- Discord API → Documentación oficial
- Steam OpenID → Especificaciones técnicas
- Rate limits → Límites y mejores prácticas
- Webhook events → Eventos monitoreados
- API endpoints → Endpoints de sincronización
- Event handlers → Procesamiento de eventos
- Error codes → Códigos de error específicos
- Testing tools → Herramientas de prueba
💬 Una Cuenta, Todas las Plataformas
¿Problemas con la sincronización? Consulta en el canal staff de [Discord](https://discord.neoncommunity.eu/) o revisa Sistema de Roles