ajout de l'xp en vocal
This commit is contained in:
parent
753c924ff1
commit
4e3fa31c4c
94
index.js
94
index.js
@ -334,4 +334,96 @@ client.on('message', message => {
|
|||||||
setUltraRole(roleName);
|
setUltraRole(roleName);
|
||||||
message.channel.send(`Le rôle déclenchant le Rang ULTRA a été défini sur "${roleName}".`);
|
message.channel.send(`Le rôle déclenchant le Rang ULTRA a été défini sur "${roleName}".`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Variable globale pour stocker les temps de connexion des membres des salons vocaux
|
||||||
|
const voiceChannelConnections = {};
|
||||||
|
// Variable globale pour stocker les temps de connexion des membres des salons vocaux en cooldown
|
||||||
|
const xpCooldowns = {};
|
||||||
|
// Variable globale pour stocker les XP quotidiennes des utilisateurs
|
||||||
|
const userDailyXP = {};
|
||||||
|
|
||||||
|
// Fonction pour surveiller la connexion des membres aux salons vocaux
|
||||||
|
client.on('voiceStateUpdate', (oldState, newState) => {
|
||||||
|
const user = newState.member;
|
||||||
|
// Vérifier si l'utilisateur existe et n'est pas un bot
|
||||||
|
if (!user || user.user.bot) return;
|
||||||
|
|
||||||
|
const oldChannel = oldState.channel;
|
||||||
|
const newChannel = newState.channel;
|
||||||
|
|
||||||
|
// L'utilisateur est entré dans un salon vocal
|
||||||
|
if (!oldChannel && newChannel) {
|
||||||
|
voiceChannelConnections[user.id] = Date.now(); // Enregistrer le moment de la connexion
|
||||||
|
}
|
||||||
|
// L'utilisateur est sorti d'un salon vocal
|
||||||
|
else if (oldChannel && !newChannel) {
|
||||||
|
// Vérifier si l'utilisateur est enregistré comme étant connecté à un salon vocal
|
||||||
|
if (voiceChannelConnections[user.id]) {
|
||||||
|
const timeSpentInVoiceChannel = Math.floor((Date.now() - voiceChannelConnections[user.id]) / 1000); // Calculer la durée en secondes
|
||||||
|
const xpGained = calculateXPFromTime(timeSpentInVoiceChannel, user); // Convertir la durée en XP
|
||||||
|
addXP(user, xpGained); // Ajouter l'XP à l'utilisateur
|
||||||
|
delete voiceChannelConnections[user.id]; // Supprimer l'enregistrement de la connexion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fonction pour calculer l'XP à partir du temps passé dans un salon vocal
|
||||||
|
function calculateXPFromTime(timeSpentInVoiceChannel, user) {
|
||||||
|
// Déterminer le multiplicateur d'XP en fonction du boost Nitro
|
||||||
|
let xpMultiplier = 1;
|
||||||
|
if (user.roles.cache.some(role => role.name === 'Booster')) {
|
||||||
|
xpMultiplier = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérifier si l'utilisateur est en cooldown pour le salon vocal
|
||||||
|
if (!xpCooldowns[user.id]) {
|
||||||
|
// Appliquer le multiplicateur d'XP
|
||||||
|
const xpPerMinute = 1 * xpMultiplier;
|
||||||
|
const xpGained = Math.floor(timeSpentInVoiceChannel / 120) * xpPerMinute; // 1 XP pour 2 minutes
|
||||||
|
// Appliquer le plafond d'XP quotidien
|
||||||
|
if (xpGained > 0) {
|
||||||
|
if (xpMultiplier === 1 && getUserDailyXP(user) + xpGained > 200) {
|
||||||
|
xpGained = 200 - getUserDailyXP(user);
|
||||||
|
} else if (xpMultiplier === 2 && getUserDailyXP(user) + xpGained > 500) {
|
||||||
|
xpGained = 500 - getUserDailyXP(user);
|
||||||
|
}
|
||||||
|
updateUserDailyXP(user, xpGained);
|
||||||
|
}
|
||||||
|
return xpGained;
|
||||||
|
} else {
|
||||||
|
return 0; // Aucune XP gagnée pendant le cooldown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour ajouter de l'XP à un utilisateur
|
||||||
|
function addXP(user, amount) {
|
||||||
|
// Récupérer l'XP actuelle de l'utilisateur
|
||||||
|
let currentXP = getUserXP(user);
|
||||||
|
// Ajouter la quantité spécifiée à l'XP actuelle
|
||||||
|
currentXP += amount;
|
||||||
|
// Mettre à jour l'XP de l'utilisateur
|
||||||
|
setUserXP(user, currentXP);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour récupérer l'XP quotidien d'un utilisateur
|
||||||
|
function getUserDailyXP(user) {
|
||||||
|
// Récupérer l'XP quotidien de l'utilisateur depuis le stockage approprié
|
||||||
|
return userDailyXP[user.id] || 0; // Si l'XP quotidien n'est pas défini, retourner 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour mettre à jour l'XP quotidien d'un utilisateur
|
||||||
|
function updateUserDailyXP(user, amount) {
|
||||||
|
// Mettre à jour l'XP quotidien de l'utilisateur dans le stockage approprié
|
||||||
|
userDailyXP[user.id] = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction pour exclure des salons vocaux du décompte de l'XP
|
||||||
|
client.on('message', message => {
|
||||||
|
if (message.member.hasPermission('ADMINISTRATOR') && message.content.startsWith('/gachaoptions excludevoice')) {
|
||||||
|
const channelID = message.content.split(' ')[1];
|
||||||
|
// Ajouter le salon vocal à la liste des exclusions
|
||||||
|
excludedVoiceChannels.push(channelID);
|
||||||
|
message.channel.send(`Le salon vocal avec l'ID ${channelID} a été exclu du décompte de l'XP.`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user