def parse(self, event, *args, **kwargs): """ overload this. """ self.bot = event.bot self.origin = event.origin self.ruserhost = self.origin self.userhost = self.origin self.channel = event.channel self.auth = stripped(self.userhost)
def getuser(self, userhost): """ get user for which userhost matches """ userhost = stripident(userhost) if userhost in self.userhosts: return self.userhosts[userhost] else: for i in self.compiled: if re.search(i, userhost): return self.compiled[i] for user in self.data: for i in user.userhosts: if i == userhost or i == stripped(userhost): return user return None
def handle_message(self, data): """ message handler. """ m = Message(data) m.parse(self) if data.type == 'groupchat' and data.subject: logging.debug("%s - checking topic" % self.cfg.name) self.topiccheck(m) nm = Message(m) callbacks.check(self, nm) return xmlns = data.get('x').xmlns or data.get("delay").xmlns if xmlns and (xmlns == 'jabber:x:delay' or xmlns == 'urn:xmpp:delay'): logging.warn("%s - ignoring delayed message" % self.cfg.name) return if m.isresponse: logging.debug("%s - message is a response" % self.cfg.name) return jid = None m.origjid = m.jid for node in m.subelements: try: m.jid = node.x.item.jid except (AttributeError, TypeError): continue if self.cfg.user in m.fromm or (m.groupchat and self.cfg.nick == m.nick): logging.debug("%s - message to self .. ignoring" % self.cfg.name) return 0 if self.cfg.fulljids and not m.msg: utarget = self.userhosts.get(m.nick) if utarget: m.userhost = m.jid = m.auth = stripped(utarget) else: m.userhost = m.jid if m.msg: m.userhost = stripped(m.userhost) logging.debug("using %s as userhost" % m.userhost) try: if m.type == 'error': if m.code: self.errorHandler(m) else: m.nodispatch = False except Exception, ex: handle_exception()
def handle_message(self, data): """ message handler. """ m = Message(data) m.parse(self) if data.type == 'groupchat' and data.subject: logging.debug("%s - checking topic" % self.cfg.name) self.topiccheck(m) nm = Message(m) callbacks.check(self, nm) return xmlns = data.get('x').xmlns or data.get("delay").xmlns if xmlns and (xmlns == 'jabber:x:delay' or xmlns == 'urn:xmpp:delay'): logging.info("%s - ignoring delayed message" % self.cfg.name) return if m.isresponse: logging.debug("%s - message is a response" % self.cfg.name) return jid = None m.origjid = m.jid for node in m.subelements: try: m.jid = node.x.item.jid except (AttributeError, TypeError): continue if self.cfg.user in m.fromm or (m.groupchat and self.cfg.nick == m.nick): logging.debug("%s - message to self .. ignoring" % self.cfg.name) return 0 if self.cfg.fulljids and not m.msg: if not m.nick: utarget = None else: utarget = self.userhosts.get(m.nick) logging.warn("userhost from cache for %s ==> %s" % (m.nick, utarget)) if utarget: m.userhost = m.jid = m.auth = utarget else: m.userhost = m.jid if m.msg: m.userhost = stripped(m.userhost) logging.info("using %s as userhost" % m.userhost) try: if m.type == 'error': if m.code: self.errorHandler(m) else: m.nodispatch = False except Exception, ex: handle_exception()
def handle_presence(self, data): """ presence handler. """ p = Presence(data) p.parse() frm = p.fromm nickk = "" nick = p.nick if self.cfg.user in frm: self.pongcheck = True if nick: self.userhosts[nick] = stripped(frm) nickk = nick jid = None for node in p.subelements: try: jid = node.x.item.jid except (AttributeError, TypeError): continue if nickk and jid and self.cfg.fulljids: channel = p.channel if not self.jids.has_key(channel): self.jids[channel] = {} self.jids[channel][nickk] = jid self.userhosts[nickk] = stripped(jid) logging.debug('%s - setting jid of %s (%s) to %s' % (self.cfg.name, nickk, channel, self.userhosts[nickk])) if p.type == 'subscribe': pres = Presence({'to': p.fromm, 'type': 'subscribed'}) self.send(pres) pres = Presence({'to': p.fromm, 'type': 'subscribe'}) self.send(pres) nick = p.resource if p.type != 'unavailable': p.joined = True p.type = 'available' elif self.cfg.user in p.userhost: try: del self.jids[p.channel] logging.debug('%s - removed %s channel jids' % (self.cfg.name, p.channel)) except KeyError: pass else: try: del self.jids[p.channel][p.nick] logging.debug('%s - removed %s jid' % (self.cfg.name, p.nick)) except KeyError: pass if p.type == 'error': for node in p.subelements: try: err = node.error.code except (AttributeError, TypeError): err = 'no error set' try: txt = node.text.data except (AttributeError, TypeError): txt = "" if err: logging.error('%s - error - %s - %s' % (self.cfg.name, err, txt)) try: method = getattr(self,'handle_' + err) try: method(p) except: handle_exception() except AttributeError: pass self.doevent(p)
def handle_presence(self, data): """ presence handler. """ p = Presence(data) p.parse() frm = p.fromm nickk = "" nick = p.nick if self.cfg.user in frm: self.pongcheck = True if nick: #self.userhosts[nick] = stripped(frm) nickk = nick jid = None for node in p.subelements: try: jid = node.x.item.jid except (AttributeError, TypeError): continue if nickk and jid and self.cfg.fulljids: channel = p.channel if not self.jids.has_key(channel): self.jids[channel] = {} self.jids[channel][nickk] = jid self.userhosts[nickk] = stripped(jid) logging.info( '%s - setting jid of %s (%s) to %s' % (self.cfg.name, nickk, channel, self.userhosts[nickk])) if p.type == 'subscribe': pres = Presence({'to': p.fromm, 'type': 'subscribed'}) self.send(pres) pres = Presence({'to': p.fromm, 'type': 'subscribe'}) self.send(pres) nick = p.resource if p.type != 'unavailable': p.joined = True p.type = 'available' elif self.cfg.user in p.userhost: try: del self.jids[p.channel] logging.debug('%s - removed %s channel jids' % (self.cfg.name, p.channel)) except KeyError: pass else: try: del self.jids[p.channel][p.nick] logging.debug('%s - removed %s jid' % (self.cfg.name, p.nick)) except KeyError: pass if p.type == 'error': for node in p.subelements: try: err = node.error.code except (AttributeError, TypeError): err = 'no error set' try: txt = node.text.data except (AttributeError, TypeError): txt = "" if err: logging.error('%s - error - %s - %s' % (self.cfg.name, err, txt)) try: method = getattr(self, 'handle_' + err) try: method(p) except: handle_exception() except AttributeError: pass self.doevent(p)