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()
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")
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")
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
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()