|
|
|
@@ -4,8 +4,11 @@ from cpl_discord.service import DiscordBotServiceABC
|
|
|
|
|
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
|
|
|
|
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
|
|
|
|
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
|
|
|
|
from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC
|
|
|
|
|
from bot_data.model.user import User
|
|
|
|
|
from bot_data.model.user_role_enum import UserRoleEnum
|
|
|
|
|
from bot_graphql.abc.query_abc import QueryABC
|
|
|
|
|
from modules.base.service.user_warnings_service import UserWarningsService
|
|
|
|
|
from modules.level.service.level_service import LevelService
|
|
|
|
|
from modules.permission.service.permission_service import PermissionService
|
|
|
|
|
|
|
|
|
@@ -20,6 +23,8 @@ class UserMutation(QueryABC):
|
|
|
|
|
permissions: PermissionService,
|
|
|
|
|
levels: LevelRepositoryABC,
|
|
|
|
|
level_service: LevelService,
|
|
|
|
|
user_warnings: UserWarningsRepositoryABC,
|
|
|
|
|
user_warning_service: UserWarningsService,
|
|
|
|
|
):
|
|
|
|
|
QueryABC.__init__(self, "UserMutation")
|
|
|
|
|
|
|
|
|
@@ -30,6 +35,8 @@ class UserMutation(QueryABC):
|
|
|
|
|
self._permissions = permissions
|
|
|
|
|
self._levels = levels
|
|
|
|
|
self._level_service = level_service
|
|
|
|
|
self._user_warnings = user_warnings
|
|
|
|
|
self._user_warning_service = user_warning_service
|
|
|
|
|
|
|
|
|
|
self.set_field("updateUser", self.resolve_update_user)
|
|
|
|
|
|
|
|
|
@@ -45,9 +52,28 @@ class UserMutation(QueryABC):
|
|
|
|
|
|
|
|
|
|
user.xp = new_xp if new_xp is not None else input["xp"] if "xp" in input else user.xp
|
|
|
|
|
|
|
|
|
|
if "userWarnings" in input:
|
|
|
|
|
self._update_user_warning(user, input["userWarnings"])
|
|
|
|
|
|
|
|
|
|
self._users.update_user(user)
|
|
|
|
|
self._db.save_changes()
|
|
|
|
|
self._bot.loop.create_task(self._level_service.set_level(user))
|
|
|
|
|
|
|
|
|
|
user = self._users.get_user_by_id(input["id"])
|
|
|
|
|
return user
|
|
|
|
|
|
|
|
|
|
def _update_user_warning(self, user: User, new_warnings: dict):
|
|
|
|
|
old_warnings = self._user_warnings.get_user_warnings_by_user_id(user.id)
|
|
|
|
|
for warning in old_warnings:
|
|
|
|
|
if warning.id in [int(x["id"]) if "id" in x else None for x in new_warnings]:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
self._user_warning_service.remove_warnings(warning.id)
|
|
|
|
|
|
|
|
|
|
for warning in new_warnings:
|
|
|
|
|
if "id" in warning and int(warning["id"]) in old_warnings.select(lambda x: x.id):
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
member = self._bot.get_guild(user.server.discord_id).get_member(user.discord_id)
|
|
|
|
|
author = self._users.get_user_by_id(int(warning["author"]))
|
|
|
|
|
self._user_warning_service.add_warnings(member, warning["description"], author.discord_id)
|
|
|
|
|