77"""
88
99import datetime
10+ import random
1011import time
1112
1213import discord
@@ -355,8 +356,7 @@ def calculate_xp_for_level(self, level: int, guild_id: int = 0) -> float:
355356 The XP required for the level.
356357 """
357358 # Get server-specific exponent or use default
358- exponent = self .levels_exponent .get (guild_id , self .levels_exponent .get (0 , 2.0 ))
359- return 500 * (level / 5 ) ** exponent
359+ return 50.0 * (level ** 2 )
360360
361361 def calculate_xp_increment (
362362 self ,
@@ -386,11 +386,14 @@ def calculate_xp_increment(
386386 for role in CONFIG .XP_CONFIG .XP_MULTIPLIERS [guild_id ]
387387 }
388388
389- return max (
390- (guild_multipliers .get (role .id , 1 ) for role in member .roles ),
391- default = 1 ,
389+ base_xp = random .randint (10 , 20 )
390+ multiplier = max (
391+ (guild_multipliers .get (role .id , 1.0 ) for role in member .roles ),
392+ default = 1.0 ,
392393 )
393394
395+ return float (base_xp * multiplier )
396+
394397 def calculate_level (self , xp : float , guild_id : int = 0 ) -> int :
395398 """
396399 Calculate a level based on XP.
@@ -407,20 +410,7 @@ def calculate_level(self, xp: float, guild_id: int = 0) -> int:
407410 int
408411 The calculated level.
409412 """
410- # Ensure XP is non-negative to prevent complex number errors
411- xp = max (0.0 , xp )
412-
413- # Get server-specific exponent or use default
414- exponent = self .levels_exponent .get (guild_id , self .levels_exponent .get (0 , 2.0 ))
415-
416- # Guard against division by zero
417- if exponent == 0 :
418- logger .error (
419- f"levels_exponent for guild { guild_id } cannot be 0, using default value of 2" ,
420- )
421- exponent = 2.0
422-
423- return int ((xp / 500 ) ** (1 / exponent ) * 5 )
413+ return int ((xp / 50.0 ) ** 0.5 )
424414
425415 # *NOTE* Do not move this function to utils.py, as this results in a circular import.
426416 def valid_xplevel_input (self , user_input : int ) -> discord .Embed | None :
0 commit comments