diff --git a/src/core/Client.py b/src/core/Client.py index 41f6a74..1a32bfa 100644 --- a/src/core/Client.py +++ b/src/core/Client.py @@ -90,7 +90,7 @@ class Client: return # TODO: i18n self.log.info(f"Kicked with reason: \"{reason}\"") - await self._send(b"K" + bytes(reason, "utf-8")) + await self._send(f"K{reason}") self.__alive = False async def send_message(self, message, to_all=True): @@ -108,7 +108,7 @@ class Client: # size data if type(data) == str: - data = bytes(data, "utf-8") + data = bytes(data, config.enc) if to_all: code = chr(data[0]) @@ -266,7 +266,7 @@ class Client: while self.__alive: data = await self._recv(True) if data.startswith(b"f"): - file = data[1:].decode("utf-8") + file = data[1:].decode(config.enc) # TODO: i18n self.log.info(f"Requested mode: {file!r}") size = -1 @@ -328,11 +328,11 @@ class Client: if len(mod_list) == 0: await self._send(b"-") else: - await self._send(bytes(mod_list, "utf-8")) + await self._send(mod_list) elif data == b"Done": for c in range(int(config.Game['max_cars'] * 2.3)): self._cars.append(None) - await self._send(b"M/levels/" + bytes(config.Game['map'], 'utf-8') + b"/info.json") + await self._send(f"M/levels/{config.Game['map']}/info.json") self.log.info(f"Syncing time: {time.monotonic() - tsr}") break return diff --git a/src/core/__init__.py b/src/core/__init__.py index 7abfa1d..d28a13d 100644 --- a/src/core/__init__.py +++ b/src/core/__init__.py @@ -46,17 +46,17 @@ if args.config: config_provider = ConfigProvider(config_path) config = config_provider.open_config() builtins.config = config -if config.Server['debug'] is True: +if config.Options['debug'] is True: utils.set_debug_status() log.info("Debug enabled!") log = get_logger("core.init") log.debug("Debug mode enabled!") log.debug(f"Server config: {config}") - +config.enc = config.Options['encoding'] # i18n init log.debug("Initializing i18n...") ml = MultiLanguage() -ml.set_language(args.language or config.Server['language']) +ml.set_language(args.language or config.Options['language']) ml.builtins_hook() log.debug("Initializing EventsSystem...") diff --git a/src/core/core.py b/src/core/core.py index 67e5ebd..11d76b9 100644 --- a/src/core/core.py +++ b/src/core/core.py @@ -105,7 +105,7 @@ class Core: if not client.ready: client.is_disconnected() continue - await client._send(bytes(ca, "utf-8")) + await client._send(ca) except Exception as e: self.log.error("Error in check_alive.") self.log.exception(e) diff --git a/src/core/utils.py b/src/core/utils.py index ae2f952..c12b24a 100644 --- a/src/core/utils.py +++ b/src/core/utils.py @@ -33,11 +33,15 @@ if os.path.exists(log_file): if os.path.exists(file): tar.add(file, os.path.basename(file)) os.remove(file) -fh = logging.FileHandler(log_file, encoding='utf-8') +fh = logging.FileHandler(log_file, encoding="utf-8") fh.setFormatter(logging.Formatter(log_format)) def get_logger(name): + try: + fh.encoding = config.enc + except NameError: + fh.encoding = "utf-8" log = logging.getLogger(name=name) log.addHandler(fh) log.level = log_level diff --git a/src/modules/ConfigProvider/config_provider-builtins.pyi b/src/modules/ConfigProvider/config_provider-builtins.pyi index cd947d2..ce92eee 100644 --- a/src/modules/ConfigProvider/config_provider-builtins.pyi +++ b/src/modules/ConfigProvider/config_provider-builtins.pyi @@ -1,8 +1,17 @@ +import secrets + + class Config: - Auth: dict - Game: dict - Server: dict - WebAPI: dict + def __init__(self, auth=None, game=None, server=None, options=None, web=None): + self.Auth = auth or {"key": None, "private": True} + self.Game = game or {"map": "gridmap_v2", "players": 8, "max_cars": 1} + self.Server = server or {"name": "KuiToi-Server", "description": "Welcome to KuiToi Server!", + "server_ip": "0.0.0.0", "server_port": 30814} + self.Options = options or {"language": "en", "encoding": "utf8", "speed_limit": 0, "use_queue": False, + "debug": False} + self.WebAPI = web or {"enabled": False, "server_ip": "127.0.0.1", "server_port": 8433, + "secret_key": secrets.token_hex(16)} + def __repr__(self): return "%s(Auth=%r, Game=%r, Server=%r)" % (self.__class__.__name__, self.Auth, self.Game, self.Server) class config (Config): ... diff --git a/src/modules/ConfigProvider/config_provider.py b/src/modules/ConfigProvider/config_provider.py index 5770d22..8fbaf22 100644 --- a/src/modules/ConfigProvider/config_provider.py +++ b/src/modules/ConfigProvider/config_provider.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- - # Developed by KuiToi Dev # File modules.config_provider.config_provider.py # Written by: SantaSpeen -# Version 1.0 +# Version 1.1 # Licence: FPA # (c) kuitoi.su 2023 import os @@ -11,13 +10,14 @@ import secrets import yaml - class Config: - def __init__(self, auth=None, game=None, server=None, web=None): + def __init__(self, auth=None, game=None, server=None, options=None, web=None): self.Auth = auth or {"key": None, "private": True} self.Game = game or {"map": "gridmap_v2", "players": 8, "max_cars": 1} - self.Server = server or {"name": "KuiToi-Server", "description": "Welcome to KuiToi Server!", "language": "en", - "server_ip": "0.0.0.0", "server_port": 30814, "debug": False} + self.Server = server or {"name": "KuiToi-Server", "description": "Welcome to KuiToi Server!", + "server_ip": "0.0.0.0", "server_port": 30814} + self.Options = options or {"language": "en", "encoding": "utf-8", "speed_limit": 0, "use_queue": False, + "debug": False} self.WebAPI = web or {"enabled": False, "server_ip": "127.0.0.1", "server_port": 8433, "secret_key": secrets.token_hex(16)} diff --git a/src/modules/PluginsLoader/plugins_loader.py b/src/modules/PluginsLoader/plugins_loader.py index f0866e9..79bd0ac 100644 --- a/src/modules/PluginsLoader/plugins_loader.py +++ b/src/modules/PluginsLoader/plugins_loader.py @@ -99,7 +99,7 @@ class PluginsLoader: plugin.print = print file_path = os.path.join(self.plugins_dir, file) plugin.__file__ = file_path - with open(f'{file_path}', 'r', encoding="utf-8") as f: + with open(f'{file_path}', 'r', encoding=config.enc) as f: code = f.read() exec(code, plugin.__dict__) diff --git a/src/modules/i18n/i18n.py b/src/modules/i18n/i18n.py index b685b61..2afb957 100644 --- a/src/modules/i18n/i18n.py +++ b/src/modules/i18n/i18n.py @@ -68,7 +68,9 @@ class i18n: class MultiLanguage: - def __init__(self, language: str = None, files_dir="modules/i18n/files/", encoding="utf-8"): + def __init__(self, language: str = None, files_dir="modules/i18n/files/", encoding=None): + if encoding is None: + encoding = config.enc if language is None: language = "en" self.__data = {}