Improved game server handling for ontime #238
This commit is contained in:
@@ -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)
|
||||
]
|
||||
|
@@ -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)
|
||||
]
|
||||
|
Reference in New Issue
Block a user