Added server config mutation #127
This commit is contained in:
@@ -24,6 +24,7 @@ from bot_graphql.mutations.achievement_mutation import AchievementMutation
|
||||
from bot_graphql.mutations.auto_role_mutation import AutoRoleMutation
|
||||
from bot_graphql.mutations.auto_role_rule_mutation import AutoRoleRuleMutation
|
||||
from bot_graphql.mutations.level_mutation import LevelMutation
|
||||
from bot_graphql.mutations.server_config_mutation import ServerConfigMutation
|
||||
from bot_graphql.mutations.technician_config_mutation import TechnicianConfigMutation
|
||||
from bot_graphql.mutations.user_joined_game_server_mutation import UserJoinedGameServerMutation
|
||||
from bot_graphql.mutations.user_mutation import UserMutation
|
||||
@@ -41,6 +42,7 @@ from bot_graphql.queries.known_user_history_query import KnownUserHistoryQuery
|
||||
from bot_graphql.queries.known_user_query import KnownUserQuery
|
||||
from bot_graphql.queries.level_history_query import LevelHistoryQuery
|
||||
from bot_graphql.queries.level_query import LevelQuery
|
||||
from bot_graphql.queries.server_config_query import ServerConfigQuery
|
||||
from bot_graphql.queries.server_history_query import ServerHistoryQuery
|
||||
from bot_graphql.queries.server_query import ServerQuery
|
||||
from bot_graphql.queries.technician_config_history_query import TechnicianConfigHistoryQuery
|
||||
@@ -86,6 +88,7 @@ class GraphQLModule(ModuleABC):
|
||||
services.add_transient(QueryABC, KnownUserQuery)
|
||||
services.add_transient(QueryABC, LevelHistoryQuery)
|
||||
services.add_transient(QueryABC, LevelQuery)
|
||||
services.add_transient(QueryABC, ServerConfigQuery)
|
||||
services.add_transient(QueryABC, ServerHistoryQuery)
|
||||
services.add_transient(QueryABC, ServerQuery)
|
||||
services.add_transient(QueryABC, TechnicianConfigQuery)
|
||||
@@ -122,5 +125,6 @@ class GraphQLModule(ModuleABC):
|
||||
services.add_transient(QueryABC, AchievementMutation)
|
||||
services.add_transient(QueryABC, UserJoinedGameServerMutation)
|
||||
services.add_transient(QueryABC, TechnicianConfigMutation)
|
||||
services.add_transient(QueryABC, ServerConfigMutation)
|
||||
|
||||
services.add_transient(SeederService)
|
||||
|
@@ -6,4 +6,5 @@ type Mutation {
|
||||
userJoinedGameServer: UserJoinedGameServerMutation
|
||||
achievement: AchievementMutation
|
||||
technicianConfig: TechnicianConfigMutation
|
||||
serverConfig: ServerConfigMutation
|
||||
}
|
@@ -31,6 +31,8 @@ type Server implements TableWithHistoryQuery {
|
||||
achievementCount: Int
|
||||
achievements(filter: AchievementFilter, page: Page, sort: Sort): [Achievement]
|
||||
|
||||
config: ServerConfig
|
||||
|
||||
createdAt: String
|
||||
modifiedAt: String
|
||||
|
||||
|
94
kdb-bot/src/bot_graphql/model/serverConfig.gql
Normal file
94
kdb-bot/src/bot_graphql/model/serverConfig.gql
Normal file
@@ -0,0 +1,94 @@
|
||||
type ServerConfig implements TableWithHistoryQuery {
|
||||
id: ID
|
||||
messageDeleteTimer: Int
|
||||
notificationChatId: String
|
||||
maxVoiceStateHours: Int
|
||||
xpPerMessage: Int
|
||||
xpPerReaction: Int
|
||||
maxMessageXpPerHour: Int
|
||||
xpPerOntimeHour: Int
|
||||
xpPerEventParticipation: Int
|
||||
xpPerAchievement: Int
|
||||
afkCommandChannelId: String
|
||||
helpVoiceChannelId: String
|
||||
teamChannelId: String
|
||||
loginMessageChannelId: String
|
||||
|
||||
afkChannelIds: [String]
|
||||
moderatorRoleIds: [String]
|
||||
adminRoleIds: [String]
|
||||
|
||||
server: Server
|
||||
|
||||
createdAt: String
|
||||
modifiedAt: String
|
||||
|
||||
history: [ServerConfigHistory]
|
||||
}
|
||||
|
||||
type ServerConfigHistory implements HistoryTableQuery {
|
||||
id: ID
|
||||
messageDeleteTimer: Int
|
||||
notificationChatId: String
|
||||
maxVoiceStateHours: Int
|
||||
xpPerMessage: Int
|
||||
xpPerReaction: Int
|
||||
maxMessageXpPerHour: Int
|
||||
xpPerOntimeHour: Int
|
||||
xpPerEventParticipation: Int
|
||||
xpPerAchievement: Int
|
||||
afkCommandChannelId: String
|
||||
helpVoiceChannelId: String
|
||||
teamChannelId: String
|
||||
loginMessageChannelId: String
|
||||
|
||||
serverId: ID
|
||||
|
||||
deleted: Boolean
|
||||
dateFrom: String
|
||||
dateTo: String
|
||||
}
|
||||
|
||||
type ServerAFKChannelIdsConfigHistory implements HistoryTableQuery {
|
||||
id: ID
|
||||
channelId: String
|
||||
|
||||
deleted: Boolean
|
||||
dateFrom: String
|
||||
dateTo: String
|
||||
}
|
||||
|
||||
type ServerTeamRoleIdsConfigHistory implements HistoryTableQuery {
|
||||
id: ID
|
||||
roleId: String
|
||||
teamMemberType: String
|
||||
|
||||
deleted: Boolean
|
||||
dateFrom: String
|
||||
dateTo: String
|
||||
}
|
||||
|
||||
type ServerConfigMutation {
|
||||
updateServerConfig(input: ServerConfigInput!): ServerConfig
|
||||
}
|
||||
|
||||
input ServerConfigInput {
|
||||
id: ID
|
||||
messageDeleteTimer: Int
|
||||
notificationChatId: String
|
||||
maxVoiceStateHours: Int
|
||||
xpPerMessage: Int
|
||||
xpPerReaction: Int
|
||||
maxMessageXpPerHour: Int
|
||||
xpPerOntimeHour: Int
|
||||
xpPerEventParticipation: Int
|
||||
xpPerAchievement: Int
|
||||
afkCommandChannelId: String
|
||||
helpVoiceChannelId: String
|
||||
teamChannelId: String
|
||||
loginMessageChannelId: String
|
||||
|
||||
afkChannelIds: [String]
|
||||
moderatorRoleIds: [String]
|
||||
adminRoleIds: [String]
|
||||
}
|
@@ -4,6 +4,7 @@ from bot_graphql.mutations.achievement_mutation import AchievementMutation
|
||||
from bot_graphql.mutations.auto_role_mutation import AutoRoleMutation
|
||||
from bot_graphql.mutations.auto_role_rule_mutation import AutoRoleRuleMutation
|
||||
from bot_graphql.mutations.level_mutation import LevelMutation
|
||||
from bot_graphql.mutations.server_config_mutation import ServerConfigMutation
|
||||
from bot_graphql.mutations.technician_config_mutation import TechnicianConfigMutation
|
||||
from bot_graphql.mutations.user_joined_game_server_mutation import UserJoinedGameServerMutation
|
||||
from bot_graphql.mutations.user_mutation import UserMutation
|
||||
@@ -19,6 +20,7 @@ class Mutation(MutationType):
|
||||
achievement_mutation: AchievementMutation,
|
||||
user_joined_game_server: UserJoinedGameServerMutation,
|
||||
technician_config: TechnicianConfigMutation,
|
||||
server_config: ServerConfigMutation,
|
||||
):
|
||||
MutationType.__init__(self)
|
||||
|
||||
@@ -29,3 +31,4 @@ class Mutation(MutationType):
|
||||
self.set_field("achievement", lambda *_: achievement_mutation)
|
||||
self.set_field("userJoinedGameServer", lambda *_: user_joined_game_server)
|
||||
self.set_field("technicianConfig", lambda *_: technician_config)
|
||||
self.set_field("serverConfig", lambda *_: server_config)
|
||||
|
157
kdb-bot/src/bot_graphql/mutations/server_config_mutation.py
Normal file
157
kdb-bot/src/bot_graphql/mutations/server_config_mutation.py
Normal file
@@ -0,0 +1,157 @@
|
||||
from cpl_core.database.context import DatabaseContextABC
|
||||
from cpl_discord.service import DiscordBotServiceABC
|
||||
from cpl_query.extension import List
|
||||
|
||||
from bot_api.logging.api_logger import ApiLogger
|
||||
from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
|
||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
from bot_data.model.server_afk_channel_ids_config import ServerAFKChannelIdsConfig
|
||||
from bot_data.model.server_config import ServerConfig
|
||||
from bot_data.model.server_team_role_ids_config import ServerTeamRoleIdsConfig
|
||||
from bot_data.model.team_member_type_enum import TeamMemberTypeEnum
|
||||
from bot_data.model.user_role_enum import UserRoleEnum
|
||||
from bot_graphql.abc.query_abc import QueryABC
|
||||
|
||||
|
||||
class ServerConfigMutation(QueryABC):
|
||||
def __init__(
|
||||
self,
|
||||
logger: ApiLogger,
|
||||
bot: DiscordBotServiceABC,
|
||||
servers: ServerRepositoryABC,
|
||||
server_configs: ServerConfigRepositoryABC,
|
||||
db: DatabaseContextABC,
|
||||
):
|
||||
QueryABC.__init__(self, "ServerConfigMutation")
|
||||
|
||||
self._logger = logger
|
||||
self._bot = bot
|
||||
self._servers = servers
|
||||
self._server_configs = server_configs
|
||||
self._db = db
|
||||
|
||||
self.set_field("updateServerConfig", self.resolve_update_server_config)
|
||||
|
||||
def resolve_update_server_config(self, *_, input: dict):
|
||||
if "id" not in input:
|
||||
raise ValueError("Id not set")
|
||||
|
||||
server_config = self._server_configs.get_server_config_by_server(input["id"])
|
||||
self._can_user_mutate_data(server_config, UserRoleEnum.admin)
|
||||
|
||||
server_config.message_delete_timer = (
|
||||
input["messageDeleteTimer"] if "messageDeleteTimer" in input else server_config.message_delete_timer
|
||||
)
|
||||
server_config.notification_chat_id = (
|
||||
input["notificationChatId"] if "notificationChatId" in input else server_config.notification_chat_id
|
||||
)
|
||||
server_config.max_voice_state_hours = (
|
||||
input["maxVoiceStateHours"] if "maxVoiceStateHours" in input else server_config.max_voice_state_hours
|
||||
)
|
||||
server_config.xp_per_message = (
|
||||
input["xpPerMessage"] if "xpPerMessage" in input else server_config.xp_per_message
|
||||
)
|
||||
server_config.xp_per_reaction = (
|
||||
input["xpPerReaction"] if "xpPerReaction" in input else server_config.xp_per_reaction
|
||||
)
|
||||
server_config.max_message_xp_per_hour = (
|
||||
input["maxMessageXpPerHour"] if "maxMessageXpPerHour" in input else server_config.max_message_xp_per_hour
|
||||
)
|
||||
server_config.xp_per_ontime_hour = (
|
||||
input["xpPerOntimeHour"] if "xpPerOntimeHour" in input else server_config.xp_per_ontime_hour
|
||||
)
|
||||
server_config.xp_per_event_participation = (
|
||||
input["xpPerEventParticipation"]
|
||||
if "xpPerEventParticipation" in input
|
||||
else server_config.xp_per_event_participation
|
||||
)
|
||||
server_config.xp_per_achievement = (
|
||||
input["xpPerAchievement"] if "xpPerAchievement" in input else server_config.xp_per_achievement
|
||||
)
|
||||
server_config.afk_command_channel_id = (
|
||||
input["afkCommandChannelId"] if "afkCommandChannelId" in input else server_config.afk_command_channel_id
|
||||
)
|
||||
server_config.help_voice_channel_id = (
|
||||
input["helpVoiceChannelId"] if "helpVoiceChannelId" in input else server_config.help_voice_channel_id
|
||||
)
|
||||
server_config.team_channel_id = (
|
||||
input["teamChannelId"] if "teamChannelId" in input else server_config.team_channel_id
|
||||
)
|
||||
server_config.login_message_channel_id = (
|
||||
input["loginMessageChannelId"]
|
||||
if "loginMessageChannelId" in input
|
||||
else server_config.login_message_channel_id
|
||||
)
|
||||
server_config.afk_channel_ids = (
|
||||
List(int).extend([int(x) for x in input["afkChannelIds"]])
|
||||
if "afkChannelIds" in input
|
||||
else server_config.afk_channel_ids
|
||||
)
|
||||
|
||||
team_role_ids = List(ServerTeamRoleIdsConfig)
|
||||
if "moderatorRoleIds" in input:
|
||||
team_role_ids.extend(
|
||||
[
|
||||
ServerTeamRoleIdsConfig(x, TeamMemberTypeEnum.moderator, server_config.server.id)
|
||||
for x in input["moderatorRoleIds"]
|
||||
]
|
||||
)
|
||||
else:
|
||||
team_role_ids.extend(
|
||||
server_config.team_role_ids.where(lambda x: x.team_member_type == TeamMemberTypeEnum.moderator)
|
||||
)
|
||||
|
||||
if "adminRoleIds" in input:
|
||||
team_role_ids.extend(
|
||||
[
|
||||
ServerTeamRoleIdsConfig(x, TeamMemberTypeEnum.admin, server_config.server.id)
|
||||
for x in input["adminRoleIds"]
|
||||
]
|
||||
)
|
||||
else:
|
||||
team_role_ids.extend(
|
||||
server_config.team_role_ids.where(lambda x: x.team_member_type == TeamMemberTypeEnum.admin)
|
||||
)
|
||||
|
||||
self._server_configs.update_server_config(server_config)
|
||||
if "afkChannelIds" in input:
|
||||
self._update_afk_channel_ids(server_config)
|
||||
|
||||
if "moderatorRoleIds" in input or "adminRoleIds" in input:
|
||||
server_config.team_role_ids = team_role_ids
|
||||
self._update_team_role_ids(server_config)
|
||||
|
||||
self._db.save_changes()
|
||||
return server_config
|
||||
|
||||
def _update_afk_channel_ids(self, new_config: ServerConfig):
|
||||
old_config = self._server_configs.get_server_config_by_id(new_config.server.id)
|
||||
for channel_id in old_config.afk_channel_ids:
|
||||
if channel_id in new_config.afk_channel_ids:
|
||||
continue
|
||||
|
||||
self._server_configs.delete_server_afk_channel_config(
|
||||
ServerAFKChannelIdsConfig(channel_id, new_config.server.id)
|
||||
)
|
||||
|
||||
for channel_id in new_config.afk_channel_ids:
|
||||
if channel_id in old_config.afk_channel_ids:
|
||||
continue
|
||||
|
||||
self._server_configs.add_server_afk_channel_config(
|
||||
ServerAFKChannelIdsConfig(channel_id, new_config.server.id)
|
||||
)
|
||||
|
||||
def _update_team_role_ids(self, new_config: ServerConfig):
|
||||
old_config = self._server_configs.get_server_config_by_id(new_config.server.id)
|
||||
for role_id in old_config.team_role_ids:
|
||||
if role_id.role_id in new_config.team_role_ids.select(lambda x: int(x.role_id)):
|
||||
continue
|
||||
|
||||
self._server_configs.delete_server_team_role_id_config(role_id)
|
||||
|
||||
for role_id in new_config.team_role_ids:
|
||||
if role_id.role_id in old_config.team_role_ids.select(lambda x: str(x.role_id)):
|
||||
continue
|
||||
|
||||
self._server_configs.add_server_team_role_id_config(role_id)
|
39
kdb-bot/src/bot_graphql/queries/server_config_query.py
Normal file
39
kdb-bot/src/bot_graphql/queries/server_config_query.py
Normal file
@@ -0,0 +1,39 @@
|
||||
from cpl_core.database.context import DatabaseContextABC
|
||||
|
||||
from bot_data.model.server_config_history import ServerConfigHistory
|
||||
from bot_data.model.team_member_type_enum import TeamMemberTypeEnum
|
||||
from bot_graphql.abc.data_query_with_history_abc import DataQueryWithHistoryABC
|
||||
|
||||
|
||||
class ServerConfigQuery(DataQueryWithHistoryABC):
|
||||
def __init__(self, db: DatabaseContextABC):
|
||||
DataQueryWithHistoryABC.__init__(self, "ServerConfig", "CFG_ServerHistory", ServerConfigHistory, db)
|
||||
|
||||
self.set_field("id", lambda config, *_: config.id)
|
||||
self.set_field("messageDeleteTimer", lambda config, *_: config.message_delete_timer)
|
||||
self.set_field("notificationChatId", lambda config, *_: config.notification_chat_id)
|
||||
self.set_field("maxVoiceStateHours", lambda config, *_: config.max_voice_state_hours)
|
||||
self.set_field("xpPerMessage", lambda config, *_: config.xp_per_message)
|
||||
self.set_field("xpPerReaction", lambda config, *_: config.xp_per_reaction)
|
||||
self.set_field("maxMessageXpPerHour", lambda config, *_: config.max_message_xp_per_hour)
|
||||
self.set_field("xpPerOntimeHour", lambda config, *_: config.xp_per_ontime_hour)
|
||||
self.set_field("xpPerEventParticipation", lambda config, *_: config.xp_per_event_participation)
|
||||
self.set_field("xpPerAchievement", lambda config, *_: config.xp_per_achievement)
|
||||
self.set_field("afkCommandChannelId", lambda config, *_: config.afk_command_channel_id)
|
||||
self.set_field("helpVoiceChannelId", lambda config, *_: config.help_voice_channel_id)
|
||||
self.set_field("teamChannelId", lambda config, *_: config.team_channel_id)
|
||||
self.set_field("loginMessageChannelId", lambda config, *_: config.login_message_channel_id)
|
||||
self.set_field("afkChannelIds", lambda config, *_: config.afk_channel_ids)
|
||||
self.set_field(
|
||||
"moderatorRoleIds",
|
||||
lambda config, *_: config.team_role_ids.where(
|
||||
lambda x: x.team_member_type == TeamMemberTypeEnum.moderator
|
||||
).select(lambda x: x.role_id),
|
||||
)
|
||||
self.set_field(
|
||||
"adminRoleIds",
|
||||
lambda config, *_: config.team_role_ids.where(
|
||||
lambda x: x.team_member_type == TeamMemberTypeEnum.admin
|
||||
).select(lambda x: x.role_id),
|
||||
)
|
||||
self.set_field("server", lambda config, *_: config.server)
|
@@ -6,6 +6,7 @@ from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
||||
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
|
||||
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
||||
from bot_data.abc.server_config_repository_abc import ServerConfigRepositoryABC
|
||||
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
|
||||
from bot_data.abc.user_joined_voice_channel_repository_abc import UserJoinedVoiceChannelRepositoryABC
|
||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||
@@ -32,6 +33,7 @@ class ServerQuery(DataQueryWithHistoryABC):
|
||||
ujs: UserJoinedServerRepositoryABC,
|
||||
ujvs: UserJoinedVoiceChannelRepositoryABC,
|
||||
achievements: AchievementRepositoryABC,
|
||||
server_configs: ServerConfigRepositoryABC,
|
||||
):
|
||||
DataQueryWithHistoryABC.__init__(self, "Server", "ServersHistory", ServerHistory, db)
|
||||
|
||||
@@ -62,6 +64,7 @@ class ServerQuery(DataQueryWithHistoryABC):
|
||||
self.add_collection(
|
||||
"achievement", lambda server, *_: achievements.get_achievements_by_server_id(server.id), AchievementFilter
|
||||
)
|
||||
self.set_field("config", lambda server, *_: server_configs.get_server_config_by_server(server.id))
|
||||
|
||||
@staticmethod
|
||||
def resolve_id(server: Server, *_):
|
||||
|
@@ -27,11 +27,11 @@ class TechnicianConfigQuery(DataQueryWithHistoryABC):
|
||||
|
||||
results = self._db.select(
|
||||
f"""
|
||||
SELECT *
|
||||
FROM CFG_TechnicianPingUrlsHistory
|
||||
WHERE Id = {entry.id}
|
||||
ORDER BY DateTo DESC;
|
||||
"""
|
||||
SELECT *
|
||||
FROM CFG_TechnicianPingUrlsHistory
|
||||
WHERE Id = {entry.id}
|
||||
ORDER BY DateTo DESC;
|
||||
"""
|
||||
)
|
||||
|
||||
for result in results:
|
||||
@@ -44,11 +44,11 @@ class TechnicianConfigQuery(DataQueryWithHistoryABC):
|
||||
|
||||
results = self._db.select(
|
||||
f"""
|
||||
SELECT *
|
||||
FROM CFG_TechnicianIdsHistory
|
||||
WHERE Id = {entry.id}
|
||||
ORDER BY DateTo DESC;
|
||||
"""
|
||||
SELECT *
|
||||
FROM CFG_TechnicianIdsHistory
|
||||
WHERE Id = {entry.id}
|
||||
ORDER BY DateTo DESC;
|
||||
"""
|
||||
)
|
||||
|
||||
for result in results:
|
||||
|
Reference in New Issue
Block a user