From 92533d934b35cf12bf5218a3e20385930acc17e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=A9munaire?= Date: Thu, 8 Nov 2012 13:23:58 +0100 Subject: [PATCH] Add a way to send a message to network bot attached to a server --- bot.py | 6 ++++++ networkbot.py | 19 +++++++++++++++++-- server.py | 6 ++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/bot.py b/bot.py index 7ed043c..67a646f 100644 --- a/bot.py +++ b/bot.py @@ -187,6 +187,8 @@ class Bot: """Add a new server to the context""" srv = IRCServer(node, nick, owner, realname) srv.add_hook = lambda h: self.hooks.add_hook("irc_hook", h, self) + srv.add_networkbot = self.add_networkbot + srv.send_bot = lambda d: self.send_networkbot(srv, d) srv.register_hooks() if srv.id not in self.servers: self.servers[srv.id] = srv @@ -263,6 +265,10 @@ class Bot: self.network[id] = NetworkBot(self, srv, dest, dcc) return self.network[id] + def send_networkbot(self, srv, cmd, data=None): + for bot in self.network: + if self.network[bot].srv == srv: + self.network[bot].send_cmd(cmd, data) def quit(self, verb=False): """Save and unload modules and disconnect servers""" diff --git a/networkbot.py b/networkbot.py index 3624efc..accbeac 100644 --- a/networkbot.py +++ b/networkbot.py @@ -34,6 +34,9 @@ class NetworkBot: self.dest = dest self.dcc = dcc # DCC connection to the other bot + if self.dcc is not None: + self.dcc.closing_event = self.closing_event + self.hooks = list() self.REGISTERED_HOOKS = list() @@ -43,27 +46,34 @@ class NetworkBot: self.tags = dict() @property + def id(self): + return self.dcc.id + @property def sender(self): if self.dcc is not None: return self.dcc.sender return None - @property def nick(self): if self.dcc is not None: return self.dcc.nick return None - @property def realname(self): if self.dcc is not None: return self.dcc.realname return None + @property + def owner(self): + return self.srv.owner def isDCC(self, someone): """Abstract implementation""" return True + def accepted_channel(self, chan, sender=None): + return True + def send_cmd(self, cmd, data=None): """Create a tag and send the command""" # First, define a tag @@ -114,6 +124,7 @@ class NetworkBot: """Making the connexion with dest through srv""" if self.dcc is None or not self.dcc.connected: self.dcc = DCC(self.srv, self.dest) + self.dcc.closing_event = self.closing_event self.dcc.treatement = self.hello self.dcc.send_dcc("NEMUBOT###") else: @@ -157,6 +168,10 @@ class NetworkBot: #print ("request:", line) self.request(tag, cmd, args) + def closing_event(self): + for lvl in self.hooks: + lvl.clear() + def response(self, line, tag, args, t): (cmds, data) = t #print ("response for", cmds, ":", args) diff --git a/server.py b/server.py index fd5fdff..27891af 100644 --- a/server.py +++ b/server.py @@ -26,6 +26,7 @@ class Server(threading.Thread): self.stopping = threading.Event() self.s = socket self.connected = self.s is not None + self.closing_event = None self.moremessages = dict() @@ -61,6 +62,9 @@ class Server(threading.Thread): """Gives the server identifiant""" raise NotImplemented() + def accepted_channel(self, msg, sender=None): + return True + def msg_treated(self, origin): """Action done on server when a message was treated""" raise NotImplemented() @@ -75,6 +79,8 @@ class Server(threading.Thread): self.send_msg(res.channel, res.get_message()) if not res.alone: + if hasattr(self, "send_bot"): + self.send_bot("NOMORE %s" % res.channel) self.moremessages[res.channel] = res elif res.sender is not None: self.send_msg_usr(res.sender, res.get_message())