This commit is contained in:
Naruse
2025-04-15 19:36:05 +08:00
parent dd51fb491d
commit ec8972d5d6
121 changed files with 30598 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
from utils.logger import Info
from game_server.game.chat.decorators import command_registry
from game_server.net.session import PlayerSession
import game_server.game.chat.command # noqa: F401
class CommandHandler:
def load_commands(self):
registered_commands = ", ".join(
item.prefix for item in command_registry.values() if not item.is_alias
)
Info(
f"[BOOT] [CommandHandler] Registered {len(command_registry)} game commands => {registered_commands}"
)
def parse_command(self, content: str):
content = content.lstrip("/")
parts = content.split(maxsplit=1)
if len(parts) < 2:
return parts[0], ""
return parts[0], parts[1]
def print_help(self):
result = "Available commands:\n"
for index, (_, func) in enumerate(command_registry.items()):
result += f"{index+1}) {func.usage}\n\n"
return result
async def handle_command(self, session: PlayerSession, content: str):
if content == "/help":
return self.print_help()
command_label, args = self.parse_command(content)
command_func = command_registry.get(command_label)
if command_func is not None:
func_args_cnt = command_func.__code__.co_argcount - 1
args_list = args.split()[:func_args_cnt]
if args_list and args_list[0] == "help":
return f"Usage: {command_func.usage}"
try:
return await command_func(session, *args_list)
except TypeError:
return f"Usage: {command_func.usage}"
return None
handler = CommandHandler()