def status(self, mess, args): """ If I am alive I should be able to respond to this one """ all_blacklisted = holder.bot.get_blacklisted_plugin() all_loaded = get_all_active_plugin_names() all_attempted = sorted([p.name for p in holder.bot.all_candidates]) plugins_statuses = [] for name in all_attempted: if name in all_blacklisted: if name in all_loaded: plugins_statuses.append(('BL', get_plugin_by_name(name).category, name)) else: plugins_statuses.append(('BU', name)) elif name in all_loaded: plugins_statuses.append(('L', get_plugin_by_name(name).category, name)) elif get_plugin_obj_by_name(name) is not None: plugins_statuses.append(('C', get_plugin_by_name(name).category, name)) else: plugins_statuses.append(('U', name)) #noinspection PyBroadException try: from posix import getloadavg loads = getloadavg() except Exception as _: loads = None # plugins_statuses = sorted(plugins_statuses, key=lambda c: c[2]) return {'plugins': plugins_statuses, 'loads': loads, 'gc': gc.get_count()}
def activate_plugin(self, name): try: if name in get_all_active_plugin_names(): return "Plugin already in active list" if name not in get_all_plugin_names(): return "I don't know this %s plugin" % name activate_plugin_by_name(name) except Exception as e: logger.exception("Error loading %s" % name) return '%s failed to start : %s\n' % (name, e) get_plugin_obj_by_name(name).callback_connect() return "Plugin %s activated" % name
def unload(self, mess, args): """unload a plugin""" args = args.strip() if not args: return ("Please tell me which of the following plugin to reload:\n" "{}".format(holder.bot.formatted_plugin_list(active_only=False))) if args not in get_all_plugin_names(): return ("{} isn't a valid plugin names. The current plugin are:\n" "{}".format(args, holder.bot.formatted_plugin_list(active_only=False))) if args not in get_all_active_plugin_names(): return "{} is not currently loaded".format(args) return holder.bot.deactivate_plugin(args)
def formatted_plugin_list(active_only=True): """ Return a formatted, plain-text list of loaded plugins. When active_only=True, this will only return plugins which are actually active. Otherwise, it will also include inactive (blacklisted) plugins. """ if active_only: all_plugins = get_all_active_plugin_names() else: all_plugins = get_all_plugin_names() return "\n".join(("- " + plugin for plugin in all_plugins))
def deactivate_plugin(self, name): if name not in get_all_active_plugin_names(): return "Plugin %s not in active list" % name deactivate_plugin_by_name(name) return "Plugin %s deactivated" % name