示例#1
0
 def doevent(self, event):
     """ dispatch an event. """
     time.sleep(0.01)
     if not self.cfg:
         raise Exception(
             "eventbase - cfg is not set .. can't handle event.")
         return
     if not event: raise NoEventProvided()
     self.ecounter += 1
     if event.userhost in self.state['ignore']:
         logging.warn("%s - ignoring %s" % (self.cfg.name, event.userhost))
         return
     try:
         if event.isremote():
             self.doremote(event)
             return
         if event.type == "groupchat" and event.fromm in self.ids:
             logging.debug("%s - receiving groupchat from self (%s)" %
                           (self.cfg.name, event.fromm))
             return
         event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding),
                                         event)
     except UnicodeDecodeError:
         logging.warn("%s - got decode error in input .. ingoring" %
                      self.cfg.name)
         return
     event.bind(self, noraise=True)
     try:
         logging.debug("%s - event dump: %s" %
                       (self.cfg.name, event.dump()))
     except:
         pass
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin):
             logging.warn("%s is blocked" % event.origin)
             return
     if event.status == "done":
         logging.warn("%s - event is done .. ignoring" % self.cfg.name)
         return
     if event.msg or event.isdcc: event.speed = 2
     if event.channelchanged:
         cmnds.dispatch(self, event)
         return
     e1 = cpy(event)
     first_callbacks.check(self, e1)
     if not e1.stop:
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     waiter.check(self, event)
     #mainsink.put(5, self, event)
     self.lastiter = time.time()
     self.benice()
     return event
示例#2
0
 def doevent(self, event):
     """ dispatch an event. """
     if not event: raise NoEventProvided()
     if event.isremote():
         self.doremote(event)
         return
     event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding))
     msg = "%s - %s - %s - %s" % (self.name, event.auth, event.how,
                                  event.cbtype)
     if event.cbtype in ['NOTICE']:
         logging.warn("%s - %s - %s" % (self.name, event.nick, event.txt))
     else:
         try:
             int(event.cbtype)
             logging.debug("======== start handling local event ========")
             logging.debug(msg)
         except (ValueError, TypeError):
             if event.cbtype in ['PING', 'PRESENCE'
                                 ] or event.how == "background":
                 logging.debug(
                     "======== start handling local event ========")
                 logging.debug(msg)
             else:
                 logging.info(
                     "======== start handling local event ========")
                 logging.info(msg)
     logging.debug(event.dump())
     event.prepare(self)
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin): return
     if event.status == "done":
         logging.debug("%s - event is done .. ignoring" % self.name)
         return
     self.reloadcheck(event)
     if event.msg or event.isdcc: event.speed = 2
     e1 = cpy(event)
     first_callbacks.check(self, e1)
     if not e1.stop:
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     if not self.isgae:
         import asyncore
         asyncore.loop()
     return event
示例#3
0
文件: botbase.py 项目: code2u/jsb
 def doevent(self, event):
     """ dispatch an event. """ 
     time.sleep(0.01)
     if not self.cfg: raise Exception("eventbase - cfg is not set .. can't handle event.") ; return
     if not event: raise NoEventProvided()
     try:
         if event.isremote(): self.doremote(event) ; return
         if event.type == "groupchat" and event.fromm in self.ids:
             logging.warn("%s - receiving groupchat from self (%s)" % (self.cfg.name, event.fromm))
             return
         event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding), event)
     except UnicodeDecodeError: logging.warn("%s - got decode error in input .. ingoring" % self.cfg.name) ; return
     logtxt = "%s - %s ======== start handling local event ======== %s" % (self.cfg.name, event.cbtype, event.userhost)
     if event.cbtype in ['NOTICE']: logging.warn("%s - %s - %s" % (self.cfg.name, event.nick, event.txt))
     else:
         try:
             int(event.cbtype)
             logging.debug(logtxt)
         except (ValueError, TypeError):
             if event.cbtype in ['PING', 'PRESENCE'] or event.how == "background": 
                 logging.debug(logtxt)
             else: logging.info(logtxt)
     event.bind(self)
     try: logging.debug("%s - event dump: %s" % (self.cfg.name, event.dump()))
     except: pass
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin): return
     if event.status == "done":
         logging.debug("%s - event is done .. ignoring" % self.cfg.name)
         return
     self.reloadcheck(event)
     if event.msg or event.isdcc: event.speed = 2
     e1 = event
     first_callbacks.check(self, e1)
     if not e1.stop: 
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     waiter.check(self, event)
     #self.benice(event)
     return event
