mirror of
https://github.com/iio612/DEFENDER.git
synced 2026-02-13 19:24:23 +00:00
Moving modules in separate folders
This commit is contained in:
@@ -391,7 +391,7 @@ class Base:
|
||||
result = response.fetchall()
|
||||
|
||||
for param, value in result:
|
||||
if type(getattr(dataclassObj, param)) == list:
|
||||
if isinstance(getattr(dataclassObj, param), list):
|
||||
value = ast.literal_eval(value)
|
||||
|
||||
setattr(dataclassObj, param, self.int_if_possible(value))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from re import match, findall, search
|
||||
from datetime import datetime
|
||||
from typing import TYPE_CHECKING, Union
|
||||
from typing import TYPE_CHECKING, Optional, Union
|
||||
from ssl import SSLEOFError, SSLError
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -17,14 +17,21 @@ class Unrealircd6:
|
||||
self.__Base = ircInstance.Base
|
||||
self.__Settings = ircInstance.Base.Settings
|
||||
|
||||
self.known_protocol = ['SJOIN', 'UID', 'MD', 'QUIT', 'SQUIT',
|
||||
self.known_protocol: set[str] = {'SJOIN', 'UID', 'MD', 'QUIT', 'SQUIT',
|
||||
'EOS', 'PRIVMSG', 'MODE', 'UMODE2',
|
||||
'VERSION', 'REPUTATION', 'SVS2MODE',
|
||||
'SLOG', 'NICK', 'PART', 'PONG'
|
||||
]
|
||||
'SLOG', 'NICK', 'PART', 'PONG'}
|
||||
|
||||
self.__Base.logs.info(f"** Loading protocol [{__name__}]")
|
||||
|
||||
def get_ircd_protocol_poisition(self, cmd: list[str]) -> tuple[int, Optional[str]]:
|
||||
|
||||
for index, token in enumerate(cmd):
|
||||
if token.upper() in self.known_protocol:
|
||||
return index, token.upper()
|
||||
|
||||
return (-1, None)
|
||||
|
||||
def send2socket(self, message: str, print_log: bool = True) -> None:
|
||||
"""Envoit les commandes à envoyer au serveur.
|
||||
|
||||
|
||||
@@ -1,10 +1,26 @@
|
||||
from datetime import datetime
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Literal
|
||||
from json import dumps
|
||||
from dataclasses import dataclass, field, asdict, fields
|
||||
from typing import Literal, Any
|
||||
from os import sep
|
||||
|
||||
@dataclass
|
||||
class MClient:
|
||||
class MainModel:
|
||||
"""Parent Model contains important methods"""
|
||||
def to_dict(self) -> dict[str, Any]:
|
||||
"""Return the fields of a dataclass instance as a new dictionary mapping field names to field values."""
|
||||
return asdict(self)
|
||||
|
||||
def to_json(self) -> str:
|
||||
"""Return the object of a dataclass a json str."""
|
||||
return dumps(self.to_dict())
|
||||
|
||||
def get_attributes(self) -> list[str]:
|
||||
"""Return a list of attributes name"""
|
||||
return [f.name for f in fields(self)]
|
||||
|
||||
@dataclass
|
||||
class MClient(MainModel):
|
||||
"""Model Client for registred nickname"""
|
||||
uid: str = None
|
||||
account: str = None
|
||||
@@ -22,7 +38,7 @@ class MClient:
|
||||
connexion_datetime: datetime = field(default=datetime.now())
|
||||
|
||||
@dataclass
|
||||
class MUser:
|
||||
class MUser(MainModel):
|
||||
"""Model User"""
|
||||
|
||||
uid: str = None
|
||||
@@ -40,7 +56,7 @@ class MUser:
|
||||
connexion_datetime: datetime = field(default=datetime.now())
|
||||
|
||||
@dataclass
|
||||
class MAdmin:
|
||||
class MAdmin(MainModel):
|
||||
"""Model Admin"""
|
||||
|
||||
uid: str = None
|
||||
@@ -59,7 +75,7 @@ class MAdmin:
|
||||
level: int = 0
|
||||
|
||||
@dataclass
|
||||
class MReputation:
|
||||
class MReputation(MainModel):
|
||||
"""Model Reputation"""
|
||||
uid: str = None
|
||||
nickname: str = None
|
||||
@@ -77,7 +93,7 @@ class MReputation:
|
||||
secret_code: str = None
|
||||
|
||||
@dataclass
|
||||
class MChannel:
|
||||
class MChannel(MainModel):
|
||||
"""Model Channel"""
|
||||
|
||||
name: str = None
|
||||
@@ -92,7 +108,7 @@ class MChannel:
|
||||
"""
|
||||
|
||||
@dataclass
|
||||
class ColorModel:
|
||||
class ColorModel(MainModel):
|
||||
white: str = "\x0300"
|
||||
black: str = "\x0301"
|
||||
blue: str = "\x0302"
|
||||
@@ -104,7 +120,7 @@ class ColorModel:
|
||||
underline: str = "\x1F"
|
||||
|
||||
@dataclass
|
||||
class MConfig:
|
||||
class MConfig(MainModel):
|
||||
"""Model Configuration"""
|
||||
|
||||
SERVEUR_IP: str = "127.0.0.1"
|
||||
@@ -305,7 +321,7 @@ class MConfig:
|
||||
"""0: utf-8 | 1: iso-8859-1"""
|
||||
|
||||
@dataclass
|
||||
class MClone:
|
||||
class MClone(MainModel):
|
||||
"""Model Clone"""
|
||||
connected: bool = False
|
||||
uid: str = None
|
||||
|
||||
10
core/irc.py
10
core/irc.py
@@ -494,7 +494,8 @@ class Irc:
|
||||
try:
|
||||
# module_name : mod_voice
|
||||
module_name = module_name.lower()
|
||||
class_name = module_name.split('_')[1].capitalize() # ==> Voice
|
||||
module_folder = module_name.split('_')[1].lower() # ==> voice
|
||||
class_name = module_name.split('_')[1].capitalize() # ==> Voice
|
||||
|
||||
# print(self.loaded_classes)
|
||||
|
||||
@@ -511,7 +512,7 @@ class Irc:
|
||||
)
|
||||
return False
|
||||
|
||||
the_module = sys.modules['mods.' + module_name]
|
||||
the_module = sys.modules[f'mods.{module_folder}.{module_name}']
|
||||
importlib.reload(the_module)
|
||||
my_class = getattr(the_module, class_name, None)
|
||||
new_instance = my_class(self.ircObject)
|
||||
@@ -529,7 +530,7 @@ class Irc:
|
||||
return False
|
||||
|
||||
# Charger le module
|
||||
loaded_module = importlib.import_module(f"mods.{module_name}")
|
||||
loaded_module = importlib.import_module(f'mods.{module_folder}.{module_name}')
|
||||
|
||||
my_class = getattr(loaded_module, class_name, None) # Récuperer le nom de classe
|
||||
create_instance_of_the_class = my_class(self.ircObject) # Créer une nouvelle instance de la classe
|
||||
@@ -612,13 +613,14 @@ class Irc:
|
||||
def reload_module(self, from_user: str, mod_name: str) -> bool:
|
||||
try:
|
||||
module_name = mod_name.lower() # ==> mod_defender
|
||||
module_folder = module_name.split('_')[1].lower() # ==> defender
|
||||
class_name = module_name.split('_')[1].capitalize() # ==> Defender
|
||||
|
||||
if 'mods.' + module_name in sys.modules:
|
||||
self.Logs.info('Unload the module ...')
|
||||
self.loaded_classes[class_name].unload()
|
||||
self.Logs.info('Module Already Loaded ... reloading the module ...')
|
||||
the_module = sys.modules['mods.' + module_name]
|
||||
the_module = sys.modules[f'mods.{module_folder}.{module_name}']
|
||||
importlib.reload(the_module)
|
||||
|
||||
# Supprimer la class déja instancier
|
||||
|
||||
Reference in New Issue
Block a user