Improved game server handling for ontime #238
This commit is contained in:
@@ -3,7 +3,6 @@ type User implements TableQuery {
|
||||
discordId: String
|
||||
name: String
|
||||
xp: Int
|
||||
minecraftId: String
|
||||
ontime: Float
|
||||
level: Level
|
||||
|
||||
@@ -28,7 +27,6 @@ input UserFilter {
|
||||
discordId: String
|
||||
name: String
|
||||
xp: Int
|
||||
minecraftId: String
|
||||
ontime: Float
|
||||
level: LevelFilter
|
||||
server: ServerFilter
|
||||
|
@@ -20,9 +20,9 @@ input UserJoinedGameServerFilter {
|
||||
|
||||
type UserJoinedGameServerMutation {
|
||||
userJoined(input: UserJoinedGameServerInput!): UserJoinedGameServer
|
||||
userLeaved(input: UserJoinedGameServerInput!): UserJoinedGameServer
|
||||
userLeft(input: UserJoinedGameServerInput!): UserJoinedGameServer
|
||||
}
|
||||
|
||||
input UserJoinedGameServerInput {
|
||||
userId: ID!
|
||||
ident: String!
|
||||
}
|
@@ -11,6 +11,7 @@ from bot_api.configuration.authentication_settings import AuthenticationSettings
|
||||
from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC
|
||||
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
from bot_data.abc.user_game_ident_repository_abc import UserGameIdentRepositoryABC
|
||||
from bot_data.abc.user_joined_game_server_repository_abc import UserJoinedGameServerRepositoryABC
|
||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||
from bot_data.model.api_key import ApiKey
|
||||
@@ -32,6 +33,7 @@ class UserJoinedGameServerMutation(QueryABC):
|
||||
user_joined_game_servers: UserJoinedGameServerRepositoryABC,
|
||||
api_keys: ApiKeyRepositoryABC,
|
||||
game_servers: GameServerRepositoryABC,
|
||||
user_game_idents: UserGameIdentRepositoryABC,
|
||||
bot: DiscordBotServiceABC,
|
||||
db: DatabaseContextABC,
|
||||
permissions: PermissionService,
|
||||
@@ -46,13 +48,14 @@ class UserJoinedGameServerMutation(QueryABC):
|
||||
self._user_joined_game_servers = user_joined_game_servers
|
||||
self._api_keys = api_keys
|
||||
self._game_servers = game_servers
|
||||
self._user_game_idents = user_game_idents
|
||||
self._bot = bot
|
||||
self._db = db
|
||||
self._permissions = permissions
|
||||
self._auth_settings = auth_settings
|
||||
|
||||
self.set_field("userJoined", self.resolve_user_joined)
|
||||
self.set_field("userLeaved", self.resolve_user_leaved)
|
||||
self.set_field("userLeft", self.resolve_user_left)
|
||||
|
||||
def _get_api_key_str(self, api_key: ApiKey) -> str:
|
||||
return hashlib.sha256(
|
||||
@@ -72,7 +75,14 @@ class UserJoinedGameServerMutation(QueryABC):
|
||||
)
|
||||
|
||||
def resolve_user_joined(self, *_, input: dict):
|
||||
user = self._users.get_user_by_id(input["userId"])
|
||||
api_key = self._get_api_key()
|
||||
if api_key is None:
|
||||
self._logger.warn(__name__, f"UserJoinedGameServer not saved. Api-Key not available!")
|
||||
return
|
||||
|
||||
game_server = self._game_servers.get_game_server_by_api_key_id(api_key.id)
|
||||
game_ident = self._user_game_idents.get_user_game_ident_by_ident(input["ident"])
|
||||
user = game_ident.user
|
||||
self._can_user_mutate_data(user.server, UserRoleEnum.admin)
|
||||
|
||||
active = self._user_joined_game_servers.find_active_user_joined_game_server_by_user_id(user.id)
|
||||
@@ -83,21 +93,27 @@ class UserJoinedGameServerMutation(QueryABC):
|
||||
)
|
||||
return
|
||||
|
||||
api_key = self._get_api_key()
|
||||
game_server = self._game_servers.get_game_server_by_api_key_id(api_key.id)
|
||||
new = UserJoinedGameServer(user, game_server, datetime.now())
|
||||
self._user_joined_game_servers.add_user_joined_game_server(new)
|
||||
self._db.save_changes()
|
||||
|
||||
return self._user_joined_game_servers.get_active_user_joined_game_server_by_user_id(user.id)
|
||||
|
||||
def resolve_user_leaved(self, *_, input: dict):
|
||||
user = self._users.get_user_by_id(input["userId"])
|
||||
def resolve_user_left(self, *_, input: dict):
|
||||
api_key = self._get_api_key()
|
||||
if api_key is None:
|
||||
self._logger.warn(__name__, f"UserJoinedGameServer not saved. Api-Key not available!")
|
||||
return
|
||||
|
||||
game_ident = self._user_game_idents.find_user_game_ident_by_ident(input["ident"])
|
||||
if game_ident is None:
|
||||
return
|
||||
user = game_ident.user
|
||||
self._can_user_mutate_data(user.server, UserRoleEnum.admin)
|
||||
|
||||
active = self._user_joined_game_servers.find_active_user_joined_game_server_by_user_id(user.id)
|
||||
if active is None:
|
||||
return None
|
||||
return
|
||||
active.leaved_on = datetime.now()
|
||||
|
||||
settings: BaseServerSettings = self._base_helper.get_config(user.server.discord_id)
|
||||
|
@@ -38,7 +38,6 @@ class UserQuery(DataQueryABC):
|
||||
self.set_field("discordId", self.resolve_discord_id)
|
||||
self.set_field("name", self.resolve_name)
|
||||
self.set_field("xp", self.resolve_xp)
|
||||
self.set_field("minecraftId", self.resolve_minecraft_id)
|
||||
self.set_field("ontime", self.resolve_ontime)
|
||||
self.set_field("level", self.resolve_level)
|
||||
self.add_collection(
|
||||
@@ -75,10 +74,6 @@ class UserQuery(DataQueryABC):
|
||||
def resolve_xp(user: User, *_):
|
||||
return user.xp
|
||||
|
||||
@staticmethod
|
||||
def resolve_minecraft_id(user: User, *_):
|
||||
return user.minecraft_id
|
||||
|
||||
@staticmethod
|
||||
def resolve_ontime(user: User, *_):
|
||||
return user.ontime
|
||||
|
Reference in New Issue
Block a user