Spaces:
Sleeping
Sleeping
| """ | |
| 👤 Outils de gestion du compte utilisateur et des équipes Figma | |
| """ | |
| import json | |
| from .config import figma_config, make_figma_request | |
| def get_figma_user_detailed_info() -> str: | |
| """ | |
| Récupère les informations détaillées de l'utilisateur connecté avec plus de données. | |
| Returns: | |
| str: Informations détaillées utilisateur au format JSON ou message d'erreur | |
| """ | |
| result = make_figma_request("me") | |
| if "error" in result: | |
| return f"❌ Erreur : {result['error']}" | |
| user_info = { | |
| "id": result.get("id", ""), | |
| "nom_utilisateur": result.get("handle", ""), | |
| "email": result.get("email", ""), | |
| "nom_affichage": result.get("img_url", "").split("/")[-1] if result.get("img_url") else "", | |
| "url_image": result.get("img_url", ""), | |
| "date_creation": result.get("created_at", ""), | |
| "derniere_connexion": result.get("last_activity_at", ""), | |
| "plan_actuel": "Non spécifié (utiliser get_figma_team_info pour plus de détails)" | |
| } | |
| return f"👤 **Informations détaillées utilisateur :**\n{json.dumps(user_info, indent=2, ensure_ascii=False)}" | |
| def get_figma_team_info(team_id: str = "") -> str: | |
| """ | |
| Récupère les informations détaillées d'une équipe Figma incluant le plan d'abonnement. | |
| Args: | |
| team_id (str): ID de l'équipe Figma (optionnel, utilise la configuration par défaut si vide) | |
| Returns: | |
| str: Informations équipe au format JSON ou message d'erreur | |
| """ | |
| team_id = team_id or figma_config.get("team_id", "") | |
| if not team_id: | |
| return "❌ ID de l'équipe requis. Utilisez d'abord list_figma_user_teams() pour trouver votre équipe." | |
| result = make_figma_request(f"teams/{team_id}") | |
| if "error" in result: | |
| return f"❌ Erreur : {result['error']}" | |
| team_info = { | |
| "id": result.get("id", ""), | |
| "nom": result.get("name", ""), | |
| "plan_abonnement": result.get("billing_plan", "Inconnu"), | |
| "limite_editeurs": result.get("editor_limit", "Non spécifié"), | |
| "editeurs_actifs": result.get("active_editors", 0), | |
| "stockage_utilise": result.get("storage_used", "Non spécifié"), | |
| "limite_stockage": result.get("storage_limit", "Non spécifié"), | |
| "fonctionnalites": result.get("features", []), | |
| "date_creation": result.get("created_at", ""), | |
| "statut": result.get("status", "") | |
| } | |
| return f"🏢 **Informations équipe :**\n{json.dumps(team_info, indent=2, ensure_ascii=False)}" | |
| def list_figma_user_teams() -> str: | |
| """ | |
| Liste toutes les équipes auxquelles l'utilisateur appartient. | |
| Returns: | |
| str: Liste des équipes avec rôles et plans ou message d'erreur | |
| """ | |
| result = make_figma_request("teams") | |
| if "error" in result: | |
| return f"❌ Erreur : {result['error']}" | |
| teams = result.get("teams", []) | |
| if not teams: | |
| return "🏢 Aucune équipe trouvée pour cet utilisateur" | |
| team_list = [] | |
| for team in teams: | |
| team_id = team.get("id", "") | |
| name = team.get("name", "Sans nom") | |
| role = team.get("role", "Membre") | |
| plan = team.get("billing_plan", "Plan inconnu") | |
| team_list.append(f"🏢 **{name}** (ID: {team_id})\n - Rôle: {role}\n - Plan: {plan}") | |
| return f"🏢 **Équipes de l'utilisateur :**\n\n" + "\n\n".join(team_list) | |
| def get_figma_current_user_permissions() -> str: | |
| """ | |
| Récupère les permissions et capacités de l'utilisateur actuel dans un fichier. | |
| Returns: | |
| str: Code JavaScript pour récupérer les permissions ou message d'erreur | |
| """ | |
| if not figma_config["file_id"]: | |
| return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord." | |
| comment_text = f"""👥 **Informations utilisateur actuel (Plugin API) :** | |
| 📋 **Code Plugin Figma pour récupérer les infos utilisateur :** | |
| ```javascript | |
| // Informations utilisateur actuel | |
| const currentUser = figma.currentUser | |
| if (currentUser) {{ | |
| console.log('Utilisateur:', {{ | |
| id: currentUser.id, | |
| nom: currentUser.name, | |
| email: currentUser.email || 'Non disponible', | |
| couleur: currentUser.color, | |
| sessionId: currentUser.sessionId, | |
| photoUrl: currentUser.photoUrl || 'Pas de photo' | |
| }}) | |
| }} else {{ | |
| console.log('Aucun utilisateur connecté') | |
| }} | |
| // Type d'éditeur actuel | |
| console.log('Type éditeur:', figma.editorType) // 'figma' | 'figjam' | 'dev' | 'slides' | |
| // Mode du plugin | |
| console.log('Mode plugin:', figma.mode) // 'default' | 'textreview' | 'inspect' | etc. | |
| // Utilisateurs actifs (FigJam uniquement) | |
| if (figma.editorType === 'figjam' && figma.activeUsers) {{ | |
| console.log('Utilisateurs actifs:', figma.activeUsers.map(user => ({{ | |
| id: user.id, | |
| nom: user.name, | |
| couleur: user.color, | |
| sessionId: user.sessionId | |
| }}))) | |
| }} | |
| // Clé du fichier (plugins privés uniquement) | |
| if (figma.fileKey) {{ | |
| console.log('Clé fichier:', figma.fileKey) | |
| }} | |
| ```""" | |
| comment_data = { | |
| "message": comment_text, | |
| "client_meta": {"x": 0, "y": 0} | |
| } | |
| result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data) | |
| if "error" in result: | |
| return f"❌ Erreur lors de la création du commentaire : {result['error']}" | |
| return f"✅ Code généré pour récupérer les permissions et infos utilisateur" | |
| def get_figma_workspace_usage_stats() -> str: | |
| """ | |
| Récupère les statistiques d'utilisation de l'espace de travail. | |
| Returns: | |
| str: Statistiques d'utilisation au format JSON ou message d'erreur | |
| """ | |
| if not figma_config.get("team_id"): | |
| return "❌ ID de l'équipe requis. Utilisez list_figma_user_teams() pour trouver votre équipe puis configurez figma_config['team_id']" | |
| # Récupérer les projets de l'équipe | |
| projects_result = make_figma_request(f"teams/{figma_config['team_id']}/projects") | |
| if "error" in projects_result: | |
| return f"❌ Erreur : {projects_result['error']}" | |
| projects = projects_result.get("projects", []) | |
| stats = { | |
| "nombre_projets": len(projects), | |
| "projets_recents": [], | |
| "statistiques_utilisation": "Disponible via l'API Team (nécessite permissions admin)" | |
| } | |
| # Récupérer les 5 projets les plus récents | |
| for project in projects[:5]: | |
| stats["projets_recents"].append({ | |
| "nom": project.get("name", ""), | |
| "id": project.get("id", ""), | |
| "derniere_modification": project.get("modified_at", "") | |
| }) | |
| return f"📊 **Statistiques d'utilisation :**\n{json.dumps(stats, indent=2, ensure_ascii=False)}" | |
| def get_figma_api_limitations_info() -> str: | |
| """ | |
| Explique les limitations de l'API Plugin Figma vs l'API REST pour la gestion des projets. | |
| Returns: | |
| str: Documentation détaillée des limitations et capacités des APIs Figma | |
| """ | |
| limitations_info = { | |
| "api_plugin_limitations": { | |
| "titre": "🚫 Limitations de l'API Plugin Figma", | |
| "description": "L'API Plugin Figma ne peut PAS :", | |
| "limitations": [ | |
| "Lister tous les projets d'un utilisateur", | |
| "Naviguer entre différents fichiers Figma", | |
| "Accéder aux informations de facturation/abonnement", | |
| "Créer ou supprimer des projets", | |
| "Gérer les permissions d'équipe" | |
| ], | |
| "contexte": "Le plugin s'exécute uniquement dans le contexte du fichier actuel" | |
| }, | |
| "api_rest_capacites": { | |
| "titre": "✅ Capacités de l'API REST Figma", | |
| "description": "L'API REST Figma peut :", | |
| "capacites": [ | |
| "Lister les équipes de l'utilisateur", | |
| "Lister les projets d'une équipe", | |
| "Lister les fichiers d'un projet", | |
| "Accéder aux informations de profil utilisateur", | |
| "Récupérer les commentaires des fichiers", | |
| "Exporter des assets (avec limitations)" | |
| ], | |
| "note": "Nécessite un token d'accès personnel" | |
| }, | |
| "recommendation": { | |
| "titre": "💡 Approche hybride recommandée", | |
| "description": "Utiliser les deux APIs en complémentarité :", | |
| "strategies": [ | |
| "API REST : Navigation, gestion des projets, informations utilisateur", | |
| "API Plugin : Création/modification d'éléments dans le fichier actuel", | |
| "Plugin avec code JavaScript : Manipulation avancée des objets" | |
| ] | |
| }, | |
| "workarounds": { | |
| "titre": "🔧 Solutions de contournement", | |
| "alternatives": [ | |
| "Utiliser l'API REST pour lister les projets (comme nous faisons)", | |
| "Stocker les IDs de fichiers dans le clientStorage du plugin", | |
| "Utiliser des plugins privés pour accéder à figma.fileKey", | |
| "Implémenter un système de cache des informations projets" | |
| ] | |
| } | |
| } | |
| return f"📚 **Limitations et capacités des APIs Figma :**\n{json.dumps(limitations_info, indent=2, ensure_ascii=False)}" | |
| def list_figma_team_projects(team_id: str = "") -> str: | |
| """ | |
| Liste les projets d'une équipe Figma. | |
| Args: | |
| team_id (str): ID de l'équipe Figma (optionnel, utilise la configuration par défaut si vide) | |
| Returns: | |
| str: Liste des projets de l'équipe ou message d'erreur | |
| """ | |
| team_id = team_id or figma_config["team_id"] | |
| if not team_id: | |
| return "❌ ID de l'équipe requis. Configurez-le avec figma_config['team_id'] = 'VOTRE_TEAM_ID'" | |
| result = make_figma_request(f"teams/{team_id}/projects") | |
| if "error" in result: | |
| return f"❌ Erreur : {result['error']}" | |
| projects = result.get("projects", []) | |
| if not projects: | |
| return "📁 Aucun projet trouvé dans cette équipe" | |
| project_list = [] | |
| for project in projects[:10]: # Limiter à 10 projets | |
| name = project.get("name", "Sans nom") | |
| project_id = project.get("id", "") | |
| project_list.append(f"📁 {name} (ID: {project_id})") | |
| return f"📁 **Projets de l'équipe :**\n" + "\n".join(project_list) |