12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import importlib
- import db
- from config import PLUGINS, BOTS_LOOKUP
- class Rollbot:
- def __init__(self, logger):
- self.logger = logger
- self.commands = {}
- self.logger.info("Loading command plugins")
- for module, classes in PLUGINS.items():
- plugin_module = importlib.import_module("plugins." + module)
- for class_name in classes:
- plugin_class = getattr(plugin_module, class_name)
- plugin_instance = plugin_class(logger)
- self.commands[plugin_instance.command] = plugin_instance
- self.logger.info(f"Finished loading plugins, {len(self.commands)} commands found")
- self.logger.info("Initializing database tables")
- db.init_db()
- self.logger.info("Finished initializing database")
- def start_plugins(self):
- self.logger.info("Starting all plugins")
- with db.session_scope() as session:
- for plugin_instance in self.commands.values():
- plugin_instance.on_start(session)
- self.logger.info("Finished starting plugins")
- def shutdown_plugins(self):
- self.logger.info("Shutting down all plugins")
- with db.session_scope() as session:
- for plugin_instance in self.commands.values():
- plugin_instance.on_shutdown(session)
- self.logger.info("Finished shutting down plugins")
- def run_command(self, message):
- if not message.is_command:
- self.logger.warn(f"Tried to run non-command message {message.message_id}")
- return
- plugin = self.commands.get(message.command, None)
- if plugin is None:
- response = RollbotResponse(message, failure_reason=RollbotFailure.INVALID_COMMAND)
- else:
- with db.session_scope() as session:
- response = plugin.on_command(session, message)
- if not response.is_success:
- self.logger.warn(f"Message {message.message_id} caused failure")
- self.logger.warn(response.info)
- return response
|