131 lines
4.3 KiB
Markdown
131 lines
4.3 KiB
Markdown
|
|
# 🎫 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
|
||
|
|
|