Exemple #1
0
 def run(self):
     """ start this bot. this function does not return until KeyboardInterrupt """
     kernel = get_kernel()
     kernel.boot()
     self.cfg.server = kernel.host
     self.cfg.user = kernel.shelluser
     if kernel.run_args and not "start" in kernel.run_args: kernel.handle_args() ; return
     if not kernel.silent: print("commands are: %s\n" % ", ".join(kernel.cmnd.keys()))
     try:
         readline.set_completer(completer)
         readline.parse_and_bind("tab: complete")
         self.hfile = j(kernel.root, "run", "history")
         if not os.path.isfile(self.hfile): utils.touch(self.hfile)
         if hasattr(readline, "read_history_file"): readline.read_history_file(self.hfile)
     except: logging.error("no readline")
     self.stopped = False
     kernel.bot.register("bot", "console", self)
     while not self.stopped: 
         try: 
             intxt = input("%s -=- %s%s<%s " % (time.strftime(datefmt), BOLD, YELLOW, ENDC))
             if not intxt: continue
             if self.stopped: return
             event = O(bot=self, origin=kernel.shellid, channel="shell", input=intxt, cbtype="CONSOLE")
             event.prepare()
             e = kernel.put(event)
             e.wait()
         except TryAgain: continue
         except NoCommand as ex: self._raw("no %s command available\n" % str(ex))
         except (KeyboardInterrupt, EOFError): break
         except: error()
Exemple #2
0
 def load_dir(self, dirname):
     logging.warn("load %s" % dirname)
     for plugname in self.plugins(dirname):
         if "__" in plugname: continue
         try: mod = self.load_mod(plugname, dirname, True)
         except: error() ; continue
         if not mod: continue
         self.scan(mod, "cmnd")
         self.scan(mod, "cb")
Exemple #3
0
 def _loop(self):
     """ the threadloop, polls on self.queue (a deque) until a job arrives. """
     while not self.stopped:
         try: args, kwargs = self.queue.popleft()
         except IndexError: time.sleep(0.1) ; continue
         try: task = args[0]
         except IndexError: task = None
         if not task: logging.debug("no task %s" % str(args)) ; continue
         if self.stopped: break
         self.running = True
         if "cbtype" in task: logging.warn("task %s" % task.get_id())
         self.counter += 1
         self.lasttime = time.time()
         try: self.handle_task(task)
         except: error()
         task.done()
         self.running = False
     logging.warn("stopping loop")
Exemple #4
0
 def handle_task(self, *args, **kwargs):
     if not args: raise NoTask()
     task = args[0]
     kernel = get_kernel()
     if "do_exec" in task: kernel.execute(task)
     else:
         try: 
             if task.bot: task.bot.run_cb(task)
             kernel.run_cb(task)
             msg = "elapsed %s" % (time.time() - self.lasttime)
         except Exception as ex: msg = error() ; task.do_display = True
     task.status[str(time.ctime(time.time()))] = msg
Exemple #5
0
 def exit(self, *args, **kwargs):
     """ shutdown this bot. """
     self.stopped = True
     logging.warn("writing to history file")
     try: readline.write_history_file(self.hfile)
     except: error()