diff --git a/modules/more.py b/modules/more.py index 062b6f7..2aeed91 100644 --- a/modules/more.py +++ b/modules/more.py @@ -19,6 +19,7 @@ """Progressive display of very long messages""" import logging +import sys from nemubot.message import Text, DirectAsk from nemubot.hooks import hook @@ -134,6 +135,17 @@ class Response: return Text(self.get_message(maxlen), server=None, to=self.receivers) + def __str__(self): + ret = [] + if len(self.messages): + for msg in self.messages: + if isinstance(msg, list): + ret.append(", ".join(msg)) + else: + ret.append(msg) + ret.append(self.nomore) + return "\n".join(ret) + def get_message(self, maxlen): if self.alone and len(self.messages) > 1: self.alone = False diff --git a/nemubot/message/abstract.py b/nemubot/message/abstract.py index e308e0c..3c69c8d 100644 --- a/nemubot/message/abstract.py +++ b/nemubot/message/abstract.py @@ -21,7 +21,7 @@ class Abstract: """This class represents an abstract message""" - def __init__(self, server, date=None, to=None, to_response=None, frm=None): + def __init__(self, server=None, date=None, to=None, to_response=None, frm=None): """Initialize an abstract message Arguments: @@ -59,7 +59,10 @@ class Abstract: @property def channel(self): # TODO: this is for legacy modules - return self.to_response[0] + if self.to_response is not None and len(self.to_response) > 0: + return self.to_response[0] + else: + return None @property def nick(self): diff --git a/nemubot/modulecontext.py b/nemubot/modulecontext.py index 731dfba..23ca9e4 100644 --- a/nemubot/modulecontext.py +++ b/nemubot/modulecontext.py @@ -67,6 +67,15 @@ class ModuleContext: store = convert_legacy_store(store) self.hooks.remove((store, hook)) return context.hooks.del_hook(hook, store) + def call_hook(store, msg): + for h in context.hooks.get_hooks(store): + if h.match(msg): + res = h.run(msg) + if isinstance(res, list): + for i in res: + yield i + else: + yield res def add_event(evt, eid=None): return context.add_event(evt, eid, module_src=module) def del_event(evt): @@ -93,6 +102,9 @@ class ModuleContext: def del_hook(store, hook): store = convert_legacy_store(store) self.hooks.remove((store, hook)) + def call_hook(store, msg): + # TODO: what can we do here? + return None def add_event(evt, eid=None): return context.add_event(evt, eid, module_src=module) def del_event(evt): @@ -110,6 +122,7 @@ class ModuleContext: self.del_event = del_event self.save = save self.send_response = send_response + self.call_hook = call_hook def unload(self):