From 02f0608b751d51de09d88a559f267fadaf2ad9cf Mon Sep 17 00:00:00 2001 From: adator <85586985+adator85@users.noreply.github.com> Date: Tue, 26 Aug 2025 01:41:15 +0200 Subject: [PATCH] Adding current_admin to the global settings: - New property current_admin added to the Settings.py - Fix also translation function --- core/classes/rehash.py | 2 +- core/classes/settings.py | 44 ++++++++++++++++++++++------------- core/irc.py | 7 +++--- core/language/fr/core-fr.yaml | 4 ++++ core/utils.py | 15 ++++++------ 5 files changed, 45 insertions(+), 27 deletions(-) diff --git a/core/classes/rehash.py b/core/classes/rehash.py index 3eeb628..bc7dfa6 100644 --- a/core/classes/rehash.py +++ b/core/classes/rehash.py @@ -69,7 +69,7 @@ def rehash_service(uplink: 'Irc', nickname: str) -> None: msg=f'[REHASH] Module [{mod}] reloaded', channel=uplink.Config.SERVICE_CHANLOG ) - + uplink.Utils = sys.modules['core.utils'] uplink.Config = uplink.Loader.ConfModule.Configuration(uplink.Loader).get_config_model() uplink.Config.HSID = config_model_bakcup.HSID uplink.Config.DEFENDER_INIT = config_model_bakcup.DEFENDER_INIT diff --git a/core/classes/settings.py b/core/classes/settings.py index 9e334a5..2eccdac 100644 --- a/core/classes/settings.py +++ b/core/classes/settings.py @@ -4,10 +4,11 @@ from logging import Logger from threading import Timer, Thread, RLock from socket import socket from typing import Any, Optional, TYPE_CHECKING -from core.definition import MSModule +from core.definition import MSModule, MAdmin if TYPE_CHECKING: from core.classes.user import User + from core.classes.admin import Admin class Settings: """This Class will never be reloaded. @@ -15,33 +16,36 @@ class Settings: the whole life of the app """ - RUNNING_TIMERS: list[Timer] = [] - RUNNING_THREADS: list[Thread] = [] - RUNNING_SOCKETS: list[socket] = [] - PERIODIC_FUNC: dict[object] = {} - LOCK: RLock = RLock() + RUNNING_TIMERS: list[Timer] = [] + RUNNING_THREADS: list[Thread] = [] + RUNNING_SOCKETS: list[socket] = [] + PERIODIC_FUNC: dict[object] = {} + LOCK: RLock = RLock() - CONSOLE: bool = False + CONSOLE: bool = False - MAIN_SERVER_HOSTNAME: str = None - PROTOCTL_USER_MODES: list[str] = [] - PROTOCTL_PREFIX: list[str] = [] + MAIN_SERVER_HOSTNAME: str = None + PROTOCTL_USER_MODES: list[str] = [] + PROTOCTL_PREFIX: list[str] = [] - SMOD_MODULES: list[MSModule] = [] + SMOD_MODULES: list[MSModule] = [] """List contains all Server modules""" - __CACHE: dict[str, Any] = {} + __CACHE: dict[str, Any] = {} """Use set_cache or get_cache instead""" - __TRANSLATION: dict[str, list[list[str]]] = dict() + __TRANSLATION: dict[str, list[list[str]]] = dict() """Translation Varibale""" - __LANG: str = "EN" + __LANG: str = "EN" - __INSTANCE_OF_USER_UTILS: Optional['User'] = None + __INSTANCE_OF_USER_UTILS: Optional['User'] = None """Instance of the User Utils class""" - __LOGGER: Optional[Logger] = None + __CURRENT_ADMIN: Optional['MAdmin'] = None + """The Current Admin Object Model""" + + __LOGGER: Optional[Logger] = None """Instance of the logger""" def set_cache(self, key: str, value_to_cache: Any): @@ -97,6 +101,14 @@ class Settings: def global_user(self, user_utils_instance: 'User') -> None: self.__INSTANCE_OF_USER_UTILS = user_utils_instance + @property + def current_admin(self) -> MAdmin: + return self.__CURRENT_ADMIN + + @current_admin.setter + def current_admin(self, current_admin: MAdmin) -> None: + self.__CURRENT_ADMIN = current_admin + @property def global_logger(self) -> Logger: return self.__LOGGER diff --git a/core/irc.py b/core/irc.py index 81fc338..ad3c9fd 100644 --- a/core/irc.py +++ b/core/irc.py @@ -626,7 +626,8 @@ class Irc: """ fromuser = self.User.get_nickname(user) # Nickname qui a lancé la commande - uid = self.User.get_uid(fromuser) # Récuperer le uid de l'utilisateur + uid = self.User.get_uid(user) # Récuperer le uid de l'utilisateur + self.Settings.current_admin = self.Admin.get_admin(user) # set Current admin if any. RED = self.Config.COLORS.red GREEN = self.Config.COLORS.green @@ -1197,14 +1198,14 @@ class Irc: self.Protocol.send_notice( nick_from=dnickname, nick_to=fromuser, - msg=f"{module} - {GREEN}Loaded{NOGC} by {loaded_user} on {loaded_datetime}" + msg=tr('%s - %sLoaded%s by %s on %s', module, GREEN, NOGC, loaded_user, loaded_datetime) ) loaded = False else: self.Protocol.send_notice( nick_from=dnickname, nick_to=fromuser, - msg=f"{module} - {RED}Not Loaded{NOGC}" + msg=tr('%s - %sNot Loaded%s', module, GREEN, NOGC) ) case 'show_timers': diff --git a/core/language/fr/core-fr.yaml b/core/language/fr/core-fr.yaml index 7a81046..fdb01a8 100644 --- a/core/language/fr/core-fr.yaml +++ b/core/language/fr/core-fr.yaml @@ -2,3 +2,7 @@ traduction: # Message help - orig: "Access denied!" trad: "Accès refusé." + - orig: "%s - %sLoaded%s by %s on %s" + trad: "%s - %sChargé%s par %s le %s" + - orig: "%s - %sNot Loaded%s" + trad: "%s - %sNon chargé%s" diff --git a/core/utils.py b/core/utils.py index 05ee5b1..2cc2f2d 100644 --- a/core/utils.py +++ b/core/utils.py @@ -2,7 +2,6 @@ Main utils library. ''' import gc -import glob import ssl import socket import sys @@ -38,20 +37,22 @@ def tr(message: str, *args) -> str: g = global_settings try: # Access to user object ==> global_instance.get_user_option - client_language = global_settings.global_user.current_user.geoip if global_settings.global_user.current_user else 'en' - client_language = client_language if client_language else 'en' + client_language = g.current_admin.language if g.current_admin else g.global_lang + + if g.current_admin: + print("Current Admin", g.current_admin.nickname, "Current language", client_language, "Global language", g.global_lang) if count_args != count_placeholder: - global_settings.global_logger.error(f"Translation: Original message: {message} | Args: {count_args} - Placeholder: {count_placeholder}") + g.global_logger.error(f"Translation: Original message: {message} | Args: {count_args} - Placeholder: {count_placeholder}") return message if g.global_lang is None: return message % args if is_args_available else message - if g.global_lang.lower() == 'en': + if client_language.lower() == 'en': return message % args if is_args_available else message - - for trads in global_settings.global_translation[global_settings.global_lang.lower()]: + + for trads in g.global_translation[client_language.lower()]: if sub(r"\s+", "", message) == sub(r"\s+", "", trads[0]): return trads[1] % args if is_args_available else trads[1]