diff --git a/src/EventManager.py b/src/EventManager.py index 12ec524c..eae8a121 100644 --- a/src/EventManager.py +++ b/src/EventManager.py @@ -29,11 +29,12 @@ class Event(object): class EventCallback(object): def __init__(self, function: CALLBACK_TYPE, priority: int, kwargs: dict, - one_shot: bool=False): + context: typing.Optional[str], one_shot: bool=False): self.function = function self.priority = priority self.kwargs = kwargs self.docstring = utils.parse.docstring(function.__doc__ or "") + self.context = context self._one_shot = one_shot def call(self, event: Event) -> typing.Any: @@ -83,7 +84,7 @@ class EventHook(object): return self._hook(function, context, priority, replay, kwargs) def _hook(self, function: CALLBACK_TYPE, context: typing.Optional[str], priority: int, replay: bool, kwargs: dict) -> EventCallback: - callback = EventCallback(function, priority, kwargs) + callback = EventCallback(function, priority, kwargs, context) if context == None: self._hooks.append(callback) diff --git a/src/ModuleManager.py b/src/ModuleManager.py index 6b04f47c..f764b445 100644 --- a/src/ModuleManager.py +++ b/src/ModuleManager.py @@ -91,6 +91,18 @@ class ModuleManager(object): def _import_name(self, name: str) -> str: return "bitbot_%s" % name + def from_context(self, context: str) -> typing.Optional[LoadedModule]: + for module in self.modules.values(): + if module.context == context: + return module + return None + def from_name(self, name: str) -> typing.Optional[LoadedModule]: + name_lower = name.lower() + for module in self.modules.values(): + if module.name.lower() == name_lower: + 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