Merge branch 'feature-achievements' into staging

This commit is contained in:
2022-01-28 18:11:56 +02:00

View File

@@ -28,9 +28,13 @@ class Achievement:
# Name of the achievement # Name of the achievement
name: str = None name: str = None
subtext: str = None
congrats_text: str = None
# List of levels for the achievement. Must always contain a 0 level! # List of levels for the achievement. Must always contain a 0 level!
levels: list[AchievementLevel] = None levels: list[AchievementLevel] = None
def __init__(self, guildid: int, userid: int): def __init__(self, guildid: int, userid: int):
self.guildid = guildid self.guildid = guildid
self.userid = userid self.userid = userid
@@ -78,10 +82,7 @@ class Achievement:
A brief textual description of the current progress. A brief textual description of the current progress.
Intended to be overridden by achievement implementations. Intended to be overridden by achievement implementations.
""" """
if self.next_level:
return f"{int(self.value)}/{self.next_level.threshold}" return f"{int(self.value)}/{self.next_level.threshold}"
else:
return f"{int(self.value)}, at the maximum level!"
def progress_field(self) -> tuple[str, str]: def progress_field(self) -> tuple[str, str]:
""" """
@@ -90,7 +91,8 @@ class Achievement:
# TODO: Not adjusted for levels # TODO: Not adjusted for levels
# TODO: Add hint if progress is empty? # TODO: Add hint if progress is empty?
name = f"{self.levels[1].emoji} {self.name} ({self.progress_text})" name = f"{self.levels[1].emoji} {self.name} ({self.progress_text})"
value = "**0** {progress_bar} **{threshold}**".format( value = "{subtext}\n**0** {progress_bar} **{threshold}**".format(
subtext=(self.subtext if self.next_level else self.congrats_text) or '',
progress_bar=self.progress_bar(self.value, self.levels[0].threshold, self.levels[1].threshold), progress_bar=self.progress_bar(self.value, self.levels[0].threshold, self.levels[1].threshold),
threshold=self.levels[1].threshold threshold=self.levels[1].threshold
) )
@@ -153,11 +155,12 @@ class Achievement:
class Workout(Achievement): class Workout(Achievement):
name = "Workouts" sorting_index = 8
name = "It's about Power"
levels = [ levels = [
AchievementLevel("Level 0", 0, None), AchievementLevel("Level 0", 0, None),
AchievementLevel("Level 1", 50, conf.emojis.active_achievement_1), AchievementLevel("Level 1", 50, conf.emojis.active_achievement_8),
] ]
async def _calculate_value(self) -> int: async def _calculate_value(self) -> int:
@@ -171,11 +174,12 @@ class Workout(Achievement):
class StudyHours(Achievement): class StudyHours(Achievement):
name = "Study Hours" sorting_index = 1
name = "Dream Big"
levels = [ levels = [
AchievementLevel("Level 0", 0, None), AchievementLevel("Level 0", 0, None),
AchievementLevel("Level 1", 1000, conf.emojis.active_achievement_2), AchievementLevel("Level 1", 1000, conf.emojis.active_achievement_1),
] ]
async def _calculate_value(self) -> float: async def _calculate_value(self) -> float:
@@ -197,11 +201,12 @@ class StudyHours(Achievement):
class StudyStreak(Achievement): class StudyStreak(Achievement):
name = "Study Streak" sorting_index = 2
name = "Consistency is Key"
levels = [ levels = [
AchievementLevel("Level 0", 0, None), AchievementLevel("Level 0", 0, None),
AchievementLevel("Level 1", 100, conf.emojis.active_achievement_3) AchievementLevel("Level 1", 100, conf.emojis.active_achievement_2)
] ]
async def _calculate_value(self) -> int: async def _calculate_value(self) -> int:
@@ -276,11 +281,12 @@ class StudyStreak(Achievement):
class Voting(Achievement): class Voting(Achievement):
name = "Voting" sorting_index = 7
name = "We're a Team"
levels = [ levels = [
AchievementLevel("Level 0", 0, None), AchievementLevel("Level 0", 0, None),
AchievementLevel("Level 1", 100, conf.emojis.active_achievement_4) AchievementLevel("Level 1", 100, conf.emojis.active_achievement_7)
] ]
async def _calculate_value(self) -> int: async def _calculate_value(self) -> int:
@@ -294,11 +300,12 @@ class Voting(Achievement):
class DaysStudying(Achievement): class DaysStudying(Achievement):
name = "Days Studied" sorting_index = 3
name = "Aim For The Moon"
levels = [ levels = [
AchievementLevel("Level 0", 0, None), AchievementLevel("Level 0", 0, None),
AchievementLevel("Level 1", 90, conf.emojis.active_achievement_5) AchievementLevel("Level 1", 90, conf.emojis.active_achievement_3)
] ]
async def _calculate_value(self) -> int: async def _calculate_value(self) -> int:
@@ -327,11 +334,12 @@ class DaysStudying(Achievement):
class TasksComplete(Achievement): class TasksComplete(Achievement):
name = "Completed Tasks" sorting_index = 4
name = "One Step at a Time"
levels = [ levels = [
AchievementLevel("Level 0", 0, None), AchievementLevel("Level 0", 0, None),
AchievementLevel("Level 1", 1000, conf.emojis.active_achievement_6) AchievementLevel("Level 1", 1000, conf.emojis.active_achievement_4)
] ]
async def _calculate_value(self) -> int: async def _calculate_value(self) -> int:
@@ -345,11 +353,12 @@ class TasksComplete(Achievement):
class ScheduledSessions(Achievement): class ScheduledSessions(Achievement):
name = "Scheduled Sessions Attended" sorting_index = 5
name = "Be Accountable"
levels = [ levels = [
AchievementLevel("Level 0", 0, None), AchievementLevel("Level 0", 0, None),
AchievementLevel("Level 1", 500, conf.emojis.active_achievement_7) AchievementLevel("Level 1", 500, conf.emojis.active_achievement_5)
] ]
async def _calculate_value(self) -> int: async def _calculate_value(self) -> int:
@@ -365,11 +374,12 @@ class ScheduledSessions(Achievement):
class MonthlyHours(Achievement): class MonthlyHours(Achievement):
name = "Maximum Monthly Hours" sorting_index = 6
name = "The 30 Days Challenge"
levels = [ levels = [
AchievementLevel("Level 0", 0, None), AchievementLevel("Level 0", 0, None),
AchievementLevel("Level 1", 100, conf.emojis.active_achievement_8) AchievementLevel("Level 1", 100, conf.emojis.active_achievement_6)
] ]
async def _calculate_value(self) -> float: async def _calculate_value(self) -> float:
@@ -419,6 +429,7 @@ achievements = [
ScheduledSessions, ScheduledSessions,
MonthlyHours MonthlyHours
] ]
achievements.sort(key=lambda cls: cls.sorting_index)
async def get_achievements_for(member): async def get_achievements_for(member):