aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbitbotd9
-rw-r--r--src/ModuleManager.py66
-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
diff --git a/bitbotd b/bitbotd
index 50661cad..dd032983 100755
--- a/bitbotd
+++ b/bitbotd
@@ -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