Added logic to make achievement config more generic #268_achievements

This commit is contained in:
2023-07-15 12:52:54 +02:00
parent 51928dcb4d
commit 0ec67d41e2
12 changed files with 138 additions and 18 deletions

View File

@@ -2,6 +2,7 @@ from cpl_core.configuration import ConfigurationABC
from cpl_core.database.context import DatabaseContextABC
from cpl_core.logging import LoggerABC
from cpl_discord.service import DiscordBotServiceABC
from cpl_query.extension import List
from cpl_translation import TranslatePipe
from bot_core.configuration.server_settings import ServerSettings
@@ -10,6 +11,7 @@ from bot_data.abc.achievement_repository_abc import AchievementRepositoryABC
from bot_data.model.achievement import Achievement
from bot_data.model.user import User
from bot_data.model.user_got_achievement import UserGotAchievement
from modules.achievements.model.achievement_attribute import AchievementAttribute
class AchievementService:
@@ -31,6 +33,17 @@ class AchievementService:
self._message_service = message_service
self._t = t
def get_attributes(self) -> List[AchievementAttribute]:
attributes = List(AchievementAttribute)
attributes.add(AchievementAttribute("xp", lambda user: user.xp, "number"))
attributes.add(AchievementAttribute("message_count", lambda user: user.message_count, "number"))
attributes.add(AchievementAttribute("reaction_count", lambda user: user.reaction_count, "number"))
attributes.add(AchievementAttribute("ontime", lambda user: user.ontime, "number"))
attributes.add(AchievementAttribute("level", lambda user: user.level, "Level"))
return attributes
def _match(self, value: str, operator: str, expected_value: str) -> bool:
match operator:
case "==":

View File

@@ -0,0 +1 @@
# imports

View File

@@ -0,0 +1,20 @@
from typing import Callable
class AchievementAttribute:
# frontend type = TypeScript types
def __init__(self, name: str, resolver: Callable, frontend_type: str):
self._name = name
self._resolver = resolver
self._frontend_type = frontend_type
@property
def name(self) -> str:
return self._name
@property
def type(self) -> str:
return self._frontend_type
def resolve(self, *args, **kwargs):
return self._resolver(*args, **kwargs)