diff --git a/funguy.py b/funguy.py index 288788b..156abd8 100755 --- a/funguy.py +++ b/funguy.py @@ -6,35 +6,31 @@ import logging import importlib import simplematrixbotlib as botlib from dotenv import load_dotenv +import time import sys from plugins.config import FunguyConfig class FunguyBot: + + bot = None + config = None + def __init__(self): - # Setup logging - logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=logging.INFO) - - # Load environment variables from .env file - load_dotenv() - - # Bot configuration settings self.PLUGINS_DIR = "plugins" self.PLUGINS = {} - self.config = FunguyConfig() - - # Load plugins + self.config = None + self.bot = None + self.load_dotenv() + self.setup_logging() self.load_plugins() + self.load_config() - # Bot configuration settings - self.MATRIX_URL = os.getenv("MATRIX_URL") - self.MATRIX_USER = os.getenv("MATRIX_USER") - self.MATRIX_PASS = os.getenv("MATRIX_PASS") + def load_dotenv(self): + load_dotenv() - # Get credentials from env - creds = botlib.Creds(self.MATRIX_URL, self.MATRIX_USER, self.MATRIX_PASS) - - # Bot initialization - self.bot = botlib.Bot(creds, self.config) + def setup_logging(self): + logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=logging.INFO) + logging.getLogger().setLevel(logging.INFO) def load_plugins(self): for plugin_file in os.listdir(self.PLUGINS_DIR): @@ -47,25 +43,23 @@ class FunguyBot: except Exception as e: logging.error(f"Error loading plugin {plugin_name}: {e}") - async def reload_plugins(self, room_id): + def reload_plugins(self): self.PLUGINS = {} # Unload modules from sys.modules for plugin_name in list(sys.modules.keys()): if plugin_name.startswith(self.PLUGINS_DIR + "."): del sys.modules[plugin_name] self.load_plugins() - await self.bot.api.send_text_message(room_id, "Plugins reloaded successfully") - async def rehash_config(self, room_id): - del self.config + def load_config(self): self.config = FunguyConfig() - await self.bot.api.send_text_message(room_id, "Config rehashed") async def handle_commands(self, room, message): match = botlib.MessageMatch(room, message, self.bot, self.config.prefix) if match.is_not_from_this_bot() and match.prefix() and match.command("reload"): if str(message.sender) == self.config.admin_user: - await self.reload_plugins(room.room_id) + self.reload_plugins() + await self.bot.api.send_text_message(room.room_id, "Plugins reloaded successfully") else: await self.bot.api.send_text_message(room.room_id, "You are not authorized to reload plugins.") @@ -74,11 +68,28 @@ class FunguyBot: if match.is_not_from_this_bot() and match.prefix() and match.command("rehash"): if str(message.sender) == self.config.admin_user: - await self.rehash_config(room.room_id) + self.rehash_config() + await self.bot.api.send_text_message(room.room_id, "Config rehashed") else: - await self.bot.api.send_text_message(room.room_id, "You are not authorized to rehash config.") + await self.bot.api.send_text_message(room.room_id, "You are not authorized to reload plugins.") + def rehash_config(self): + del self.config + self.config = FunguyConfig() + + def run(self): + MATRIX_URL = os.getenv("MATRIX_URL") + MATRIX_USER = os.getenv("MATRIX_USER") + MATRIX_PASS = os.getenv("MATRIX_PASS") + creds = botlib.Creds(MATRIX_URL, MATRIX_USER, MATRIX_PASS) + self.bot = botlib.Bot(creds, self.config) + + @self.bot.listener.on_message_event + async def wrapper_handle_commands(room, message): + await self.handle_commands(room, message) + + self.bot.run() if __name__ == "__main__": bot = FunguyBot() - bot.bot.run() + bot.run()