From a7efede75e851f96e4536a92e3f0f5b5467002f1 Mon Sep 17 00:00:00 2001 From: adator <85586985+adator85@users.noreply.github.com> Date: Mon, 10 Nov 2025 00:13:35 +0100 Subject: [PATCH] Introduce MOD_HEADER constante in all modules as mandatory constante. --- core/classes/interfaces/imodule.py | 4 +++- mods/clone/mod_clone.py | 8 ++++++++ mods/command/mod_command.py | 8 ++++++++ mods/defender/mod_defender.py | 8 ++++++++ mods/jsonrpc/mod_jsonrpc.py | 8 ++++++++ mods/test/mod_test.py | 8 ++++++++ mods/votekick/mod_votekick.py | 10 +++++++++- 7 files changed, 52 insertions(+), 2 deletions(-) diff --git a/core/classes/interfaces/imodule.py b/core/classes/interfaces/imodule.py index 6005c6b..7860c19 100644 --- a/core/classes/interfaces/imodule.py +++ b/core/classes/interfaces/imodule.py @@ -1,4 +1,4 @@ -from abc import ABC, abstractmethod +from abc import ABC, abstractmethod, abstractproperty from typing import TYPE_CHECKING, Optional from dataclasses import dataclass from mods.clone.schemas import ModConfModel @@ -84,6 +84,8 @@ class IModule(ABC): def inspect_class(self): if not hasattr(self, 'ModConfig'): raise AttributeError("The Module must init ModConfig attribute in the load method!") + if not hasattr(self, 'MOD_HEADER'): + raise NotImplementedError(f"You must declare the header of the module in {self.__class__.__name__}!") @abstractmethod def create_tables(self) -> None: diff --git a/mods/clone/mod_clone.py b/mods/clone/mod_clone.py index e016718..4eb698f 100644 --- a/mods/clone/mod_clone.py +++ b/mods/clone/mod_clone.py @@ -15,6 +15,14 @@ class Clone(IModule): class ModConfModel(schemas.ModConfModel): ... + MOD_HEADER: set[str] = { + 'Clone', + '1.0.0', + 'Connect thousands of clones to your IRCD, by group. You can use them as security moderation.', + 'Defender Team', + 'Defender-6' + } + def create_tables(self) -> None: """Methode qui va créer la base de donnée si elle n'existe pas. Une Session unique pour cette classe sera crée, qui sera utilisé dans cette classe / module diff --git a/mods/command/mod_command.py b/mods/command/mod_command.py index 2d41148..0f74106 100644 --- a/mods/command/mod_command.py +++ b/mods/command/mod_command.py @@ -14,6 +14,14 @@ class Command(IModule): """ pass + MOD_HEADER: set[str] = { + 'Command', + '1.0.0', + 'Module contains all IRC commands', + 'Defender Team', + 'Defender-6' + } + def create_tables(self) -> None: """Methode qui va créer la base de donnée si elle n'existe pas. Une Session unique pour cette classe sera crée, qui sera utilisé dans cette classe / module diff --git a/mods/defender/mod_defender.py b/mods/defender/mod_defender.py index 601246b..f42da02 100644 --- a/mods/defender/mod_defender.py +++ b/mods/defender/mod_defender.py @@ -12,6 +12,14 @@ class Defender(IModule): class ModConfModel(schemas.ModConfModel): ... + MOD_HEADER: set[str] = { + 'Defender', + '1.0.0', + 'Defender main module that uses the reputation security.', + 'Defender Team', + 'Defender-6' + } + def create_tables(self) -> None: """Methode qui va créer la base de donnée si elle n'existe pas. Une Session unique pour cette classe sera crée, qui sera utilisé dans cette classe / module diff --git a/mods/jsonrpc/mod_jsonrpc.py b/mods/jsonrpc/mod_jsonrpc.py index 9960e5b..6086d94 100644 --- a/mods/jsonrpc/mod_jsonrpc.py +++ b/mods/jsonrpc/mod_jsonrpc.py @@ -15,6 +15,14 @@ class Jsonrpc(IModule): """ jsonrpc: int = 0 + MOD_HEADER: set[str] = { + 'JsonRPC', + '1.0.0', + 'Module using the unrealircd-rpc-py library', + 'Defender Team', + 'Defender-6' + } + def callback_sent_to_irc(self, response: LiveRPCResult) -> None: dnickname = self.Config.SERVICE_NICKNAME diff --git a/mods/test/mod_test.py b/mods/test/mod_test.py index b59c9d4..290cf1b 100644 --- a/mods/test/mod_test.py +++ b/mods/test/mod_test.py @@ -12,6 +12,14 @@ class Test(IModule): param_exemple1: str param_exemple2: int + MOD_HEADER: set[str] = { + 'Test', + '1.0.0', + 'The test module', + 'Defender Team', + 'Defender-6' + } + def create_tables(self) -> None: """Methode qui va créer la base de donnée si elle n'existe pas. Une Session unique pour cette classe sera crée, qui sera utilisé dans cette classe / module diff --git a/mods/votekick/mod_votekick.py b/mods/votekick/mod_votekick.py index cd896be..de65fe9 100644 --- a/mods/votekick/mod_votekick.py +++ b/mods/votekick/mod_votekick.py @@ -15,7 +15,7 @@ import mods.votekick.schemas as schemas import mods.votekick.utils as utils from mods.votekick.votekick_manager import VotekickManager import mods.votekick.threads as thds -from typing import TYPE_CHECKING, Any, Optional +from typing import Any, Optional class Votekick(IModule): @@ -23,6 +23,14 @@ class Votekick(IModule): class ModConfModel(schemas.VoteChannelModel): ... + MOD_HEADER: set[str] = { + 'votekick', + '1.0.2', + 'Channel Democraty', + 'Defender Team', + 'Defender-6' + } + def create_tables(self) -> None: """Methode qui va créer la base de donnée si elle n'existe pas. Une Session unique pour cette classe sera crée, qui sera utilisé dans cette classe / module