|
""" |
|
👤 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']" |
|
|
|
|
|
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)" |
|
} |
|
|
|
|
|
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]: |
|
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) |