# 🎫 Ticket System - TODO & Documentation ## Vue d'ensemble Système de tickets modulaire et complet pour Discord bot. ## Structure du projet ``` commandes/ticket/ ├── __init__.py # Commande principale (le cog) ├── ticket.py # Wrapper de compatibilité (ancien fichier) ├── views/ # Interfaces utilisateurs │ ├── creation.py # Création de tickets │ └── admin.py # Panneau d'admin ├── data/ # Données et stockage │ ├── models.py # Modèles de données │ └── storage.py # Gestion du stockage JSON ├── utils/ # Utilitaires │ ├── transcript.py # Génération de transcriptions │ └── formatters.py # Formatage des embeds └── TODO.md # Documentation ``` ## ⚠️ Vues Persistantes - Important Pour que les boutons fonctionnent après un redémarrage du bot, toutes les vues doivent: 1. Utiliser `timeout=None` dans le constructeur 2. Être enregistrées avec `bot.add_view(view)` dans `cog_load()` ### Vues persistantes configurées: - ✅ `TicketCreationView` - timeout=None - ✅ `TicketManagementView` - timeout=None - ✅ `SurveyView` - timeout=None - ✅ `AdminPanelView` - timeout=None - ✅ `ConfigPanelView` - timeout=None - ✅ `BulkCloseView` - timeout=None - ✅ `RolesManagementView` - timeout=None ### Enregistrement des vues Les vues sont enregistrées dans `cog_load()` et aussi périodiquement toutes les 30 secondes: ```python async def cog_load(self): await self._register_all_views() async def _register_all_views(self): for guild_id in self.storage.get_all_guild_ids(): config = self.storage.load_config(guild_id) if config and config.enabled: self.bot.add_view(TicketCreationView(self.bot, config)) self.bot.add_view(TicketManagementView(...)) # etc. ``` ## Commandes | Commande | Description | |----------|-------------| | `/ticket setup` | Configure le système (admin) | | `/ticket panel [channel]` | Crée le panneau de création | | `/ticket info [channel]` | Infos sur un ticket | | `/ticket list [user]` | Liste des tickets | | `/ticket stats` | Statistiques | | `/ticket admin` | Panneau d'admin | | `/ticket transcript [channel]` | Génère une transcription | | `/ticket category add\|remove\|list` | Gère les catégories | | `/ticket close [channel] [reason]` | Ferme un ticket | | `/ticket reopen [channel]` | Rouvre un ticket | ## Configuration ### Modèles de données - **TicketData** - Données d'un ticket - **TicketCategory** - Catégorie de ticket - **GuildTicketConfig** - Configuration du serveur - **TicketStatus** - Statuts: OPEN, CLAIMED, CLOSED, ARCHIVED - **Priority** - Priorités: LOW, NORMAL, HIGH, URGENT ### Stockage Les données sont stockées dans `data/tickets/`: - `config_guild_id.json` - Configuration du serveur - `tickets.json` - Tous les tickets ## Fonctionnalités ### Création de tickets 1. L'utilisateur clique sur une catégorie 2. Sélectionne la priorité (si activé) 3. Entre la raison (si requis) 4. Le salon est créé automatiquement ### Gestion des tickets - **Fermer** - Ferme avec raison optionnelle - **Réclamer** - Reserve le ticket à un staff - **Priorité** - Change la priorité - **Transcript** - Génère une transcription ### Système de survey Enquête de satisfaction 1-5 étoiles après fermeture ## Problèmes connus et solutions ### Boutons ne fonctionnent pas après redémarrage **Cause:** Views non persistantes (timeout défini) ou non enregistrées **Solution:** 1. Vérifier que `timeout=None` est défini 2. Vérifier que `bot.add_view()` est appelé dans `cog_load()` 3. Redémarrer le bot après avoir envoyé le panneau ### Transcript non généré **Cause:** Historique trop long ou permissions manquantes **Solution:** Le transcript limite à 1000 messages ## Dépannage ```bash # Tester si les vues sont enregistrées # Les boutons doivent répondre même après un redémarrage # Vérifier les logs pour les erreurs tail -f logs/kuby.log ``` ## À faire (Backlog) - [ ] Ajouter support pour transcripts PDF - [ ] Implémenter système de tags pour tickets - [ ] Ajouter intégration avec webhooks - [ ] Support multi-langue - [ ] Interface web pour administration