diff options
| -rwxr-xr-x | bitbotd | 9 | ||||
| -rw-r--r-- | src/ModuleManager.py | 66 | ||||
| -rw-r--r-- | src/core_modules/admin.py (renamed from modules/admin.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/channel_access.py (renamed from modules/channel_access.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/channel_blacklist.py (renamed from modules/channel_blacklist.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/channel_keys.py (renamed from modules/channel_keys.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/check_mode.py (renamed from modules/check_mode.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/commands/__init__.py (renamed from modules/commands/__init__.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/commands/outs.py (renamed from modules/commands/outs.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/config.py (renamed from modules/config.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ctcp.py (renamed from modules/ctcp.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/deferred_read.py (renamed from modules/deferred_read.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/fake_echo.py (renamed from modules/fake_echo.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/format_activity.py (renamed from modules/format_activity.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/help.py (renamed from modules/help.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ignore.py (renamed from modules/ignore.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_chathistory.py (renamed from modules/ircv3_chathistory.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_echo_message.py (renamed from modules/ircv3_echo_message.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_labeled_responses.py (renamed from modules/ircv3_labeled_responses.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_message_tracking.py (renamed from modules/ircv3_message_tracking.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_metadata.py (renamed from modules/ircv3_metadata.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_msgid.py (renamed from modules/ircv3_msgid.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_sasl/README.md (renamed from modules/ircv3_sasl/README.md) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_sasl/__init__.py (renamed from modules/ircv3_sasl/__init__.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_sasl/scram.py (renamed from modules/ircv3_sasl/scram.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_server_time.py (renamed from modules/ircv3_server_time.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/ircv3_sts.py (renamed from modules/ircv3_sts.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/line_handler/__init__.py (renamed from modules/line_handler/__init__.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/line_handler/channel.py (renamed from modules/line_handler/channel.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/line_handler/core.py (renamed from modules/line_handler/core.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/line_handler/ircv3.py (renamed from modules/line_handler/ircv3.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/line_handler/message.py (renamed from modules/line_handler/message.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/line_handler/user.py (renamed from modules/line_handler/user.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/modules.py (renamed from modules/modules.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/more.py (renamed from modules/more.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/nick_regain.py (renamed from modules/nick_regain.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/perform.py (renamed from modules/perform.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/permissions/__init__.py (renamed from modules/permissions/__init__.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/print_activity.py (renamed from modules/print_activity.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/proxy.py (renamed from modules/proxy.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/signals.py (renamed from modules/signals.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/silence.py (renamed from modules/silence.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/strip_color.py (renamed from modules/strip_color.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/strip_otr.py (renamed from modules/strip_otr.py) | 0 | ||||
| -rw-r--r-- | src/core_modules/throttle.py (renamed from modules/throttle.py) | 0 |
45 files changed, 43 insertions, 32 deletions
@@ -123,14 +123,15 @@ events = EventManager.EventRoot(log).wrap() exports = Exports.Exports() timers = Timers.Timers(database, events, log) -module_directories = [os.path.join(directory, "modules")] +core_modules = os.path.join(directory, "src", "core_modules") +extra_modules = [os.path.join(directory, "modules")] if args.external: - module_directories.append(os.path.abspath(args.external)) + extra_modules.append(os.path.abspath(args.external)) if "external-modules" in config: - module_directories.append(os.path.abspath(config["external-modules"])) + extra_modules.append(os.path.abspath(config["external-modules"])) modules = ModuleManager.ModuleManager(events, exports, timers, config, log, - module_directories) + core_modules, extra_modules) bot = IRCBot.Bot(directory, args, cache, config, database, events, exports, log, modules, timers) diff --git a/src/ModuleManager.py b/src/ModuleManager.py index 2cbc3935..c7b4549f 100644 --- a/src/ModuleManager.py +++ b/src/ModuleManager.py @@ -102,28 +102,46 @@ class ModuleManager(object): timers: Timers.Timers, config: Config.Config, log: Logging.Log, - directories: typing.List[str]): + core_modules: str, + extra_modules: typing.List[str]): self.events = events self.exports = exports self.config = config self.timers = timers self.log = log - self.directories = directories + self._core_modules = core_modules + self._extra_modules = extra_modules self.modules = {} # type: typing.Dict[str, LoadedModule] - def list_modules(self) -> typing.List[ModuleDefinition]: + def _list_modules(self, directory: str + ) -> typing.Dict[str, ModuleDefinition]: modules = [] + for file_module in glob.glob(os.path.join(directory, "*.py")): + modules.append(self.define_module(ModuleType.FILE, file_module)) - for directory in self.directories: - for file_module in glob.glob(os.path.join(directory, "*.py")): - modules.append(self.define_module(ModuleType.FILE, file_module)) + for directory_module in glob.glob(os.path.join( + directory, "*", "__init__.py")): + modules.append(self.define_module(ModuleType.DIRECTORY, + directory_module)) + return {definition.name: definition for definition in modules} + + def list_modules(self, whitelist: typing.List[str], + blacklist: typing.List[str]) -> typing.Dict[str, ModuleDefinition]: + core_modules = self._list_modules(self._core_modules) + extra_modules = {} - for directory_module in glob.glob(os.path.join( - directory, "*", "__init__.py")): - modules.append(self.define_module(ModuleType.DIRECTORY, - directory_module)) - return sorted(modules, key=lambda module: module.name) + for directory in self._extra_modules: + for name, module in self._list_modules(directory).items(): + if (not name in extra_modules and + (name in whitelist or + (not whitelist and not name in blacklist))): + extra_modules[name] = module + + modules = {} + modules.update(extra_modules) + modules.update(core_modules) + return modules def define_module(self, type: ModuleType, filename: str ) -> ModuleDefinition: @@ -180,10 +198,6 @@ class ModuleManager(object): return module return None - def _get_magic(self, obj: typing.Any, magic: str, default: typing.Any - ) -> typing.Any: - return getattr(obj, magic) if hasattr(obj, magic) else default - def _check_hashflags(self, bot: "IRCBot.Bot", definition: ModuleDefinition ) -> None: for hashflag, value in definition.hashflags: @@ -275,7 +289,8 @@ class ModuleManager(object): self.log.debug("Module '%s' loaded", [loaded_module.name]) return loaded_module - def _dependency_sort(self, definitions: typing.List[ModuleDefinition]): + def _dependency_sort(self, definitions: typing.Dict[str, ModuleDefinition] + ) -> typing.List[ModuleDefinition]: definitions_ordered = [] definition_names = {d.name: d for d in definitions} @@ -416,22 +431,17 @@ class ModuleManager(object): def _list_valid_modules(self, bot: "IRCBot.Bot", whitelist: typing.List[str], blacklist: typing.List[str]): - module_definitions = self.list_modules() + module_definitions = self.list_modules(whitelist, blacklist) loadable_definitions = [] nonloadable_definitions = [] - for definition in module_definitions: - if definition.name in whitelist or ( - not whitelist and not definition.name in blacklist): - try: - self._check_hashflags(bot, definition) - except ModuleNotLoadableWarning: - nonloadable_definitions.append(definition) - continue - loadable_definitions.append(definition) - else: + for name, definition in module_definitions.items(): + try: + self._check_hashflags(bot, definition) + except ModuleNotLoadableWarning: nonloadable_definitions.append(definition) - + continue + loadable_definitions.append(definition) return (self._dependency_sort(loadable_definitions), nonloadable_definitions) diff --git a/modules/admin.py b/src/core_modules/admin.py index 364380d4..364380d4 100644 --- a/modules/admin.py +++ b/src/core_modules/admin.py diff --git a/modules/channel_access.py b/src/core_modules/channel_access.py index 5502db9f..5502db9f 100644 --- a/modules/channel_access.py +++ b/src/core_modules/channel_access.py diff --git a/modules/channel_blacklist.py b/src/core_modules/channel_blacklist.py index d151bad8..d151bad8 100644 --- a/modules/channel_blacklist.py +++ b/src/core_modules/channel_blacklist.py diff --git a/modules/channel_keys.py b/src/core_modules/channel_keys.py index 01e3c38f..01e3c38f 100644 --- a/modules/channel_keys.py +++ b/src/core_modules/channel_keys.py diff --git a/modules/check_mode.py b/src/core_modules/check_mode.py index 9fe3f464..9fe3f464 100644 --- a/modules/check_mode.py +++ b/src/core_modules/check_mode.py diff --git a/modules/commands/__init__.py b/src/core_modules/commands/__init__.py index 5a750a9b..5a750a9b 100644 --- a/modules/commands/__init__.py +++ b/src/core_modules/commands/__init__.py diff --git a/modules/commands/outs.py b/src/core_modules/commands/outs.py index e82ceefd..e82ceefd 100644 --- a/modules/commands/outs.py +++ b/src/core_modules/commands/outs.py diff --git a/modules/config.py b/src/core_modules/config.py index 710a5dd6..710a5dd6 100644 --- a/modules/config.py +++ b/src/core_modules/config.py diff --git a/modules/ctcp.py b/src/core_modules/ctcp.py index 678cf833..678cf833 100644 --- a/modules/ctcp.py +++ b/src/core_modules/ctcp.py diff --git a/modules/deferred_read.py b/src/core_modules/deferred_read.py index c891e860..c891e860 100644 --- a/modules/deferred_read.py +++ b/src/core_modules/deferred_read.py diff --git a/modules/fake_echo.py b/src/core_modules/fake_echo.py index bb7fbf43..bb7fbf43 100644 --- a/modules/fake_echo.py +++ b/src/core_modules/fake_echo.py diff --git a/modules/format_activity.py b/src/core_modules/format_activity.py index 1d93eb94..1d93eb94 100644 --- a/modules/format_activity.py +++ b/src/core_modules/format_activity.py diff --git a/modules/help.py b/src/core_modules/help.py index 58659d9d..58659d9d 100644 --- a/modules/help.py +++ b/src/core_modules/help.py diff --git a/modules/ignore.py b/src/core_modules/ignore.py index 11ad58f3..11ad58f3 100644 --- a/modules/ignore.py +++ b/src/core_modules/ignore.py diff --git a/modules/ircv3_chathistory.py b/src/core_modules/ircv3_chathistory.py index e540673a..e540673a 100644 --- a/modules/ircv3_chathistory.py +++ b/src/core_modules/ircv3_chathistory.py diff --git a/modules/ircv3_echo_message.py b/src/core_modules/ircv3_echo_message.py index 276ac554..276ac554 100644 --- a/modules/ircv3_echo_message.py +++ b/src/core_modules/ircv3_echo_message.py diff --git a/modules/ircv3_labeled_responses.py b/src/core_modules/ircv3_labeled_responses.py index 7dd04b5c..7dd04b5c 100644 --- a/modules/ircv3_labeled_responses.py +++ b/src/core_modules/ircv3_labeled_responses.py diff --git a/modules/ircv3_message_tracking.py b/src/core_modules/ircv3_message_tracking.py index 3f4ad88c..3f4ad88c 100644 --- a/modules/ircv3_message_tracking.py +++ b/src/core_modules/ircv3_message_tracking.py diff --git a/modules/ircv3_metadata.py b/src/core_modules/ircv3_metadata.py index e0e6d387..e0e6d387 100644 --- a/modules/ircv3_metadata.py +++ b/src/core_modules/ircv3_metadata.py diff --git a/modules/ircv3_msgid.py b/src/core_modules/ircv3_msgid.py index f95f9fd4..f95f9fd4 100644 --- a/modules/ircv3_msgid.py +++ b/src/core_modules/ircv3_msgid.py diff --git a/modules/ircv3_sasl/README.md b/src/core_modules/ircv3_sasl/README.md index 30a51e08..30a51e08 100644 --- a/modules/ircv3_sasl/README.md +++ b/src/core_modules/ircv3_sasl/README.md diff --git a/modules/ircv3_sasl/__init__.py b/src/core_modules/ircv3_sasl/__init__.py index 9f7fac5f..9f7fac5f 100644 --- a/modules/ircv3_sasl/__init__.py +++ b/src/core_modules/ircv3_sasl/__init__.py diff --git a/modules/ircv3_sasl/scram.py b/src/core_modules/ircv3_sasl/scram.py index f243d1e6..f243d1e6 100644 --- a/modules/ircv3_sasl/scram.py +++ b/src/core_modules/ircv3_sasl/scram.py diff --git a/modules/ircv3_server_time.py b/src/core_modules/ircv3_server_time.py index c9790d95..c9790d95 100644 --- a/modules/ircv3_server_time.py +++ b/src/core_modules/ircv3_server_time.py diff --git a/modules/ircv3_sts.py b/src/core_modules/ircv3_sts.py index aeeac1f1..aeeac1f1 100644 --- a/modules/ircv3_sts.py +++ b/src/core_modules/ircv3_sts.py diff --git a/modules/line_handler/__init__.py b/src/core_modules/line_handler/__init__.py index ddea6fdc..ddea6fdc 100644 --- a/modules/line_handler/__init__.py +++ b/src/core_modules/line_handler/__init__.py diff --git a/modules/line_handler/channel.py b/src/core_modules/line_handler/channel.py index 91150839..91150839 100644 --- a/modules/line_handler/channel.py +++ b/src/core_modules/line_handler/channel.py diff --git a/modules/line_handler/core.py b/src/core_modules/line_handler/core.py index d72bf223..d72bf223 100644 --- a/modules/line_handler/core.py +++ b/src/core_modules/line_handler/core.py diff --git a/modules/line_handler/ircv3.py b/src/core_modules/line_handler/ircv3.py index a9d740ed..a9d740ed 100644 --- a/modules/line_handler/ircv3.py +++ b/src/core_modules/line_handler/ircv3.py diff --git a/modules/line_handler/message.py b/src/core_modules/line_handler/message.py index fa36dbc2..fa36dbc2 100644 --- a/modules/line_handler/message.py +++ b/src/core_modules/line_handler/message.py diff --git a/modules/line_handler/user.py b/src/core_modules/line_handler/user.py index d1592cd7..d1592cd7 100644 --- a/modules/line_handler/user.py +++ b/src/core_modules/line_handler/user.py diff --git a/modules/modules.py b/src/core_modules/modules.py index a93afaea..a93afaea 100644 --- a/modules/modules.py +++ b/src/core_modules/modules.py diff --git a/modules/more.py b/src/core_modules/more.py index 52849938..52849938 100644 --- a/modules/more.py +++ b/src/core_modules/more.py diff --git a/modules/nick_regain.py b/src/core_modules/nick_regain.py index cf1dfa48..cf1dfa48 100644 --- a/modules/nick_regain.py +++ b/src/core_modules/nick_regain.py diff --git a/modules/perform.py b/src/core_modules/perform.py index 832cab54..832cab54 100644 --- a/modules/perform.py +++ b/src/core_modules/perform.py diff --git a/modules/permissions/__init__.py b/src/core_modules/permissions/__init__.py index 0559774c..0559774c 100644 --- a/modules/permissions/__init__.py +++ b/src/core_modules/permissions/__init__.py diff --git a/modules/print_activity.py b/src/core_modules/print_activity.py index e6a34992..e6a34992 100644 --- a/modules/print_activity.py +++ b/src/core_modules/print_activity.py diff --git a/modules/proxy.py b/src/core_modules/proxy.py index 1bcaebd1..1bcaebd1 100644 --- a/modules/proxy.py +++ b/src/core_modules/proxy.py diff --git a/modules/signals.py b/src/core_modules/signals.py index 921b483c..921b483c 100644 --- a/modules/signals.py +++ b/src/core_modules/signals.py diff --git a/modules/silence.py b/src/core_modules/silence.py index 42990921..42990921 100644 --- a/modules/silence.py +++ b/src/core_modules/silence.py diff --git a/modules/strip_color.py b/src/core_modules/strip_color.py index 736d066e..736d066e 100644 --- a/modules/strip_color.py +++ b/src/core_modules/strip_color.py diff --git a/modules/strip_otr.py b/src/core_modules/strip_otr.py index bdb273a5..bdb273a5 100644 --- a/modules/strip_otr.py +++ b/src/core_modules/strip_otr.py diff --git a/modules/throttle.py b/src/core_modules/throttle.py index e204cc34..e204cc34 100644 --- a/modules/throttle.py +++ b/src/core_modules/throttle.py |
