Add xp for achievement #268_achievements

This commit is contained in:
Sven Heidemann 2023-07-17 11:09:34 +02:00
parent fedf2f4b8b
commit 926323252a
3 changed files with 17 additions and 1 deletions

@ -1 +1 @@
Subproject commit 0179ab1ed725c233c5844ee94ed51cad176d9c7e Subproject commit 440fb3bd353dce31a2408c977a3168e3cfc32f9a

View File

@ -8,11 +8,13 @@ from cpl_translation import TranslatePipe
from bot_core.configuration.server_settings import ServerSettings from bot_core.configuration.server_settings import ServerSettings
from bot_core.service.message_service import MessageService from bot_core.service.message_service import MessageService
from bot_data.abc.achievement_repository_abc import AchievementRepositoryABC from bot_data.abc.achievement_repository_abc import AchievementRepositoryABC
from bot_data.abc.user_repository_abc import UserRepositoryABC
from bot_data.model.achievement import Achievement from bot_data.model.achievement import Achievement
from bot_data.model.user import User from bot_data.model.user import User
from bot_data.model.user_got_achievement import UserGotAchievement from bot_data.model.user_got_achievement import UserGotAchievement
from modules.achievements.achievement_attribute_resolver import AchievementAttributeResolver from modules.achievements.achievement_attribute_resolver import AchievementAttributeResolver
from modules.achievements.model.achievement_attribute import AchievementAttribute from modules.achievements.model.achievement_attribute import AchievementAttribute
from modules.base.configuration.base_server_settings import BaseServerSettings
class AchievementService: class AchievementService:
@ -22,6 +24,7 @@ class AchievementService:
logger: LoggerABC, logger: LoggerABC,
bot: DiscordBotServiceABC, bot: DiscordBotServiceABC,
achievements: AchievementRepositoryABC, achievements: AchievementRepositoryABC,
users: UserRepositoryABC,
db: DatabaseContextABC, db: DatabaseContextABC,
message_service: MessageService, message_service: MessageService,
resolver: AchievementAttributeResolver, resolver: AchievementAttributeResolver,
@ -31,6 +34,7 @@ class AchievementService:
self._logger = logger self._logger = logger
self._bot = bot self._bot = bot
self._achievements = achievements self._achievements = achievements
self._users = users
self._db = db self._db = db
self._message_service = message_service self._message_service = message_service
self._t = t self._t = t
@ -92,8 +96,15 @@ class AchievementService:
self._achievements.add_user_got_achievement(UserGotAchievement(user, achievement, user.server)) self._achievements.add_user_got_achievement(UserGotAchievement(user, achievement, user.server))
self._db.save_changes() self._db.save_changes()
await self._give_user_xp(user)
await self._send_achievement_notification(user.server.discord_id, user.discord_id, achievement.name) await self._send_achievement_notification(user.server.discord_id, user.discord_id, achievement.name)
async def _give_user_xp(self, user: User):
settings: BaseServerSettings = self._config.get_configuration(f"BaseServerSettings_{user.server.discord_id}")
user.xp += settings.xp_per_achievement
self._users.update_user(user)
self._db.save_changes()
async def _send_achievement_notification(self, guild_id: int, member_id: int, achievement_name: str): async def _send_achievement_notification(self, guild_id: int, member_id: int, achievement_name: str):
member = self._bot.get_guild(guild_id).get_member(member_id) member = self._bot.get_guild(guild_id).get_member(member_id)

View File

@ -16,6 +16,7 @@ class BaseServerSettings(ConfigurationModelABC):
self._max_message_xp_per_hour: int = 0 self._max_message_xp_per_hour: int = 0
self._xp_per_ontime_hour: int = 0 self._xp_per_ontime_hour: int = 0
self._xp_per_event_participation: int = 0 self._xp_per_event_participation: int = 0
self._xp_per_achievement: int = 0
self._afk_channel_ids: List[int] = List(int) self._afk_channel_ids: List[int] = List(int)
self._afk_command_channel_id: int = 0 self._afk_command_channel_id: int = 0
self._help_command_reference_url: str = "" self._help_command_reference_url: str = ""
@ -51,6 +52,10 @@ class BaseServerSettings(ConfigurationModelABC):
def xp_per_event_participation(self) -> int: def xp_per_event_participation(self) -> int:
return self._xp_per_event_participation return self._xp_per_event_participation
@property
def xp_per_achievement(self) -> int:
return self._xp_per_achievement
@property @property
def afk_channel_ids(self) -> List[int]: def afk_channel_ids(self) -> List[int]:
return self._afk_channel_ids return self._afk_channel_ids