**PROJET BOT DISCORD – SYSTÈME DE LEVELS EN JAVA**

**DESCRIPTION :**

Ce projet consiste à développer un bot Discord en Java avec une base de données. Le bot permet de gérer un système d’expérience (XP), de niveaux et de classement des membres d’un serveur Discord.

**OBJECTIFS :**

- Créer un bot Discord fonctionnel en Java
- Enregistrer l’activité des utilisateurs
- Attribuer de l’XP automatiquement
- Augmenter le niveau des utilisateurs
- Afficher un classement des membres
- Organiser les niveaux par rangs

**TECHNOLOGIES UTILISÉES :**

- Java
- JDA (Java Discord API)
- Base de données MySQL ou SQLite
- Discord Developer Portal
- Hébergement sur serveur ou machine locale

**FONCTIONNALITÉS :**

- Gain d’XP lorsqu’un utilisateur envoie un message
- Stockage de l’XP et du niveau en base de données
- Augmentation automatique du niveau
- Affichage du classement du serveur
- Attribution d’un rang selon le niveau
- Commandes Discord pour consulter son profil

**SYSTÈME D’XP :**

Lorsqu’un utilisateur envoie un message sur le serveur, le bot lui attribue une quantité d’XP.

Exemple :

- Message envoyé : +10 XP
- Niveau supérieur atteint tous les 100 XP
- XP et niveau enregistrés en base de données

Un système anti-spam peut être ajouté pour éviter qu’un utilisateur gagne trop rapidement de l’XP.

**SYSTÈME DE LEVELS :**

Le niveau d’un utilisateur augmente lorsqu’il atteint un certain seuil d’XP.

Exemple :

- Niveau 1 : 0 XP
- Niveau 2 : 100 XP
- Niveau 3 : 250 XP
- Niveau 4 : 500 XP

Plus le niveau augmente, plus la quantité d’XP nécessaire devient importante.

**RANGS :**

Les utilisateurs sont organisés par rangs selon leur niveau :

- Bronze : niveaux 1 à 10
- Argent : niveaux 11 à 20
- Or : niveaux 21 à 30
- Platine : niveaux 31 à 40
- Diamant : niveaux 41 à 50
- Émeraude : niveau 51 et plus

Ces rangs permettent de valoriser l’activité des membres sur le serveur.

**BASE DE DONNÉES :**

La base de données permet de stocker les informations des utilisateurs.

Table principale : users

Champs possibles :

- id
- discord_id
- username
- xp
- level
- rank
- last_message_time

Exemple de structure :

users

- id : identifiant interne
- discord_id : identifiant Discord de l’utilisateur
- username : nom de l’utilisateur
- xp : expérience totale
- level : niveau actuel
- rank : rang actuel
- last_message_time : date du dernier message pris en compte

**COMMANDES DU BOT :**

Exemples de commandes :

- !level
Affiche le niveau, l’XP et le rang de l’utilisateur.

- !rank
Affiche le classement personnel de l’utilisateur.

- !leaderboard
Affiche le classement des meilleurs membres du serveur.

- !top
Affiche les 10 utilisateurs avec le plus d’XP.

**CLASSEMENT :**

Le classement est généré à partir de la base de données.

Critères de tri :

- XP total
- Niveau
- Rang

Exemple d’affichage :

- utilisateur1 - Niveau 45 - Diamant - 12 500 XP
- utilisateur2 - Niveau 38 - Platine - 9 800 XP
- utilisateur3 - Niveau 22 - Or - 5 400 XP

**FONCTIONNEMENT GÉNÉRAL :**

- Un utilisateur envoie un message
- Le bot vérifie s’il peut gagner de l’XP
- Le bot ajoute l’XP dans la base de données
- Le bot vérifie si un niveau est atteint
- Si nécessaire, le niveau et le rang sont mis à jour
- L’utilisateur peut consulter son niveau ou le classement

**SÉCURITÉ ET LIMITES :**

- Anti-spam pour éviter le gain abusif d’XP
- Vérification que le message ne vient pas d’un bot
- Protection du token Discord
- Accès sécurisé à la base de données
- Gestion des erreurs de connexion

**TESTS RÉALISÉS :**

- Connexion du bot au serveur Discord
- Réception des messages utilisateurs
- Attribution d’XP
- Passage de niveau
- Mise à jour du rang
- Affichage du classement
- Vérification des données en base

Résultat : le bot est fonctionnel et permet de gérer un système complet de levels sur Discord.

**LIMITES :**

- Système basé principalement sur les messages
- Pas de gain d’XP vocal
- Classement limité au serveur Discord
- Nécessite une base de données disponible