fix(bot): imporved xp type checking

This commit is contained in:
ahmadk953 2025-06-15 22:15:44 -04:00
parent 01c1bbc21d
commit ea7b70b3f0
No known key found for this signature in database
GPG key ID: 31D488058614185C
2 changed files with 15 additions and 8 deletions

View file

@ -86,10 +86,8 @@ export async function addXpToUser(
const cacheKey = `level-${discordId}`; const cacheKey = `level-${discordId}`;
const userData = await getUserLevel(discordId); const userData = await getUserLevel(discordId);
const currentLevel = userData.level; const currentLevel = userData.level;
const currentXp = userData.xp;
const xpToAdd = amount;
userData.xp = currentXp + xpToAdd; userData.xp = Number(userData.xp ?? 0) + Number(amount);
userData.lastMessageTimestamp = new Date(); userData.lastMessageTimestamp = new Date();
userData.level = calculateLevelFromXp(userData.xp); userData.level = calculateLevelFromXp(userData.xp);

View file

@ -20,11 +20,19 @@ let minXpOffered = config.leveling.minXpAwarded ?? 5;
let maxXpOffered = config.leveling.maxXpAwarded ?? 15; let maxXpOffered = config.leveling.maxXpAwarded ?? 15;
if (typeof minXpOffered === 'string') { if (typeof minXpOffered === 'string') {
minXpOffered = parseInt(minXpOffered, 10); minXpOffered = Number(minXpOffered);
} }
if (isNaN(minXpOffered) || minXpOffered < 0) {
throw new Error('Minimum XP awarded must be a non-negative number.');
}
if (typeof maxXpOffered === 'string') { if (typeof maxXpOffered === 'string') {
maxXpOffered = parseInt(maxXpOffered, 10); maxXpOffered = Number(maxXpOffered);
} }
if (isNaN(maxXpOffered) || maxXpOffered < 0) {
throw new Error('Maximum XP awarded must be a non-negative number.');
}
if (minXpOffered > maxXpOffered) { if (minXpOffered > maxXpOffered) {
throw new Error( throw new Error(
'Minimum XP awarded must be less than or equal to maximum XP awarded.', 'Minimum XP awarded must be less than or equal to maximum XP awarded.',
@ -36,11 +44,12 @@ const MAX_XP = maxXpOffered;
let xpCooldownValue = config.leveling.xpCooldown ?? 60; let xpCooldownValue = config.leveling.xpCooldown ?? 60;
if (typeof xpCooldownValue === 'string') { if (typeof xpCooldownValue === 'string') {
xpCooldownValue = parseInt(xpCooldownValue, 10); xpCooldownValue = Number(xpCooldownValue);
} }
if (isNaN(xpCooldownValue)) { if (isNaN(xpCooldownValue) || xpCooldownValue < 0) {
throw new Error('XP cooldown must be a number.'); throw new Error('XP cooldown must be a non-negative number.');
} }
const XP_COOLDOWN = xpCooldownValue * 1000; const XP_COOLDOWN = xpCooldownValue * 1000;
const __dirname = path.resolve(); const __dirname = path.resolve();