import teambot, sys, traceback, plugin, os import impmod BOTOP = "khuxkm@sudoers.tilde.team" PLUGIN_MODULES = dict() PLUGIN_SPECS = dict() class MinerbotPhoenix(teambot.Handler): prefix="!" nick="minerbot2" def on_connection_established(self,*args): self.load_modules() self._bot.conn.mode(self.nick,"+B") def load_modules(self): plugin.clear() for name in os.listdir("plugins"): if name.endswith(".py"): bot.handler.load_module(name[:-3],os.path.join("plugins",name)) def load_module(self,modname,path): try: if modname in PLUGIN_MODULES: print("{} already imported, reloading".format(modname)) PLUGIN_MODULES[modname].reload() return try: print("importing {}".format(modname)) PLUGIN_MODULES[modname]=impmod.Module(modname,path) except: print("Unable to load plugin {}".format(modname)) traceback.print_exc() except: traceback.print_exc() pass def on_pubmsg(self,channel,nick,message): self.is_admin = self.event.source.userhost == BOTOP try: for listener in plugin.listeners: try: plugin.listeners[listener](self,channel,nick,message) except: print("On listener `{}`:".format(listener)) traceback.print_exc() except: print("KERNAL PANIC") traceback.print_exc() if not message.startswith(self.prefix): return args = message[len(self.prefix):].split(" ") cmd = args.pop(0).lower() self.cmd = cmd if cmd in plugin.cmds: try: plugin.cmds[cmd](self,channel,nick,*args) except TypeError: self.say(channel,"Usage: {}{} {}".format(self.prefix,cmd,plugin.help.get(cmd,""))) except Exception as e: errcls,err,tb = sys.exc_info() self.say(channel,"ACCESS VIOLATION: "+traceback.format_exception_only(errcls,err)[0].strip()) print("On command `{}{} {}` by {}:".format(self.prefix,cmd," ".join(args),self.event.source)) traceback.print_exc() if __name__=="__main__": channels = "#bots".split() bot = teambot.TeamBot(channels,"minerbot2","localhost",chandler=MinerbotPhoenix) bot.handler.load_modules() bot.start()