(client, guildId, userId, level)
| 396 | } |
| 397 | |
| 398 | export async function setUserLevel(client, guildId, userId, level) { |
| 399 | try { |
| 400 | const levelingConfig = await getLevelingConfig(client, guildId); |
| 401 | if (!levelingConfig?.enabled) { |
| 402 | throw new TitanBotError( |
| 403 | 'Leveling system is disabled on this server', |
| 404 | ErrorTypes.CONFIGURATION, |
| 405 | 'The leveling system is currently disabled on this server.' |
| 406 | ); |
| 407 | } |
| 408 | |
| 409 | if (!Number.isInteger(level) || level < MIN_LEVEL || level > MAX_LEVEL) { |
| 410 | throw new TitanBotError( |
| 411 | `Invalid level: ${level}`, |
| 412 | ErrorTypes.VALIDATION, |
| 413 | `Level must be between ${MIN_LEVEL} and ${MAX_LEVEL}.` |
| 414 | ); |
| 415 | } |
| 416 | |
| 417 | const userData = await getUserLevelData(client, guildId, userId); |
| 418 | |
| 419 | const newXp = 0; |
| 420 | const newTotalXp = calculateTotalXp(level, newXp); |
| 421 | |
| 422 | userData.level = level; |
| 423 | userData.xp = newXp; |
| 424 | userData.totalXp = newTotalXp; |
| 425 | |
| 426 | await saveUserLevelData(client, guildId, userId, userData); |
| 427 | |
| 428 | logger.info(`Set level for user ${userId} to ${level} in guild ${guildId}`); |
| 429 | return userData; |
| 430 | } catch (error) { |
| 431 | logger.error(`Error setting level for user ${userId}:`, error); |
| 432 | if (error instanceof TitanBotError) throw error; |
| 433 | throw new TitanBotError( |
| 434 | `Failed to set level: ${error.message}`, |
| 435 | ErrorTypes.DATABASE, |
| 436 | 'Could not set level at this time.' |
| 437 | ); |
| 438 | } |
| 439 | } |
| 440 | |
| 441 | export async function deleteUserLevelData(client, guildId, userId) { |
| 442 | try { |
no test coverage detected