Exemple #1
0
 def event(self, txt=""): 
     e = Event(txt=txt)
     e.txt = txt
     e.origin = "test@bot"
     e._bot = self
     e.parse()
     return e
Exemple #2
0
 def event(self):
     event = Event()
     event._bot = self
     event.txt = input(self.prompt())
     event.origin = "root@shell"
     event.parse()
     return event
Exemple #3
0
    def cmnd(self, txt, bot=None):
        from meds.event import Event

        event = Event()
        event.origin = "user@bot"
        event._bot = self
        event.txt = txt
        event.parse()
        scheduler.put(event)
        return event
Exemple #4
0
def cmndrun(event):
    for cmnd in sorted(list(cmnds.handlers.keys())):
        if cmnd in exclude: continue
        e = Event()
        e.txt = ("!" + cmnd)
        e._bot = event._bot
        e.workdir = "test.data"
        e.origin = "test@bot"
        e.parse()
        logging.warn("< %s" % e.txt)
        scheduler.dispatch(e)
Exemple #5
0
 def test_cmnds(self):
     for cmnd in sorted(cmnds.handlers.keys()):
         if cmnd in ["test", "fetcher"]: continue
         event = Event()
         event.txt = cmnd + " arg1" 
         event._bot = bot
         event.origin = "tester@bot"
         event.parse()
         logging.warn("< %s" % event.txt)
         func = cmnds.get(event.cmnd)
         if func: launcher.launch(func, event)
         events.append(event)
     for event in events: event.wait(3.0) 
Exemple #6
0
 def parse(self, txt):
     rawstr = str(txt)
     logging.debug("< %s/parse %s" % (self.type, rawstr))
     obj = Event()
     obj._bot = self
     obj.arguments = rawstr.split(":")[0].split()
     if not obj.arguments: obj.arguments = rawstr.split(":")[1].split()
     obj.txt = rawstr.split(":", 2)[-1]
     if rawstr[0] == ":": obj.origin = obj.arguments[0] ; obj.cmnd = obj.arguments[1]
     else: obj.origin = self.server ; obj.cmnd = obj.arguments[0]
     try: obj.nick, obj.userhost = obj.origin.split("!")
     except: pass
     obj.target = obj.arguments[-1]
     if obj.target.startswith("#"): obj.channel = obj.target
     return obj
Exemple #7
0
def timer(event):
    if not event.rest: return
    day = get_day(event.rest) or today()
    hour = get_hour(event.rest)
    target = day + get_hour(event.rest)
    if time.time() > target: event.reply("already passed given time.") ; return
    event.reply("time is %s" % time.ctime(target))
    e = Event()
    e._bot = event._bot
    e.services = "clock"
    e.prefix = "timer"
    e.txt = event.rest
    e.time = target
    e.done = False
    e.save()
    timer = Timer(target, e.parse())
    launcher.launch(timer.start)
    e.ok()
Exemple #8
0
 def presenced(self, data):
     from meds.mods import cmnds
     logging.debug("< %s.read %s" % (self.type, data))
     o = Event()
     o.update(data)
     o._bot = self
     o["from"] = str(o["from"])
     o.origin = o["from"]
     if "txt" not in o: o.txt = ""
     o.element = "presence"
     if o.type == 'subscribe':
         pres = Event({'to': o["from"], 'type': 'subscribed'})
         self.client.send_presence(pres)
         pres = Event({'to': o["from"], 'type': 'subscribe'})
         self.client.send_presence(pres)
     elif o.type == "unavailable" and o.origin in self.channels: self.channels.remove(o.origin)
     elif o.origin != self.user and o.origin not in self.channels: self.channels.append(o.origin)
     o.no_dispatch = True
     logging.info("< %s.%s %s" % (self.type, o.type, o.origin))
     o.parse()
     func = cmnds.get(o.cmnd)
     if func: func(o)
Exemple #9
0
 def messaged(self, data):
     from meds.mods import cmnds
     logging.debug("< %s.read %s" % (self.type, data))
     m = Event()
     m.update(data)
     m._bot = self
     if m.type == "error": logging.error("^ %s" % m.error) ; return
     m.cc = self.cc
     m["from"] = str(m["from"])
     if self.user in m["from"]: logging.info("< %s.%s %s" % (self.type, m.type, m["from"])) ; return
     m.origin = m["from"]
     m.channel = m.origin
     m.to = m.origin
     m.element = "message"
     m.txt = m["body"]
     if '<delay xmlns="urn:xmpp:delay"' in str(data):
         logging.info("# %s.ignore %s %s" % (self.type, m.type, m.origin))
         return
     logging.info("< %s.%s %s" % (self.type, m.type, m.origin))
     m.parse()
     func = cmnds.get(m.cmnd)
     if func: func(m)
Exemple #10
0
 def dccloop(self, event, s):
     from meds.mods import cmnds
     sockfile = s.makefile('rw')
     s.setblocking(True)
     while 1:
         try:
             res = sockfile.readline()
             if not res: break
             res = res.rstrip()
             logging.info("< %s.loop %s" % (self.type, event.origin))
             e = Event()
             e._bot = self
             e.txt = res
             e.outer = sockfile
             e.origin = event.origin
             e.parse()
             func = cmnds.get(e.cmnd)
             if func: func(e)
         except socket.timeout: time.sleep(0.01)
         except socket.error as ex:
             if ex.errno in [socket.EAGAIN, ]: continue
             else: raise
         except Exception as ex: logging.error(get_exception())
     sockfile.close()