// Messages de bienvenue avec leurs probabilités, les rôles associés et les images
constwelcomeMessages=[
{message:"{mention} vient d'être invoqué sur **Camélia Studio** ! Souhaitons-lui la bienvenue ! Il s'agit d'un personnage de rareté **B**. Dommage, nous aurons plus de chance la prochaine fois...",role:"Rang B",probability:80,image:"https://concepts.esenjin.xyz/cyla/v2/file/11C108.png"},
{message:"{mention} vient d'être invoqué sur **Camélia Studio** ! Souhaitons-lui la bienvenue ! Il s'agit d'un personnage de rareté **A**. C'est plutôt une bonne pioche !",role:"Rang A",probability:15,image:"https://concepts.esenjin.xyz/cyla/v2/file/732316.png"},
{message:"{mention} vient d'être invoqué sur **Camélia Studio** ! Souhaitons-lui la bienvenue ! Il s'agit d'un personnage de rareté **S**. On a vraiment de la chance aujourd'hui !!",role:"Rang S",probability:4,image:"https://concepts.esenjin.xyz/cyla/v2/file/D6E3E1.png"},
{message:"{mention} vient d'être invoqué sur **Camélia Studio** ! Souhaitons-lui la bienvenue ! Il s'agit d'un personnage de rareté **S+**. Incroyable ! On vient de tomber sur la perle rare !",role:"Rang S+",probability:1,image:"https://concepts.esenjin.xyz/cyla/v2/file/6B6CE3.png"}
];
letwelcomeChannel;// Canal où publier les messages de bienvenue
letfarewellChannel;// Canal où publier les messages d'adieu
// Création de la table dans la base de données
db.serialize(()=>{
db.run(`CREATE TABLE IF NOT EXISTS userdata (
useridTEXTPRIMARYKEY,
messageTEXT,
roleTEXT,
imageTEXT
)`);
});
// Fonction pour choisir un message de bienvenue selon les probabilités
functionchooseWelcomeMessage(){
constrandom=Math.random()*100;// Random entre 0 et 100
message.channel.send(`Rôle associé au message de bienvenue pour le rôle ${roleName} changé en ${newRoleName}.`);
}else{
message.channel.send(`Le rôle ${roleName} n'existe pas.`);
}
}else{
message.channel.send("Options disponibles : \n- `/gachaoptions bienvenue <nom_du_canal>` pour définir le canal de bienvenue\n- `/gachaoptions adieu <nom_du_canal>` pour définir le canal d'adieu\n- `/gachaoptions messageadieu <message>` pour définir le message d'adieu\n- `/gachaoptions imageadieu <lien_de_l'image>` pour définir l'image d'adieu\n- `/gachaoptions bienvenueimage <lien_de_l'image>` pour définir l'image de bienvenue\n- `/gachaoptions rangauto <commande>` pour définir la commande pour le rang automatique\n- `/gachaoptions rangs` pour afficher les rôles et leurs messages associés\n- `/gachaoptions ajoutermessage <role> <probabilité> <message>` pour ajouter un nouveau message de bienvenue\n- `/gachaoptions modifierprobabilite <role> <probabilité>` pour modifier la probabilité d'un message de bienvenue\n- `/gachaoptions changerrole <role> <nouveau_role>` pour changer le rôle associé à un message de bienvenue");
}
}
});
client.on('guildMemberAdd',member=>{
// Vérifier si l'utilisateur est déjà dans la base de données
db.get(`SELECT * FROM userdata WHERE userid = ?`,member.id,(err,row)=>{
if(err){
console.error(err);
return;
}
if(row){
// Utiliser les données stockées
const{message,role,image}=row;
// Envoi du message de bienvenue dans le canal approprié
constfarewellMessage=`Oh non ! ${member.user} n'est plus utile dans la méta actuelle et quitte notre équipe. Espérons qu'une prochaine mise à jour lui soit favorable !`;
// Mettre l'utilisateur en cooldown pour 2 minutes
xpCooldowns[message.author.id]=true;
setTimeout(()=>{
deletexpCooldowns[message.author.id];
},120000);
});
// Fonction pour ajouter de l'XP à un utilisateur
functionaddXP(user,amount){
// Récupérer l'XP actuelle de l'utilisateur depuis la base de données
getUserXP(user)
.then(currentXP=>{
// Ajouter la quantité spécifiée à l'XP actuelle
constnewXP=currentXP+amount;
// Mettre à jour l'XP de l'utilisateur dans la base de données
setUserXP(user,newXP);
// Vérifier si l'utilisateur a atteint un nouveau rang
checkAndUpdateUserRank(user,newXP);
})
.catch(err=>{
console.error('Erreur lors de l\'ajout de l\'XP à l\'utilisateur :',err);
});
// Vérifier si l'utilisateur a atteint un nouveau rang
constcurrentXP=getUserXP(user);
constnewRank=calculateRank(currentXP+amount);
if(newRank!==getUserRank(user)){
constnewRole=getRoleFromRank(newRank);
constnotificationMessage=`Héhé ! C'est que tu as bien xp dit donc, tu peux désormais évoluer au ${newRole} ! Pour cela, rien de plus simple, utilise la commande /gachajaiunegrosseépée.`;
user.send(notificationMessage);
}
}
// Fonction pour calculer le nouveau rang à partir de l'XP
functioncalculateRank(xp){
if(xp>=66666)return"Rang S++";
if(xp>=10000)return"Rang S+";
if(xp>=1000)return"Rang S";
if(xp>=100)return"Rang A";
return"Rang B";
}
// Fonction pour obtenir le rang d'un utilisateur
functiongetUserRank(user){
constxp=getUserXP(user);
returncalculateRank(xp);
}
// Fonction pour obtenir l'XP d'un utilisateur
functiongetUserXP(user){
returnnewPromise((resolve,reject)=>{
db.get('SELECT xp FROM userXP WHERE userId = ?',[user.id],(err,row)=>{
if(err){
reject(err);
}else{
resolve(row?row.xp:0);
}
});
});
}
// Fonction pour obtenir le rôle associé à un rang
functiongetRoleFromRank(rank){
// Tableau associant les rangs aux noms de rôles
constrankRoles={
'Rang B':'Role B',
'Rang A':'Role A',
'Rang S':'Role S',
'Rang S+':'Role S+'
// Ajouter d'autres rangs et rôles au besoin
};
// Renvoyer le nom du rôle associé au rang spécifié