1024 && $i < count($units) - 1; $i++) { $bytes /= 1024; } return round($bytes, $precision) . ' ' . $units[$i]; } /** * Respuesta JSON */ function jsonResponse($data, $statusCode = 200) { http_response_code($statusCode); header('Content-Type: application/json'); echo json_encode($data); exit; } /** * Verifica si el usuario autenticado tiene un permiso específico. * @param string $permissionName El nombre del permiso a verificar (ej. 'crear_plantillas', 'gestionar_usuarios'). * @param string $platform El módulo al que aplica el permiso (ej. 'discord', 'telegram', 'global'). * @return bool True si el usuario tiene el permiso, false en caso contrario. */ function hasPermission($permissionName, $platform = 'global') { $userData = JWTAuth::getUserData(); // Obtener datos del usuario logueado // Si no hay datos de usuario o no está autenticado, no tiene permisos if (!$userData || !isset($userData->userId)) { return false; } // Los administradores tienen todos los permisos if (isset($userData->rol) && $userData->rol === 'Admin') { return true; } // Si el usuario no es Admin, verificar permisos específicos // Los permisos se cargan en el JWT al iniciar sesión if (isset($userData->permissions) && is_array($userData->permissions)) { foreach ($userData->permissions as $perm) { // Un permiso 'manage_templates' global debería dar acceso a 'manage_templates' en cualquier plataforma // Un permiso 'manage_templates_discord' solo en Discord if ($perm === $permissionName || $perm === $permissionName . '_' . $platform) { return true; } } } return false; } /** * Dividir texto en múltiples mensajes según límite de caracteres */ function splitMessage($text, $maxLength = 2000) { if (strlen($text) <= $maxLength) { return [$text]; } $messages = []; $lines = explode("\n", $text); $currentMessage = ''; foreach ($lines as $line) { if (strlen($currentMessage) + strlen($line) + 1 > $maxLength) { if ($currentMessage) { $messages[] = trim($currentMessage); $currentMessage = ''; } // Si una línea sola es muy larga, dividirla if (strlen($line) > $maxLength) { $chunks = str_split($line, $maxLength); foreach ($chunks as $chunk) { $messages[] = $chunk; } } else { $currentMessage = $line . "\n"; } } else { $currentMessage .= $line . "\n"; } } if ($currentMessage) { $messages[] = trim($currentMessage); } return $messages; }