Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
Arquivo: users.py Projeto: code2u/jsb
 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
Exemplo n.º 4
0
 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()
Exemplo n.º 5
0
 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()
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 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)