Improved game server handling for ontime #238

This commit is contained in:
2023-03-05 13:47:30 +01:00
parent 15dfc3f47c
commit 34c362a391
14 changed files with 412 additions and 76 deletions

View File

@@ -1,9 +1,12 @@
from typing import List as TList
import discord
import requests
from cpl_core.database.context import DatabaseContextABC
from cpl_discord.command import DiscordCommandABC
from cpl_discord.service import DiscordBotServiceABC
from cpl_translation import TranslatePipe
from discord import app_commands
from discord.ext import commands
from discord.ext.commands import Context
@@ -11,8 +14,11 @@ from bot_core.abc.client_utils_abc import ClientUtilsABC
from bot_core.abc.message_service_abc import MessageServiceABC
from bot_core.helper.command_checks import CommandChecks
from bot_core.logging.command_logger import CommandLogger
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_repository_abc import UserRepositoryABC
from bot_data.model.user_game_ident import UserGameIdent
class RegisterGroup(DiscordCommandABC):
@@ -24,6 +30,8 @@ class RegisterGroup(DiscordCommandABC):
client_utils: ClientUtilsABC,
servers: ServerRepositoryABC,
users: UserRepositoryABC,
game_server: GameServerRepositoryABC,
user_game_ident: UserGameIdentRepositoryABC,
db: DatabaseContextABC,
t: TranslatePipe,
):
@@ -35,6 +43,8 @@ class RegisterGroup(DiscordCommandABC):
self._client_utils = client_utils
self._servers = servers
self._users = users
self._game_server = game_server
self._user_game_ident = user_game_ident
self._db = db
self._t = t
@@ -49,7 +59,7 @@ class RegisterGroup(DiscordCommandABC):
@commands.guild_only()
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def minecraft(self, ctx: Context, member: discord.Member, name: str):
async def minecraft(self, ctx: Context, member: discord.Member, game_server: int, name: str):
self._logger.debug(__name__, f"Received command register minecraft {ctx}")
minecraft_id = None
@@ -74,8 +84,10 @@ class RegisterGroup(DiscordCommandABC):
server = self._servers.get_server_by_discord_id(ctx.guild.id)
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
user.minecraft_id = minecraft_id
self._users.update_user(user)
gs = self._game_server.get_game_server_by_id(game_server)
game_ident = UserGameIdent(user, gs, minecraft_id)
self._user_game_ident.add_user_game_ident(game_ident)
self._db.save_changes()
await self._message_service.send_interaction_msg(
@@ -83,3 +95,15 @@ class RegisterGroup(DiscordCommandABC):
)
self._logger.trace(__name__, f"Finished register minecraft command")
@minecraft.autocomplete("game_server")
async def game_server_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
server = self._servers.get_server_by_discord_id(interaction.guild.id)
game_servers = self._game_server.get_game_servers_by_server_id(server.id)
return [
app_commands.Choice(name=gs.name, value=gs.id)
for gs in self._client_utils.get_auto_complete_list(game_servers, current, lambda x: x.name)
]

View File

@@ -1,8 +1,11 @@
from typing import List as TList
import discord
from cpl_core.database.context import DatabaseContextABC
from cpl_discord.command import DiscordCommandABC
from cpl_discord.service import DiscordBotServiceABC
from cpl_translation import TranslatePipe
from discord import app_commands
from discord.ext import commands
from discord.ext.commands import Context
@@ -10,7 +13,9 @@ from bot_core.abc.client_utils_abc import ClientUtilsABC
from bot_core.abc.message_service_abc import MessageServiceABC
from bot_core.helper.command_checks import CommandChecks
from bot_core.logging.command_logger import CommandLogger
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_repository_abc import UserRepositoryABC
@@ -23,6 +28,8 @@ class UnregisterGroup(DiscordCommandABC):
client_utils: ClientUtilsABC,
servers: ServerRepositoryABC,
users: UserRepositoryABC,
game_server: GameServerRepositoryABC,
user_game_idents: UserGameIdentRepositoryABC,
db: DatabaseContextABC,
t: TranslatePipe,
):
@@ -34,26 +41,29 @@ class UnregisterGroup(DiscordCommandABC):
self._client_utils = client_utils
self._servers = servers
self._users = users
self._game_server = game_server
self._user_game_idents = user_game_idents
self._db = db
self._t = t
self._logger.trace(__name__, f"Loaded command service: {type(self).__name__}")
@commands.hybrid_group()
@commands.guild_only()
async def unregister(self, ctx: Context):
pass
# @commands.hybrid_group()
# @commands.guild_only()
# async def unregister(self, ctx: Context):
# pass
@unregister.command()
@commands.hybrid_command()
@commands.guild_only()
@CommandChecks.check_is_ready()
@CommandChecks.check_is_member_moderator()
async def minecraft(self, ctx: Context, member: discord.Member):
self._logger.debug(__name__, f"Received command register minecraft {ctx}")
async def unregister(self, ctx: Context, member: discord.Member, game_server: int):
self._logger.debug(__name__, f"Received command unregister {ctx}")
server = self._servers.get_server_by_discord_id(ctx.guild.id)
user = self._users.get_user_by_discord_id_and_server_id(member.id, server.id)
user.minecraft_id = None
ident = user.game_idents.where(lambda x: x.game_server.id == game_server).single()
self._user_game_idents.delete_user_game_ident(ident)
self._users.update_user(user)
self._db.save_changes()
@@ -61,4 +71,16 @@ class UnregisterGroup(DiscordCommandABC):
ctx.interaction, self._t.transform("modules.base.unregister.success")
)
self._logger.trace(__name__, f"Finished register minecraft command")
self._logger.trace(__name__, f"Finished unregister command")
@unregister.autocomplete("game_server")
async def game_server_autocomplete(
self, interaction: discord.Interaction, current: str
) -> TList[app_commands.Choice[str]]:
server = self._servers.get_server_by_discord_id(interaction.guild.id)
game_servers = self._game_server.get_game_servers_by_server_id(server.id)
return [
app_commands.Choice(name=gs.name, value=gs.id)
for gs in self._client_utils.get_auto_complete_list(game_servers, current, lambda x: x.name)
]