def fleet_enable(bot, ievent): """ arguments: <list of botnames> - enable a fleet bot. """ if not ievent.rest: ievent.missing("<list of botnames>") return bots = ievent.rest.split() fleet = getfleet() for name in bots: bot = fleet.byname(name) if bot: bot.cfg.load_config() bot.cfg['disable'] = 0 if not bot.cfg.name: bot.cfg.name = name bot.cfg.save() ievent.reply('enabled %s' % name) #start_new_thread(bot.connect, ()) elif name in fleet.avail(): cfg = Config('fleet' + os.sep + stripname(name) + os.sep + 'config') cfg['disable'] = 0 if not cfg.name: cfg.name = name cfg.save() bot = fleet.makebot(cfg.type, cfg.name, cfg) if not bot: ievent.reply("can't make %s bot - %s" % (cfg.name, cfg.type)) return ievent.reply('enabled %s bot' % name) #start_new_thread(bot.start, ()) else: ievent.reply('no %s bot in fleet' % name)
def handle_fleetconnect(bot, ievent): """ arguments: <botname> - connect a fleet bot to it's server. """ try: botname = ievent.args[0] except IndexError: ievent.missing('<botname>') return try: fleet = getfleet() fleetbot = fleet.byname(botname) if fleetbot: start_new_thread(fleetbot.connect, ()) ievent.reply('%s connect thread started' % botname) else: ievent.reply("can't connect %s .. trying enable" % botname) cfg = Config('fleet' + os.sep + stripname(botname) + os.sep + 'config') cfg['disable'] = 0 if not cfg.name: cfg.name = botname cfg.save() bot = fleet.makebot(cfg.type, cfg.name, cfg) if bot: ievent.reply('enabled and started %s bot' % botname) start_new_thread(bot.start, ()) else: ievent.reply("can't make %s bot" % cfg.name) except Exception, ex: ievent.reply(str(ex))
def fleet_enable(bot, ievent): """ arguments: <list of botnames> - enable a fleet bot. """ if not ievent.rest: ievent.missing("<list of botnames>") return bots = ievent.rest.split() fleet = getfleet() for name in bots: bot = fleet.byname(name) if bot: bot.cfg.load() bot.cfg['disable'] = 0 if not bot.cfg.name: bot.cfg.name = name bot.cfg.save() ievent.reply('enabled %s' % name) #start_new_thread(bot.connect, ()) elif name in fleet.avail(): cfg = Config('fleet' + os.sep + stripname(name) + os.sep + 'config') cfg['disable'] = 0 if not cfg.name: cfg.name = name cfg.save() bot = fleet.makebot(cfg.type, cfg.name, cfg) if not bot: ievent.reply("can't make %s bot - %s" % (cfg.name, cfg.type)) ; return ievent.reply('enabled %s bot' % name) #start_new_thread(bot.start, ()) else: ievent.reply('no %s bot in fleet' % name)
def cchar(bot, ievent): from jsb.lib.config import Config try: cchar = bot.channels[ievent.channel]['cc'] except LookupError: cchar = Config()['defaultcc'] or '!' except TypeError: cchar = Config()['defaultcc'] or '!' return cchar
def makeconsoleconfig(opts=None, botname=None): """ make config file based on options. """ if not botname: botname = opts.name or "default-console" botname = stripname(botname) cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = "console" cfg.name = botname if opts and opts.loglevel: cfg.loglevel = opts.loglevel else: cfg.loglevel = cfg.loglevel or "error" return cfg
def __init__(self): self.hide = [] modname = whichplugin() logging.debug("persistconfig - module name is %s" % modname) self.plugname = modname.split('.')[-1] Config.__init__(self, 'plugs' + os.sep + modname, "config") self.modname = modname cmndname = "%s-cfg" % self.plugname logging.debug('persistconfig - added command %s (%s)' % (cmndname, self.plugname)) from jsb.lib.commands import cmnds, Command cmnds[cmndname] = Command(self.modname, cmndname, self.cmnd_cfg, ['OPER', ]) examples.add(cmndname, "%s configuration" % self.plugname, cmndname) cmndnamesave = cmndname + "save" cmnds[cmndnamesave] = Command(self.modname, cmndname, self.cmnd_cfgsave, ['OPER',]) examples.add(cmndnamesave, "save %s configuration" % self.plugname, cmndnamesave)
def bind(self): server = self.server elite = self.cfg['bindhost'] or Config()['bindhost'] if elite: try: self.oldsock.bind((elite, 0)) except socket.gaierror: logging.warn("%s - can't bind to %s" % (self.name, elite)) if not server: try: socket.inet_pton(socket.AF_INET6, self.server) except socket.error: pass else: server = self.server if not server: try: socket.inet_pton(socket.AF_INET, self.server) except socket.error: pass else: server = self.server if not server: ips = [] try: for item in socket.getaddrinfo(self.server, None): if item[0] in [socket.AF_INET, socket.AF_INET6 ] and item[1] == socket.SOCK_STREAM: ip = item[4][0] if ip not in ips: ips.append(ip) except socket.error: pass else: server = random.choice(ips) return server
def bind(self, bot=None, user=None, chan=None): """ bind event.bot event.user and event.chan to execute a command on it. """ target = self.auth assert target bot = bot or self.bot assert bot if not self.user and target: cfg = Config() if cfg.auto_register: bot.users.addguest(target) self.user = user or bot.users.getuser(target) logging.info("eventbase - binding user - %s - from %s" % (str(self.user), whichmodule())) if not self.chan: if chan: self.chan = chan elif self.channel: self.chan = ChannelBase(self.channel, bot.botname) elif self.userhost: self.chan = ChannelBase(self.userhost, bot.botname) logging.info("eventbase - binding channel - %s" % str(self.chan)) if not self.user: logging.info("eventbase - no %s user found .. setting nodispatch" % target) self.nodispatch = True self.prepare(bot) return self
def makeconsoleconfig(type, opts, botname=None): """ make config file based on options. """ if not botname: botname = opts.name or "default-%s" % str(type) botname = stripname(botname) cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = type cfg.botname = botname if opts.loglevel: cfg.loglevel = opts.loglevel else: cfg.loglevel = cfg.loglevel or "error" return cfg
def login(response, input={}): """ display start html so that bot output can follow. """ try: host = socket.gethostname() except AttributeError: if os.environ.get('HTTP_HOST'): host = os.environ['HTTP_HOST'] else: host = os.environ['SERVER_NAME'] template = LazyDict({ 'version': getversion(), 'host': host, 'color': Config().color or "#C54848" }) if input: template.update(input) temp = os.path.join(os.getcwd(), 'templates/login.html') outstr = template.render(temp) response.out.write(outstr)
def makeconsoleconfig(opts=None, botname=None): """ make config file based on options. """ if not botname: botname = opts.name or "default-console" botname = stripname(botname) from jsb.lib.config import Config cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = "console" cfg.name = botname if opts and opts.loglevel: cfg.loglevel = opts.loglevel else: cfg.loglevel = cfg.loglevel or "error" return cfg
def fleet_add(bot, ievent): """ arguments: <name> <type> <server>|<botjid> <nick>|<passwd> - add a newly created bot to the fleet. """ try: name, type, server, nick = ievent.rest.split() except ValueError: ievent.missing("<name> <type> <server>|<botjid> <nick>|<passwd>") ; return type = type.lower() fleet = getfleet() bot = fleet.byname(name) if bot: event.reply("%s bot already exists" % name) ; return cfg = Config('fleet' + os.sep + stripname(name) + os.sep + 'config') cfg.disable = 0 if type == "irc": cfg.port = 6667 cfg.server = server cfg.nick = nick elif type in ["xmpp", "sxmpp"]: cfg.port = 4442 cfg.host = server try: n, serv = cfg.host.split("@") except (ValueError, TypeError): pass cfg.server = serv cfg.password = nick cfg.save() bot = fleet.makebot(type, name, cfg) fleet.addbot(bot) if bot: ievent.reply('enabled and started %s bot - %s' % (name, cfg.filename)) start_new_thread(bot.start, ()) else: ievent.reply("can't make %s bot" % cfg.name)
def makexmppconfig(type, opts=None, botname=None): """ make config file based on options. """ if not opts: botname = botname or "default-sxmpp" else: if not botname: botname = opts.name or "default-sxmpp" botname = stripname(botname) cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = "sxmpp" cfg.botname = botname if not opts: cfg.user = "" cfg.host = "" cfg.password = "" cfg.server = "" cfg.jid = "" cfg.owner = [] cfg.loglevel = "warn" return cfg if opts.user: cfg.user = opts.user else: cfg.user = cfg.user or "*****@*****.**" % cfg.uuid if opts.user: try: cfg.host = opts.user.split('@')[1] except ValueError: print "user is not in the nick@server format" if not cfg.host: try: cfg.host = cfg.user.split('@')[1] except ValueError: print "user is not in the nick@server format" if opts.password: cfg.password = opts.password if opts.server: cfg.server = opts.server else: cfg.server = cfg.server or "localhost" if opts.name: cfg.jid = opts.name if not cfg.owner: cfg.owner = [] if opts.owner and opts.owner not in cfg.owner: cfg.owner.append(opts.owner) return cfg
def makesxmppconfig(opts=None, botname=None, type="sxmpp"): """ make config file based on options. """ if not opts: botname = botname or "default-%s" % type else: if not botname: botname = opts.name or "default-%s" % type botname = stripname(botname) from jsb.lib.config import Config, makedefaultconfig cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = type cfg.name = botname if not opts: cfg.user = cfg.user or "" cfg.host = cfg.host or "" cfg.password = cfg.password or "" cfg.server = cfg.server or "" cfg.owner = cfg.owner or [] cfg.loglevel = cfg.lowlevel or "warn" cfg.nick = cfg.nick or "jsb" cfg.channels = [] cfg.openfire = False return cfg if opts.openfire: cfg.openfire = True ; logging.warn("openfire mode is enabled") else: cfg.openfire = False ; logging.warn("openfire mode is disabled") if opts.doregister: cfg.doregister = True ; logging.warn("register mode is enabled") else: cfg.doregister = False ; logging.warn("register mode is disabled") if not cfg.disable: cfg.disable = False if not cfg.channels: cfg.channels = [] if opts.user: cfg.user = opts.user if not cfg.user: raise NoUserProvided("user is not provided .. try giving the -u option to the bot (and maybe -p as well) or run jsb-init and edit %s" % cfg.cfile) if opts.user: try: cfg.host = opts.user.split('@')[1] except (IndexError, ValueError): print "user is not in the nick@server format" if not cfg.host: try: cfg.host = cfg.user.split('@')[1] except (IndexError, ValueError): print "user is not in the nick@server format" if opts.password: cfg.password = opts.password if opts.server: cfg.server = opts.server else: cfg.server = cfg.server or "" if opts.name: cfg.jid = opts.name if not cfg.owner: cfg.owner = [] if opts.owner and opts.owner not in cfg.owner: cfg.owner.append(opts.owner) if not cfg.owner: raise NoOwnerSet("try using the -o option or run jsb-init and edit %s" % cfg.cfile) if opts.nick: cfg.nick = opts.nick else: cfg.nick = cfg.nick or "jsb" if opts.channel: if not opts.channel in cfg.channels: cfg.channels.append(opts.channel) else: cfg.channels = cfg.channels or [] return cfg
def makeircconfig(opts=None, botname=None): """ make config file based on options. """ if not opts: botname = botname or "default-irc" else: if not botname: botname = opts.name or "default-irc" botname = stripname(botname) from jsb.lib.config import Config cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = 'irc' cfg.name = botname if not opts: cfg.password = cfg.password or "" cfg.ssl = cfg.ssl or False cfg.port = cfg.port or 6667 cfg.server = cfg.server or "localhost" cfg.owner = cfg.owner or [] cfg.ipv6 = cfg.ipv6 or False cfg.nick = cfg.nick or "jsb" cfg.channels = [] return cfg if not cfg.channels: cfg.channels = [] if not cfg.disable: cfg.disable = False if opts.password: cfg.password = opts.password if opts.ipv6: cfg.ipv6 = True else: cfg.ipv6 = cfg.ipv6 or False if opts.ssl: cfg.ssl = True else: cfg.ssl = cfg.ssl or False if opts.nossl: cfg.ssl = False if opts.port: cfg.port = opts.port or cfg.port or 6667 else: cfg.port = cfg.port or 6667 if opts.server: cfg.server = opts.server else: cfg.server = cfg.server or "localhost" if not cfg.owner: cfg.owner = [] if opts.owner and opts.owner not in cfg.owner: cfg.owner.append(opts.owner) if opts.ipv6: cfg.ipv6 = opts.ipv6 if opts.nick: cfg.nick = opts.nick else: cfg.nick = cfg.nick or "jsb" if opts.username: cfg.username = opts.username else: cfg.username = cfg.username or "jsonbot" if opts.channel: if not opts.channel in cfg.channels: cfg.channels.append(opts.channel) else: cfg.channels = cfg.channels or [] return cfg
def makesxmppconfig(opts=None, botname=None): """ make config file based on options. """ if not opts: botname = botname or "default-sxmpp" else: if not botname: botname = opts.name or "default-sxmpp" botname = stripname(botname) cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = "sxmpp" cfg.name = botname if not opts: cfg.user = cfg.user or "" cfg.host = cfg.host or "" cfg.password = cfg.passord or "" cfg.server = cfg.server or "" cfg.owner = cfg.owner or [] cfg.loglevel = cfg.lowlevel or "warn" cfg.nick = cfg.nick or "jsb" cfg.channels = [] return cfg if not cfg.disable: cfg.disable = False if not cfg.channels: cfg.channels = [] if opts.user: cfg.user = opts.user else: cfg.user = cfg.user or "*****@*****.**" % cfg.uuid if opts.user: try: cfg.host = opts.user.split('@')[1] except (IndexError, ValueError): print "user is not in the nick@server format" if not cfg.host: try: cfg.host = cfg.user.split('@')[1] except (IndexError, ValueError): print "user is not in the nick@server format" if opts.password: cfg.password = opts.password if opts.server: cfg.server = opts.server else: cfg.server = cfg.server or "" if opts.name: cfg.jid = opts.name if not cfg.owner: cfg.owner = [] if opts.owner and opts.owner not in cfg.owner: cfg.owner.append(opts.owner) if opts.nick: cfg.nick = opts.nick else: cfg.nick = cfg.nick or "jsb" if opts.channel: if not opts.channel in cfg.channels: cfg.channels.append(opts.channel) else: cfg.channels = cfg.channels or [] return cfg
def boot(ddir=None, force=False, encoding="utf-8", umask=None, saveperms=True, fast=False): """ initialize the bot. """ logging.info("booting ..") from jsb.lib.datadir import getdatadir, setdatadir if ddir: setdatadir(ddir) origdir = ddir ddir = ddir or getdatadir() if not ddir: logging.error("can't determine datadir to boot from") os._exit(1) if not ddir in sys.path: sys.path.append(ddir) makedirs(ddir) if os.path.isdir("/var/run/jsb") and botuser() == "jsb": rundir = "/var/run/jsb" else: rundir = ddir + os.sep + "run" try: if os.getuid() == 0: print "don't run the bot as root" os._exit(1) except AttributeError: pass try: k = open(rundir + os.sep + 'jsb.pid', 'w') k.write(str(os.getpid())) k.close() except IOError: pass try: if not ongae: reload(sys) sys.setdefaultencoding(encoding) except (AttributeError, IOError): pass try: if not umask: checkpermissions(getdatadir(), 0700) else: checkpermissions(getdatadir(), umask) except: handle_exception() global loaded global cmndtable global pluginlist global callbacktable global cmndperms global plugcommands if not cmndtable: cmndtable = Persist(rundir + os.sep + 'cmndtable') if not pluginlist: pluginlist = Persist(rundir + os.sep + 'pluginlist') if not callbacktable: callbacktable = Persist(rundir + os.sep + 'callbacktable') if not cmndperms: cmndperms = Config('cmndperms', ddir=ddir) from jsb.lib.plugins import plugs if not cmndtable.data or force: plugs.loadall(plugin_packages, force=True) loaded = True savecmndtable(saveperms=saveperms) if not pluginlist.data or force: if not loaded: plugs.loadall(plugin_packages, force=True) loaded = True savepluginlist() if not callbacktable.data or force: if not loaded: plugs.loadall(plugin_packages, force=True) loaded = True savecallbacktable() if not loaded: logging.info("boot - plugins not loaded .. loading defaults") for plug in default_plugins: plugs.reload(plug, showerror=True, force=True) if not fast: if ongae: plugs.loadall(["myplugs.gae", "jsb.plugs.myplugs"], force=True) else: plugs.loadall(["myplugs.socket", "jsb.plugs.myplugs"], force=True) else: logging.error("skipped loading of myplugs") logging.warn("boot - done")
def makesxmppconfig(opts=None, botname=None, type="sxmpp"): """ make config file based on options. """ if not opts: botname = botname or "default-%s" % type else: if not botname: botname = opts.name or "default-%s" % type botname = stripname(botname) from jsb.lib.config import Config, makedefaultconfig cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = type cfg.name = botname if not opts: cfg.user = cfg.user or "" cfg.host = cfg.host or "" cfg.password = cfg.password or "" cfg.server = cfg.server or "" cfg.owner = cfg.owner or [] cfg.loglevel = cfg.lowlevel or "warn" cfg.nick = cfg.nick or "jsb" cfg.channels = [] cfg.openfire = False return cfg if opts.openfire: cfg.openfire = True logging.warn("openfire mode is enabled") else: cfg.openfire = False logging.warn("openfire mode is disabled") if opts.doregister: cfg.doregister = True logging.warn("register mode is enabled") else: cfg.doregister = False logging.warn("register mode is disabled") if opts.enable: cfg.disable = 0 logging.warn("enabling %s bot in %s" % (botname, cfg.cfile)) if not cfg.channels: cfg.channels = [] if opts.user: cfg.user = opts.user if not cfg.user: raise NoUserProvided( "user is not provided .. try giving the -u option to the bot (and maybe -p as well) or run jsb-init and edit %s" % cfg.cfile) if opts.user: try: cfg.host = opts.user.split('@')[1] except (IndexError, ValueError): print "user is not in the nick@server format" if not cfg.host: try: cfg.host = cfg.user.split('@')[1] except (IndexError, ValueError): print "user is not in the nick@server format" if opts.password: cfg.password = opts.password if opts.server: cfg.server = opts.server else: cfg.server = cfg.server or "" if opts.name: cfg.jid = opts.name if not cfg.owner: cfg.owner = [] if opts.owner and opts.owner not in cfg.owner: cfg.owner.append(opts.owner) if not cfg.owner: raise NoOwnerSet( "try using the -o option or run jsb-init and edit %s" % cfg.cfile) if opts.nick: cfg.nick = opts.nick else: cfg.nick = cfg.nick or "jsb" if opts.channel: if not opts.channel in cfg.channels: cfg.channels.append(opts.channel) else: cfg.channels = cfg.channels or [] return cfg
def makeircconfig(type=None, opts=None, botname=None): """ make config file based on options. """ if not opts: botname = botname or "default-irc" else: if not botname: botname = opts.name or "default-irc" botname = stripname(botname) cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = 'irc' cfg.botname = botname if not opts: cfg.password = "" cfg.ssl = False cfg.port = 6667 cfg.server = "localhost" cfg.owner = [] cfg.ipv6 = False return cfg if opts.password: cfg.password = opts.password if opts.ssl: cfg.ssl = True if opts.nossl: cfg.ssl = False if opts.port: cfg.port = opts.port else: cfg.port = 6667 if opts.server: cfg.server = opts.server else: cfg.server = cfg.server or "localhost" if not cfg.owner: cfg.owner = [] if opts.owner and opts.owner not in cfg.owner: cfg.owner.append(opts.owner) if opts.ipv6: cfg.ipv6 = opts.ipv6 return cfg
def makeircconfig(opts=None, botname=None): """ make config file based on options. """ if not opts: botname = botname or "default-irc" else: if not botname: botname = opts.name or "default-irc" botname = stripname(botname) from jsb.lib.config import Config cfg = Config('fleet' + os.sep + botname + os.sep + 'config') cfg.type = 'irc' cfg.name = botname if not opts: cfg.password = cfg.password or "" cfg.ssl = cfg.ssl or False cfg.port = cfg.port or 6667 cfg.server = cfg.server or "localhost" cfg.owner = cfg.owner or [] cfg.ipv6 = cfg.ipv6 or False cfg.nick = cfg.nick or "jsb" cfg.channels = [] return cfg if not cfg.channels: cfg.channels = [] if opts.enable: cfg.disable = 0 logging.warn("enabling %s bot in %s" % (botname, cfg.cfile)) if opts.password: cfg.password = opts.password if opts.ipv6: cfg.ipv6 = True else: cfg.ipv6 = cfg.ipv6 or False if opts.ssl: cfg.ssl = True else: cfg.ssl = cfg.ssl or False if opts.nossl: cfg.ssl = False if opts.port: cfg.port = opts.port or cfg.port or 6667 else: cfg.port = cfg.port or 6667 if opts.server: cfg.server = opts.server else: cfg.server = cfg.server or "localhost" if not cfg.owner: cfg.owner = [] if opts.owner and opts.owner not in cfg.owner: cfg.owner.append(opts.owner) if opts.ipv6: cfg.ipv6 = opts.ipv6 if opts.nick: cfg.nick = opts.nick else: cfg.nick = cfg.nick or "jsb" if opts.username: cfg.username = opts.username else: cfg.username = cfg.username or "jsonbot" if opts.channel: if not opts.channel in cfg.channels: cfg.channels.append(opts.channel) else: cfg.channels = cfg.channels or [] return cfg
def fleet_add(bot, ievent): """ arguments: <name> <type> <server>|<botjid> <nick>|<jabberpasswd> [<ircpass>] - add a newly created bot to the fleet. """ try: name, type, server, nick, password = ievent.rest.split() except ValueError: try: name, type, server, nick = ievent.rest.split() password = "" except ValueError: ievent.missing( "<name> <type> <server>|<botjid> <nick>|<jabberpass> [<ircpasswd>]" ) return type = type.lower() fleet = getfleet() bot = fleet.byname(name) if bot: ievent.reply("%s bot already exists" % name) return cfg = Config('fleet' + os.sep + stripname(name) + os.sep + 'config') cfg.disable = 0 if type == "irc": cfg.port = 6667 cfg.server = server cfg.nick = nick cfg.password = password elif type in ["xmpp", "sxmpp"]: cfg.port = 4442 cfg.host = server try: n, serv = cfg.host.split("@") except (ValueError, TypeError): pass cfg.server = serv cfg.password = nick cfg.save() bot = fleet.makebot(type, name, cfg) fleet.addbot(bot) if bot: ievent.reply('enabled and started %s bot - %s' % (name, cfg.filename)) start_new_thread(bot.start, ()) else: ievent.reply("can't make %s bot" % cfg.name)
def boot(ddir=None, force=False, encoding="utf-8", umask=None, saveperms=True, fast=False, clear=False, loadall=False): """ initialize the bot. """ global plugin_packages try: if os.getuid() == 0: print "don't run the bot as root" os._exit(1) except AttributeError: pass from jsb.lib.datadir import getdatadir, setdatadir if ddir: setdatadir(ddir) origdir = ddir ddir = ddir or getdatadir() if not ddir: logging.error("can't determine datadir to boot from") raise Exception("can't determine datadir") if not ddir in sys.path: sys.path.append(ddir) makedirs(ddir) if os.path.isdir("/var/run/jsb") and botuser() == "jsb": rundir = "/var/run/jsb" else: rundir = ddir + os.sep + "run" try: k = open(rundir + os.sep + 'jsb.pid', 'w') k.write(str(os.getpid())) k.close() except IOError: pass try: reload(sys) sys.setdefaultencoding(encoding) except (AttributeError, IOError): handle_exception() try: if not umask: checkpermissions(getdatadir(), 0700) else: checkpermissions(getdatadir(), umask) except: handle_exception() from jsb.lib.plugins import plugs global loaded global cmndtable global retable global pluginlist global callbacktable global shorttable global cmndperms global timestamps global plugwhitelist global plugblacklist if not retable: retable = Persist(rundir + os.sep + 'retable') if clear: retable.data = {} if not cmndtable: cmndtable = Persist(rundir + os.sep + 'cmndtable') if clear: cmndtable.data = {} if not pluginlist: pluginlist = Persist(rundir + os.sep + 'pluginlist') if clear: pluginlist.data = [] if not callbacktable: callbacktable = Persist(rundir + os.sep + 'callbacktable') if clear: callbacktable.data = {} if not shorttable: shorttable = Persist(rundir + os.sep + 'shorttable') if clear: shorttable.data = {} if not timestamps: timestamps = Persist(rundir + os.sep + 'timestamps') if not plugwhitelist: plugwhitelist = Persist(rundir + os.sep + 'plugwhitelist') if not plugwhitelist.data: plugwhitelist.data = [] if not plugblacklist: plugblacklist = Persist(rundir + os.sep + 'plugblacklist') if not plugblacklist.data: plugblacklist.data = [] if not cmndperms: cmndperms = Config('cmndperms', ddir=ddir) changed = [] gotlocal = False dosave = clear or False maincfg = getmainconfig(ddir=ddir) logging.warn("mainconfig used is %s" % maincfg.cfile) if os.path.isdir('jsb'): gotlocal = True packages = find_packages("jsb" + os.sep + "plugs") pluglist = [x for x in packages if not 'db' in x] for p in pluglist: if p not in plugin_packages: plugin_packages.append(p) for plug in default_plugins: plugs.reload(plug, showerror=True, force=True) changed = scandir(getdatadir() + os.sep + 'myplugs', dbenable=maincfg.dbenable) if changed: logging.debug("myplugs has changed -=- %s" % str(changed)) for plugfile in changed: if "gae" in plugfile: continue try: plugs.reloadfile(plugfile, force=True) except Exception, ex: handle_exception() dosave = True
def fleet_add(bot, ievent): """ add a fleet bot. """ try: name, type, server, nick = ievent.rest.split() except ValueError: ievent.missing("<name> <type> <server>|<botjid> <nick>|<passwd>") return bots = ievent.rest.split() fleet = getfleet() bot = fleet.byname(name) if bot: event.reply("%s bot already exists" % name) return cfg = Config('fleet' + os.sep + stripname(name) + os.sep + 'config') cfg.disable = 0 if type == "irc": cfg.port = 6667 cfg.server = server cfg.nick = nick elif type in ["xmpp", "sxmpp"]: cfg.port = 4442 cfg.host = server try: n, serv = cfg.host.split("@") except (ValueError, TypeError): pass cfg.server = serv cfg.password = nick cfg.save() bot = fleet.makebot(type, name, cfg) ievent.reply('enabled and started %s bot - %s' % (name, cfg.filename)) start_new_thread(bot.start, ())