Add a way to send a message to network bot attached to a server
This commit is contained in:
parent
818bc5f889
commit
92533d934b
6
bot.py
6
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"""
|
||||
|
@ -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)
|
||||
|
@ -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())
|
||||
|
Loading…
Reference in New Issue
Block a user