示例#4
0
 def outmonitor(self, origin, channel, txt, event=None):
     """ create an OUTPUT event with provided txt and send it to callbacks. """
     if event: e = cpy(event)
     else: e = EventBase()
     if e.status == "done":
         logging.debug("%s - outmonitor - event is done .. ignoring" % self.name)
         return
     e.bot = self
     e.origin = origin
     e.ruserhost = self.botname +'@' + self.uuid
     e.userhost = e.ruserhost
     e.auth = e.userhost
     e.channel = channel
     e.origtxt = txt
     e.txt = txt
     e.cbtype = 'OUTPUT'
     e.botoutput = True
     e.nodispatch = True
     e.ttl = 1
     e.nick = self.nick or self.botname
     e.bind(self)
     first_callbacks.check(self, e)
示例#5
0
 def doevent(self, event):
     """ dispatch an event. """ 
     time.sleep(0.01)
     if not self.cfg: raise Exception("eventbase - cfg is not set .. can't handle event.") ; return
     if not event: raise NoEventProvided()
     self.ecounter += 1
     if event.userhost in self.state['ignore']: logging.warn("%s - ignoring %s" % (self.cfg.name, event.userhost)) ; return
     try:
         if event.isremote(): self.doremote(event) ; return
         if event.type == "groupchat" and event.fromm in self.ids:
             logging.debug("%s - receiving groupchat from self (%s)" % (self.cfg.name, event.fromm))
             return
         event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding), event)
     except UnicodeDecodeError: logging.warn("%s - got decode error in input .. ingoring" % self.cfg.name) ; return
     event.bind(self, noraise=True)
     try: logging.debug("%s - event dump: %s" % (self.cfg.name, event.dump()))
     except: pass
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin):
             logging.warn("%s is blocked" % event.origin) ; return
     if event.status == "done":
         logging.warn("%s - event is done .. ignoring" % self.cfg.name)
         return
     if event.msg or event.isdcc: event.speed = 2
     if event.channelchanged: cmnds.dispatch(self, event) ; return
     e1 = cpy(event)
     first_callbacks.check(self, e1)
     if not e1.stop: 
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     waiter.check(self, event)
     #mainsink.put(5, self, event)
     self.lastiter = time.time()
     self.benice()
     return event
示例#6
0
 def outmonitor(self, origin, channel, txt, event=None):
     """ create an OUTPUT event with provided txt and send it to callbacks. """
     if event: e = cpy(event)
     else: e = EventBase()
     if e.status == "done":
         logging.debug("%s - outmonitor - event is done .. ignoring" %
                       self.name)
         return
     e.bot = self
     e.origin = origin
     e.ruserhost = self.botname + '@' + self.uuid
     e.userhost = e.ruserhost
     e.auth = e.userhost
     e.channel = channel
     e.origtxt = txt
     e.txt = txt
     e.cbtype = 'OUTPUT'
     e.botoutput = True
     e.nodispatch = True
     e.ttl = 1
     e.nick = self.nick or self.botname
     e.bind(self)
     first_callbacks.check(self, e)
示例#7
0
 def doevent(self, event):
     """ dispatch an event. """
     if not event: raise NoEventProvided()
     if event.isremote(): self.doremote(event) ; return
     event.txt = self.inputmorphs.do(fromenc(event.txt, self.encoding))
     msg = "%s - %s - %s - %s" % (self.name, event.auth, event.how, event.cbtype)
     if event.cbtype in ['NOTICE']: logging.warn("%s - %s - %s" % (self.name, event.nick, event.txt))
     else:
         try:
             int(event.cbtype)
             logging.debug("======== start handling local event ========")
             logging.debug(msg)
         except (ValueError, TypeError):
             if event.cbtype in ['PING', 'PRESENCE'] or event.how == "background": 
                 logging.debug("======== start handling local event ========")
                 logging.debug(msg)
             else: logging.info("======== start handling local event ========") ; logging.info(msg)
     logging.debug(event.dump())
     event.prepare(self)
     self.status = "callback"
     starttime = time.time()
     if self.closed:
         if self.gatekeeper.isblocked(event.origin): return
     if event.status == "done":
         logging.debug("%s - event is done .. ignoring" % self.name)
         return
     self.reloadcheck(event)
     if event.msg or event.isdcc: event.speed = 2
     e1 = cpy(event)
     first_callbacks.check(self, e1)
     if not e1.stop: 
         callbacks.check(self, e1)
         if not e1.stop: last_callbacks.check(self, e1)
     event.callbackdone = True
     if not self.isgae: import asyncore ; asyncore.loop()
     return event