def initialize_logging(): if not runtime_settings.use_logging: return from logging.handlers import RotatingFileHandler # Initialize logging directory if unavailable. if global_settings.cfg.get(C_LOGGING, P_LOG_DIR, fallback=None): from JJMumbleBot.lib.utils import dir_utils dir_utils.make_directory(global_settings.cfg[C_LOGGING][P_LOG_DIR]) else: from JJMumbleBot.lib.utils import dir_utils dir_utils.make_directory(f'{dir_utils.get_main_dir()}/cfg/logs') global_settings.cfg[C_LOGGING][P_LOG_DIR] = f'{dir_utils.get_main_dir()}/cfg/logs' logging.getLogger('chardet.charsetprober').setLevel(logging.INFO) log_file_name = f"{global_settings.cfg[C_LOGGING][P_LOG_DIR]}/runtime.log" global_settings.log_service = logging.getLogger("RuntimeLogging") global_settings.log_service.setLevel(logging.DEBUG) handler = RotatingFileHandler(log_file_name, maxBytes=int(runtime_settings.max_log_size), backupCount=int(runtime_settings.max_logs)) handler.setLevel(logging.INFO) log_formatter = logging.Formatter('[%(asctime)s]-[%(levelname)s]-%(message)s') handler.setFormatter(log_formatter) global_settings.log_service.addHandler(handler)
def __init__(self): super().__init__() from json import loads self.plugin_name = os.path.basename(__file__).rsplit('.')[0] self.metadata = PluginUtilityService.process_metadata( f'plugins/extensions/{self.plugin_name}') self.plugin_cmds = loads( self.metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) dir_utils.make_directory( f'{gs.cfg[C_MEDIA_SETTINGS][P_PERM_MEDIA_DIR]}/{self.plugin_name}/' ) rprint( f"{self.metadata[C_PLUGIN_INFO][P_PLUGIN_NAME]} v{self.metadata[C_PLUGIN_INFO][P_PLUGIN_VERS]} Plugin Initialized." )
def save_user_connections(): try: if not path.exists(f'{dir_utils.get_plugin_data_dir()}/{settings.plugin_name}/'): dir_utils.make_directory(f'{dir_utils.get_plugin_data_dir()}/{settings.plugin_name}/') with open(f'{dir_utils.get_plugin_data_dir()}/{settings.plugin_name}/user_connections.csv', mode='w') as csv_file: csv_writer = csv.DictWriter(csv_file, fieldnames=['username', 'track']) csv_writer.writeheader() for user in settings.user_connections: csv_writer.writerow({'username': user, 'track': settings.user_connections[user]}) return True except IOError: log(ERROR, f"Encountered an error reading/writing the user_connections.csv file.", origin=L_COMMAND, error_type=GEN_PROCESS_ERR, print_mode=PrintMode.VERBOSE_PRINT.value) return False
def __init__(self): super().__init__() from json import loads self.plugin_name = path.basename(__file__).rsplit('.')[0] self.metadata = PluginUtilityService.process_metadata( f'plugins/extensions/{self.plugin_name}') self.plugin_cmds = loads( self.metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) self.is_running = True dir_utils.make_directory( f'{gs.cfg[C_MEDIA_SETTINGS][P_PERM_MEDIA_DIR]}/{self.plugin_name}/' ) log(INFO, f"{self.metadata[C_PLUGIN_INFO][P_PLUGIN_NAME]} v{self.metadata[C_PLUGIN_INFO][P_PLUGIN_VERS]} Plugin Initialized.", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value)
def read_user_connections(): try: if not path.exists(f'{dir_utils.get_plugin_data_dir()}/{settings.plugin_name}/'): dir_utils.make_directory(f'{dir_utils.get_plugin_data_dir()}/{settings.plugin_name}/') create_empty_user_connections() with open(f'{dir_utils.get_plugin_data_dir()}/{settings.plugin_name}/user_connections.csv', mode='r') as csv_file: settings.user_connections = {} csv_reader = csv.DictReader(csv_file) for row in csv_reader: settings.user_connections[row['username']] = row['track'] return True except IOError: log(ERROR, f"Encountered an error reading/writing the user_connections.csv file.", origin=L_COMMAND, error_type=GEN_PROCESS_ERR, print_mode=PrintMode.VERBOSE_PRINT.value) return False
def __init__(self): super().__init__() from json import loads self.plugin_name = os.path.basename(__file__).rsplit('.')[0] self.metadata = PluginUtilityService.process_metadata(f'plugins/extensions/{self.plugin_name}') self.plugin_cmds = loads(self.metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) self.is_running = True dir_utils.make_directory(f'{gs.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/{self.plugin_name}/') dir_utils.clear_directory(f'{dir_utils.get_temp_med_dir()}/{self.plugin_name}') warnings.filterwarnings("ignore", category=UserWarning, module='bs4') log( INFO, f"{self.metadata[C_PLUGIN_INFO][P_PLUGIN_NAME]} v{self.metadata[C_PLUGIN_INFO][P_PLUGIN_VERS]} Plugin Initialized.", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value )
def __init__(self): super().__init__() from json import loads self.plugin_name = os.path.basename(__file__).rsplit('.')[0] self.metadata = PluginUtilityService.process_metadata(f'plugins/extensions/{self.plugin_name}') self.plugin_cmds = loads(self.metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) dir_utils.make_directory(f'{GS.cfg[C_MEDIA_DIR][P_TEMP_MED_DIR]}/{self.plugin_name}/') warnings.filterwarnings("ignore", category=UserWarning, module='bs4') YH.yt_metadata = self.metadata YH.volume = float(self.metadata[C_PLUGIN_SETTINGS][P_YT_DEF_VOL]) YH.max_queue_size = int(self.metadata[C_PLUGIN_SETTINGS][P_YT_MAX_QUE_LEN]) YH.max_track_duration = int(self.metadata[C_PLUGIN_SETTINGS][P_YT_MAX_VID_LEN]) YH.autoplay = self.metadata.getboolean(C_PLUGIN_SETTINGS, P_YT_AUTO_PLAY, fallback=True) YH.queue_instance = qh.QueueHandler(YH.max_queue_size) rprint( f"{self.metadata[C_PLUGIN_INFO][P_PLUGIN_NAME]} v{self.metadata[C_PLUGIN_INFO][P_PLUGIN_VERS]} Plugin Initialized.")
def __init__(self): from json import loads super().__init__() self.plugin_name = os.path.basename(__file__).rsplit('.')[0] self.metadata = PluginUtilityService.process_metadata( f'plugins/extensions/{self.plugin_name}') self.plugin_cmds = loads( self.metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) dir_utils.make_directory( f'{GS.cfg[C_MEDIA_DIR][P_PERM_MEDIA_DIR]}/{self.plugin_name}/') dir_utils.make_directory( f'{GS.cfg[C_MEDIA_DIR][P_TEMP_MED_DIR]}/{self.plugin_name}/') tts_settings.tts_metadata = self.metadata tts_settings.voice_list = loads( self.metadata.get(C_PLUGIN_SETTINGS, P_TTS_ALL_VOICE)) rprint( f"{self.metadata[C_PLUGIN_INFO][P_PLUGIN_NAME]} v{self.metadata[C_PLUGIN_INFO][P_PLUGIN_VERS]} Plugin Initialized." )
def __init__(self): super().__init__() from json import loads self.plugin_name = os.path.basename(__file__).rsplit('.')[0] self.metadata = PluginUtilityService.process_metadata( f'plugins/extensions/{self.plugin_name}') self.plugin_cmds = loads( self.metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) dir_utils.make_directory( f'{gs.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/{self.plugin_name}/') dir_utils.clear_directory( f'{dir_utils.get_temp_med_dir()}/{self.plugin_name}') warnings.filterwarnings("ignore", category=UserWarning, module='bs4') md_settings.youtube_metadata = self.metadata md_settings.plugin_name = self.plugin_name self.register_callbacks() rprint( f"{self.metadata[C_PLUGIN_INFO][P_PLUGIN_NAME]} v{self.metadata[C_PLUGIN_INFO][P_PLUGIN_VERS]} Plugin Initialized." )
def __init__(self): super().__init__() from json import loads self.plugin_name = path.basename(__file__).rsplit('.')[0] self.metadata = PluginUtilityService.process_metadata(f'plugins/core/{self.plugin_name}') self.plugin_cmds = loads(self.metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) dir_utils.make_directory(f'{gs.cfg[C_MEDIA_SETTINGS][P_PERM_MEDIA_DIR]}/{self.plugin_name}/') dir_utils.make_directory(f'{gs.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/{self.plugin_name}/') self.is_running = True st_settings.server_tools_metadata = self.metadata st_settings.plugin_name = self.plugin_name if not st_utility.create_empty_user_connections(): self.quit() self.register_callbacks() log( INFO, f"{self.metadata[C_PLUGIN_INFO][P_PLUGIN_NAME]} v{self.metadata[C_PLUGIN_INFO][P_PLUGIN_VERS]} Plugin Initialized.", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value )
def read_user_connections(): try: if not path.exists( f'{dir_utils.get_main_dir()}/cfg/plugins/{settings.plugin_name}/' ): dir_utils.make_directory( f'{dir_utils.get_main_dir()}/cfg/plugins/{settings.plugin_name}/' ) create_empty_user_connections() with open( f'{dir_utils.get_main_dir()}/cfg/plugins/{settings.plugin_name}/user_connections.csv', mode='r') as csv_file: settings.user_connections = {} csv_reader = csv.DictReader(csv_file) for row in csv_reader: settings.user_connections[row['username']] = row['track'] return True except IOError: return False
def create_new_template(plugin_name: str): formatted_name = plugin_name.strip().replace(" ", "_") dir_utils.make_directory(f'{dir_utils.get_main_dir()}/user_generated/plugins/{formatted_name}') dir_utils.clear_directory(f'{dir_utils.get_main_dir()}/user_generated/plugins/{formatted_name}') with open( f'{dir_utils.get_main_dir()}/user_generated/plugins/{formatted_name}/{formatted_name.lower()}.py', 'w+') as f: f.write(py_template) with open( f'{dir_utils.get_main_dir()}/user_generated/plugins/{formatted_name}/help.html', 'w+') as f: f.write(help_template) with open( f'{dir_utils.get_main_dir()}/user_generated/plugins/{formatted_name}/metadata.ini', 'w+') as f: f.write(meta_template) with open( f'{dir_utils.get_main_dir()}/user_generated/plugins/{formatted_name}/privileges.csv', 'w+') as f: f.write(priv_template)
def save_user_connections(): try: if not path.exists( f'{dir_utils.get_main_dir()}/cfg/plugins/{settings.plugin_name}/' ): dir_utils.make_directory( f'{dir_utils.get_main_dir()}/cfg/plugins/{settings.plugin_name}/' ) with open( f'{dir_utils.get_main_dir()}/cfg/plugins/{settings.plugin_name}/user_connections.csv', mode='w') as csv_file: csv_writer = csv.DictWriter(csv_file, fieldnames=['username', 'track']) csv_writer.writeheader() for user in settings.user_connections: csv_writer.writerow({ 'username': user, 'track': settings.user_connections[user] }) return True except IOError: return False
def __init__(self): # Initialize bot services. global_settings.bot_service = self # Initialize user settings. BotServiceHelper.initialize_settings() # Initialize logging services. initialize_logging() log(INFO, "###########################") log(INFO, "Initializing JJMumbleBot...") # Check and classify system arguments. import JJMumbleBot.core.cla_classifier as cla cla.classify() # Initialize up-time tracking. runtime_helper.start_time = datetime.now() # Set maximum multi-command limit. runtime_settings.multi_cmd_limit = int( global_settings.cfg[C_MAIN_SETTINGS][P_CMD_MULTI_LIM]) # Initialize command queue limit. global_settings.cmd_queue = QueueHandler(runtime_settings.cmd_hist_lim) # Initialize command history tracking. global_settings.cmd_history = CMDQueue(runtime_settings.cmd_hist_lim) # Initialize bot database. global_settings.mumble_db = init_database() # Initialize major directories. dir_utils.make_directory( global_settings.cfg[C_MEDIA_DIR][P_TEMP_MED_DIR]) dir_utils.make_directory( f'{global_settings.cfg[C_MEDIA_DIR][P_TEMP_MED_DIR]}/internal/images' ) dir_utils.make_directory( f'{global_settings.cfg[C_MEDIA_DIR][P_TEMP_MED_DIR]}/internal/audio' ) log(INFO, "Initialized temporary directories.") # Initialize PGUI system. global_settings.gui_service = PseudoGUI() log(INFO, "Initialized PGUI.") # Initialize plugins. if global_settings.safe_mode: BotServiceHelper.initialize_plugins_safe() runtime_settings.tick_rate = 0.2 log(INFO, "Initialized plugins with safe mode.") else: BotServiceHelper.initialize_plugins() log(INFO, "Initialized all plugins.") log(INFO, "###########################") # Retrieve mumble client data from configs. mumble_login_data = BotServiceHelper.retrieve_mumble_data() BotService.initialize_mumble(mumble_login_data) # Start runtime loop. BotService.loop()
def __init__(self): # Initialize bot services. global_settings.bot_service = self # Initialize user settings. BotServiceHelper.initialize_settings() # Initialize logging services. initialize_logging() log(INFO, "######### Initializing JJMumbleBot #########", origin=L_STARTUP) rprint("######### Initializing JJMumbleBot #########", origin=L_STARTUP) # Initialize up-time tracking. runtime_settings.start_time = datetime.now() # Set maximum multi-command limit. runtime_settings.multi_cmd_limit = int( global_settings.cfg[C_MAIN_SETTINGS][P_CMD_MULTI_LIM]) # Initialize command queue limit. global_settings.cmd_queue = QueueHandler( [], maxlen=runtime_settings.cmd_queue_lim) # Initialize command history tracking. global_settings.cmd_history = CMDQueue(runtime_settings.cmd_hist_lim) log(INFO, "######### Initializing Internal Database #########", origin=L_DATABASE) rprint("######### Initializing Internal Database #########", origin=L_DATABASE) # Back up internal database. if global_settings.cfg.getboolean(C_MAIN_SETTINGS, P_DB_BACKUP, fallback=False): db_backup = BotServiceHelper.backup_database() if db_backup: log(INFO, f"Created internal database backup @ {db_backup}", origin=L_DATABASE) rprint(f"Created internal database backup @ {db_backup}", origin=L_DATABASE) # Initialize internal database. global_settings.mumble_db = init_database() log(INFO, "######### Initialized Internal Database #########", origin=L_DATABASE) rprint("######### Initialized Internal Database #########", origin=L_DATABASE) # Initialize major directories. dir_utils.make_directory( global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]) dir_utils.make_directory( f'{global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/internal/images' ) dir_utils.make_directory( f'{global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/internal/audio' ) log(INFO, "Initialized Temporary Directories.", origin=L_STARTUP) rprint("Initialized Temporary Directories.", origin=L_STARTUP) # Initialize PGUI system. global_settings.gui_service = PseudoGUI() log(INFO, "Initialized PGUI.", origin=L_STARTUP) rprint("Initialized PGUI.", origin=L_STARTUP) # Initialize VLC interface. global_settings.vlc_interface = VLCInterface() # Initialize plugins. if global_settings.safe_mode: BotServiceHelper.initialize_plugins_safe() runtime_settings.tick_rate = 0.2 log(INFO, "Initialized plugins with safe mode.", origin=L_STARTUP) rprint("Initialized plugins with safe mode.", origin=L_STARTUP) else: BotServiceHelper.initialize_plugins() log(INFO, "Initialized all plugins.", origin=L_STARTUP) rprint("Initialized all plugins.", origin=L_STARTUP) log(INFO, "######### Initializing Mumble Client #########", origin=L_STARTUP) rprint("######### Initializing Mumble Client #########", origin=L_STARTUP) # Retrieve mumble client data from configs. mumble_login_data = BotServiceHelper.retrieve_mumble_data() BotService.initialize_mumble(mumble_login_data) log(INFO, "######### Initialized Mumble Client #########", origin=L_STARTUP) rprint("######### Initialized Mumble Client #########", origin=L_STARTUP) # Initialize web interface if global_settings.cfg.getboolean( C_WEB_SETTINGS, P_WEB_ENABLE) and global_settings.safe_mode is False: log(INFO, "######### Initializing Web Interface #########", origin=L_WEB_INTERFACE) rprint("######### Initializing Web Interface #########", origin=L_WEB_INTERFACE) from JJMumbleBot.web import web_helper web_helper.initialize_web() log(INFO, "######### Initialized Web Interface #########", origin=L_WEB_INTERFACE) rprint("######### Initialized Web Interface #########", origin=L_WEB_INTERFACE) # Start runtime loop. BotService.loop()
def initialize_plugins(): import sys from os import path, listdir from json import loads # Clear plugins, plugins_help, and commands tables on launch. DeleteDB.delete_all_commands(db_conn=get_memory_db()) DeleteDB.delete_all_plugins_help(db_conn=get_memory_db()) DeleteDB.delete_all_plugins(db_conn=get_memory_db()) # Import global aliases into the database. UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path=f'{dir_utils.get_main_dir()}/cfg/global_aliases.csv') global_settings.bot_plugins = {} # Load Core Plugins log(INFO, "######### Initializing Core Plugins #########", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) sys.path.insert(0, f'{dir_utils.get_main_dir()}/plugins/core') all_imports = [ name for name in listdir(f'{dir_utils.get_main_dir()}/plugins/core') if path.isdir( path.join(f'{dir_utils.get_main_dir()}/plugins/core', name)) and name != "__pycache__" ] for p_file in all_imports: if not path.exists( f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/metadata.ini' ): log(WARNING, f"{p_file} plugin does not contain a metadata.ini file. Skipping initialization...", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) continue # Import the core plugin class. global_settings.bot_plugins[p_file] = __import__( f'{p_file}.{p_file}', fromlist=['*']).Plugin # Register plugin command callbacks. plugin_metadata = PluginUtilityService.process_metadata( f'plugins/core/{p_file}') plugin_cmds = loads( plugin_metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) for plugin_command in plugin_cmds: global_settings.cmd_callbacks.register_command( f'{plugin_command}', p_file, f'{plugin_command}_clbk') global_settings.mtd_callbacks.register_callback( f'{plugin_command}_clbk', getattr(global_settings.bot_plugins[p_file], f'cmd_{plugin_command}', None)) log(INFO, f"Registered plugin command: " f"{plugin_command}:{global_settings.cmd_callbacks.get_command(plugin_command)[1]}:cmd_{plugin_command}", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize the core plugin class instance. global_settings.bot_plugins[p_file] = global_settings.bot_plugins[ p_file]() # Import core plugin into the database. InsertDB.insert_new_plugin(db_conn=get_memory_db(), plugin_name=p_file, ignore_file_save=True) # Import core plugin user privileges into the database. UtilityDB.import_privileges_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/privileges.csv' ) # Import plugin aliases into the database. UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/aliases.csv' ) # Import plugin help into the database. UtilityDB.import_help_to_db( db_conn=get_memory_db(), html_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/help.html') # Create directory for user modifiable plugin-specific data and configs. dir_utils.make_directory( f'{dir_utils.get_plugin_data_dir()}/{p_file}') sys.path.pop(0) log(INFO, "######### Core Plugins Initialized #########", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) # Load Extension Plugins log(INFO, "######### Initializing Extension Plugins #########", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) sys.path.insert(0, f'{dir_utils.get_main_dir()}/plugins/extensions') all_imports = [ name for name in listdir( f'{dir_utils.get_main_dir()}/plugins/extensions') if path.isdir( path.join(f'{dir_utils.get_main_dir()}/plugins/extensions', name)) and name != "__pycache__" ] for p_file in all_imports: if not path.exists( f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/metadata.ini' ): log(WARNING, f"{p_file} plugin does not contain a metadata.ini file. Skipping initialization...", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) continue # Import the core plugin class. global_settings.bot_plugins[p_file] = __import__( f'{p_file}.{p_file}', fromlist=['*']).Plugin # Register plugin command callbacks. plugin_metadata = PluginUtilityService.process_metadata( f'plugins/extensions/{p_file}') plugin_cmds = loads( plugin_metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) for plugin_command in plugin_cmds: global_settings.cmd_callbacks.register_command( f'{plugin_command}', p_file, f'{plugin_command}_clbk') global_settings.mtd_callbacks.register_callback( f'{plugin_command}_clbk', getattr(global_settings.bot_plugins[p_file], f'cmd_{plugin_command}', None)) log(INFO, f"Registered plugin command: {plugin_command}:{global_settings.cmd_callbacks.get_command(plugin_command)[1]}:cmd_{plugin_command}", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize the core plugin class instance. global_settings.bot_plugins[p_file] = global_settings.bot_plugins[ p_file]() # Import core plugin into the database. InsertDB.insert_new_plugin(db_conn=get_memory_db(), plugin_name=p_file, ignore_file_save=True) # Import core plugin user privileges into the database. UtilityDB.import_privileges_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/privileges.csv' ) # Import plugin aliases into the database. UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/aliases.csv' ) # Import plugin help into the database. UtilityDB.import_help_to_db( db_conn=get_memory_db(), html_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/help.html' ) # Create directory for user modifiable plugin-specific data and configs. dir_utils.make_directory( f'{dir_utils.get_plugin_data_dir()}/{p_file}') save_memory_db_to_file() sys.path.pop(0) log(INFO, "######### Extension Plugins Initialized #########", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value)
def initialize_plugins_safe(): import sys from os import path, listdir from json import loads from JJMumbleBot.lib.resources.strings import C_PLUGIN_SETTINGS, P_PLUG_SAFE if not global_settings.cfg: from JJMumbleBot.lib.errors import ExitCodes, ConfigError from JJMumbleBot.lib.utils import runtime_utils runtime_utils.exit_bot_error(ExitCodes.CONFIG_ERROR) raise ConfigError( 'There was an error loading the global config for initializing safe mode plugins.' ) # Import global aliases into the database. UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path=f'{dir_utils.get_main_dir()}/cfg/global_aliases.csv') global_settings.bot_plugins = {} safe_mode_plugins = loads( global_settings.cfg.get(C_PLUGIN_SETTINGS, P_PLUG_SAFE)) # Load Core Plugins log(INFO, "######### Initializing Core Plugins - Safe Mode #########", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) sys.path.insert(0, f'{dir_utils.get_main_dir()}/plugins/core') all_imports = [ name for name in listdir(f'{dir_utils.get_main_dir()}/plugins/core') if path.isdir( path.join(f'{dir_utils.get_main_dir()}/plugins/core', name)) and name != "__pycache__" ] for p_file in all_imports: if p_file in safe_mode_plugins: if not path.exists( f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/metadata.ini' ): log(WARNING, f"{p_file} plugin does not contain a metadata.ini file. Skipping initialization...", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) continue # Import the core plugin class. global_settings.bot_plugins[p_file] = __import__( f'{p_file}.{p_file}', fromlist=['*']).Plugin # Register plugin command callbacks. plugin_metadata = PluginUtilityService.process_metadata( f'plugins/core/{p_file}') plugin_cmds = loads( plugin_metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) for plugin_command in plugin_cmds: global_settings.cmd_callbacks.register_command( f'{plugin_command}', p_file, f'{plugin_command}_clbk') global_settings.mtd_callbacks.register_callback( f'{plugin_command}_clbk', getattr(global_settings.bot_plugins[p_file], f'cmd_{plugin_command}', None)) log(INFO, f"Registered plugin command: {plugin_command}:{global_settings.cmd_callbacks.get_command(plugin_command)[1]}:cmd_{plugin_command}", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize the core plugin class instance. global_settings.bot_plugins[ p_file] = global_settings.bot_plugins[p_file]() # Import core plugin into the database. InsertDB.insert_new_plugin(db_conn=get_memory_db(), plugin_name=p_file, ignore_file_save=True) # Import core plugin user privileges into the database. UtilityDB.import_privileges_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/privileges.csv' ) # Import plugin aliases into the database. UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/aliases.csv' ) # Import plugin help into the database. UtilityDB.import_help_to_db( db_conn=get_memory_db(), html_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/help.html' ) # Create directory for user modifiable plugin-specific data and configs. dir_utils.make_directory( f'{dir_utils.get_plugin_data_dir()}/{p_file}') sys.path.pop(0) log(INFO, "######### Core Plugins Initialized - Safe Mode #########", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) # Load Extension Plugins log(INFO, "######### Initializing Extension Plugins - Safe Mode #########", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) sys.path.insert(0, f'{dir_utils.get_main_dir()}/plugins/extensions') all_imports = [ name for name in listdir( f'{dir_utils.get_main_dir()}/plugins/extensions') if path.isdir( path.join(f'{dir_utils.get_main_dir()}/plugins/extensions', name)) and name != "__pycache__" ] for p_file in all_imports: if p_file in safe_mode_plugins: if not path.exists( path.join( f'{dir_utils.get_main_dir()}/plugins/extensions', p_file)): log(WARNING, f"{p_file} plugin does not contain a metadata.ini file. Skipping initialization...", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) continue # Import the core plugin class. global_settings.bot_plugins[p_file] = __import__( f'{p_file}.{p_file}', fromlist=['*']).Plugin # Register plugin command callbacks. plugin_metadata = PluginUtilityService.process_metadata( f'plugins/core/{p_file}') plugin_cmds = loads( plugin_metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) for plugin_command in plugin_cmds: global_settings.cmd_callbacks.register_command( f'{plugin_command}', p_file, f'{plugin_command}_clbk') global_settings.mtd_callbacks.register_callback( f'{plugin_command}_clbk', getattr(global_settings.bot_plugins[p_file], f'cmd_{plugin_command}', None)) log(INFO, f"Registered plugin command: {plugin_command}:{global_settings.cmd_callbacks.get_command(plugin_command)[1]}:cmd_{plugin_command}", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize the core plugin class instance. global_settings.bot_plugins[ p_file] = global_settings.bot_plugins[p_file]() # Import core plugin into the database. InsertDB.insert_new_plugin(db_conn=get_memory_db(), plugin_name=p_file, ignore_file_save=True) # Import core plugin user privileges into the database. UtilityDB.import_privileges_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/privileges.csv' ) # Import plugin aliases into the database. UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/aliases.csv' ) # Import plugin help into the database. UtilityDB.import_help_to_db( db_conn=get_memory_db(), html_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/help.html' ) # Create directory for user modifiable plugin-specific data and configs. dir_utils.make_directory( f'{dir_utils.get_plugin_data_dir()}/{p_file}') save_memory_db_to_file() sys.path.pop(0) log(INFO, "######### Extension Plugins Initialized - Safe Mode #########", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value)
def initialize_plugins_safe(): import sys from os import path, listdir from json import loads from JJMumbleBot.lib.resources.strings import C_PLUGIN_SETTINGS, P_PLUG_SAFE from hashlib import md5 if not global_settings.cfg: from JJMumbleBot.lib.errors import ExitCodes, ConfigError from JJMumbleBot.lib.utils import runtime_utils runtime_utils.exit_bot_error(ExitCodes.CONFIG_ERROR) raise ConfigError( 'There was an error loading the global config for initializing safe mode plugins.' ) # Check database metadata for changes. # If the version is different, or plugin checksum is modified, # clear plugins, plugins_help, and commands tables on launch. if global_settings.cfg.getboolean(C_MAIN_SETTINGS, P_DB_INTEGRITY, fallback=True): log(INFO, "######### Checking Database Integrity", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) all_core_plugins = [ name for name in listdir(f'{dir_utils.get_main_dir()}/plugins/core') if path.isdir( path.join(f'{dir_utils.get_main_dir()}/plugins/core', name)) and name != "__pycache__" ] all_ext_plugins = [ name for name in listdir( f'{dir_utils.get_main_dir()}/plugins/extensions') if path.isdir( path.join(f'{dir_utils.get_main_dir()}/plugins/extensions', name)) and name != "__pycache__" ] filenames = [] for core_plugin in all_core_plugins: glob_files = glob.glob( f'{dir_utils.get_main_dir()}/plugins/core/{core_plugin}/**/*', recursive=True) glob_files = [ f for f in glob_files if path.isfile(f) and "__pycache__" not in f ] filenames.extend(glob_files) for ext_plugin in all_ext_plugins: glob_files = glob.glob( f'{dir_utils.get_main_dir()}/plugins/extensions/{ext_plugin}/**/*', recursive=True) glob_files = [ f for f in glob_files if path.isfile(f) and "__pycache__" not in f ] filenames.extend(glob_files) hash_func = md5() # nosec for fn in filenames: if path.isfile(fn): hash_func.update(open(fn, "rb").read()) plugins_checksum = hash_func.hexdigest() integrity_check = UtilityDB.check_database_metadata( db_conn=get_memory_db(), version=META_VERSION, plugins_checksum=plugins_checksum) if integrity_check is False: log(WARNING, "Database integrity mismatch identified! Creating database backup and rebuilding database...", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) db_backup = BotServiceHelper.backup_database() if db_backup: log(INFO, f"Created internal database backup @ {db_backup}", origin=L_DATABASE, print_mode=PrintMode.REG_PRINT.value) DeleteDB.delete_all_commands(db_conn=get_memory_db()) DeleteDB.delete_all_plugins_help(db_conn=get_memory_db()) DeleteDB.delete_all_plugins(db_conn=get_memory_db()) log(INFO, "######### Database Integrity Verified", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) # Import custom aliases into the database. log(INFO, "######### Importing Custom Aliases", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path=f'{dir_utils.get_main_dir()}/cfg/custom_aliases.csv', update_if_exists=False) log(INFO, "######### Imported Custom Aliases", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) # Import custom command permissions into the database. log(INFO, "######### Importing Custom Command Permissions", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) UtilityDB.import_privileges_to_db( db_conn=get_memory_db(), csv_path=f'{dir_utils.get_main_dir()}/cfg/custom_permissions.csv', update_if_exists=False) log(INFO, "######### Imported Custom Command Permissions", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) # Import custom user privileges into the database. log(INFO, "######### Importing Custom User Privileges", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) UtilityDB.import_user_privileges_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/cfg/custom_user_privileges.csv', update_if_exists=False) log(INFO, "######### Imported Custom User Privileges", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) global_settings.bot_plugins = {} safe_mode_plugins = loads( global_settings.cfg.get(C_PLUGIN_SETTINGS, P_PLUG_SAFE)) # Load Core Plugins log(INFO, "######### Initializing Core Plugins - Safe Mode", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) sys.path.insert(0, f'{dir_utils.get_main_dir()}/plugins/core') all_imports = [ name for name in listdir(f'{dir_utils.get_main_dir()}/plugins/core') if path.isdir( path.join(f'{dir_utils.get_main_dir()}/plugins/core', name)) and name != "__pycache__" ] for p_file in all_imports: if p_file in safe_mode_plugins: if not path.exists( f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/metadata.ini' ): log(WARNING, f"{p_file} plugin does not contain a metadata.ini file. Skipping initialization...", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) continue # Import the core plugin class. global_settings.bot_plugins[p_file] = __import__( f'{p_file}.{p_file}', fromlist=['*']).Plugin # Register plugin command callbacks. plugin_metadata = PluginUtilityService.process_metadata( f'plugins/core/{p_file}') plugin_cmds = loads( plugin_metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) for plugin_command in plugin_cmds: global_settings.cmd_callbacks.register_command( f'{plugin_command}', p_file, f'{plugin_command}_clbk') global_settings.mtd_callbacks.register_callback( f'{plugin_command}_clbk', getattr(global_settings.bot_plugins[p_file], f'cmd_{plugin_command}', None)) log(INFO, f"Registered plugin command: {plugin_command}:{global_settings.cmd_callbacks.get_command(plugin_command)[1]}:cmd_{plugin_command}", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize the core plugin class instance. global_settings.bot_plugins[ p_file] = global_settings.bot_plugins[p_file]() # Import core plugin into the database. InsertDB.insert_new_plugin(db_conn=get_memory_db(), plugin_name=p_file, ignore_file_save=True) # Import core plugin user privileges into the database. UtilityDB.import_privileges_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/privileges.csv' ) # Import plugin aliases into the database. UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/aliases.csv' ) # Import plugin help into the database. UtilityDB.import_help_to_db( db_conn=get_memory_db(), html_path= f'{dir_utils.get_main_dir()}/plugins/core/{p_file}/help.html' ) # Create directory for user modifiable plugin-specific data and configs. dir_utils.make_directory( f'{dir_utils.get_plugin_data_dir()}/{p_file}') sys.path.pop(0) log(INFO, "######### Core Plugins Initialized - Safe Mode", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) # Load Extension Plugins log(INFO, "######### Initializing Extension Plugins - Safe Mode", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) sys.path.insert(0, f'{dir_utils.get_main_dir()}/plugins/extensions') all_imports = [ name for name in listdir( f'{dir_utils.get_main_dir()}/plugins/extensions') if path.isdir( path.join(f'{dir_utils.get_main_dir()}/plugins/extensions', name)) and name != "__pycache__" ] for p_file in all_imports: if p_file in safe_mode_plugins: if not path.exists( f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/metadata.ini' ): log(WARNING, f"{p_file} plugin does not contain a metadata.ini file. Skipping initialization...", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) continue # Import the core plugin class. global_settings.bot_plugins[p_file] = __import__( f'{p_file}.{p_file}', fromlist=['*']).Plugin # Register plugin command callbacks. plugin_metadata = PluginUtilityService.process_metadata( f'plugins/extensions/{p_file}') plugin_cmds = loads( plugin_metadata.get(C_PLUGIN_INFO, P_PLUGIN_CMDS)) for plugin_command in plugin_cmds: global_settings.cmd_callbacks.register_command( f'{plugin_command}', p_file, f'{plugin_command}_clbk') global_settings.mtd_callbacks.register_callback( f'{plugin_command}_clbk', getattr(global_settings.bot_plugins[p_file], f'cmd_{plugin_command}', None)) log(INFO, f"Registered plugin command: {plugin_command}:{global_settings.cmd_callbacks.get_command(plugin_command)[1]}:cmd_{plugin_command}", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize the core plugin class instance. global_settings.bot_plugins[ p_file] = global_settings.bot_plugins[p_file]() # Import core plugin into the database. InsertDB.insert_new_plugin(db_conn=get_memory_db(), plugin_name=p_file, ignore_file_save=True) # Import core plugin user privileges into the database. UtilityDB.import_privileges_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/privileges.csv' ) # Import plugin aliases into the database. UtilityDB.import_aliases_to_db( db_conn=get_memory_db(), csv_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/aliases.csv' ) # Import plugin help into the database. UtilityDB.import_help_to_db( db_conn=get_memory_db(), html_path= f'{dir_utils.get_main_dir()}/plugins/extensions/{p_file}/help.html' ) # Create directory for user modifiable plugin-specific data and configs. dir_utils.make_directory( f'{dir_utils.get_plugin_data_dir()}/{p_file}') save_memory_db_to_file() sys.path.pop(0) log(INFO, "######### Extension Plugins Initialized - Safe Mode", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value)
def __init__(self, serv_ip, serv_port, serv_pass): # Initialize bot services. global_settings.bot_service = self global_settings.clbk_service = CallbackService() # Initialize user settings. BotServiceHelper.initialize_settings() # Initialize logging services. initialize_logging() log(INFO, "######### Initializing JJMumbleBot", origin=L_STARTUP, print_mode=PrintMode.REG_PRINT.value) # Initialize up-time tracking. runtime_settings.start_time = datetime.now() # Set maximum multi-command limit. runtime_settings.multi_cmd_limit = int(global_settings.cfg[C_MAIN_SETTINGS][P_CMD_MULTI_LIM]) # Initialize command queue limit. global_settings.cmd_queue = QueueHandler([], maxlen=runtime_settings.cmd_queue_lim) # Initialize command history tracking. global_settings.cmd_history = CMDQueue(runtime_settings.cmd_hist_lim) log(INFO, "######### Initializing Internal Database", origin=L_DATABASE, print_mode=PrintMode.REG_PRINT.value) # Back up internal database. if global_settings.cfg.getboolean(C_MAIN_SETTINGS, P_DB_BACKUP, fallback=False): db_backup = BotServiceHelper.backup_database() if db_backup: log(INFO, f"Created internal database backup @ {db_backup}", origin=L_DATABASE, print_mode=PrintMode.REG_PRINT.value) # Initialize internal database. global_settings.mumble_db = init_database() log(INFO, "######### Initialized Internal Database", origin=L_DATABASE, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize major directories. if global_settings.cfg.get(C_MEDIA_SETTINGS, P_TEMP_MED_DIR, fallback=None): dir_utils.make_directory(global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]) else: dir_utils.make_directory(f'{dir_utils.get_main_dir()}/cfg/temporary_media_directory') global_settings.cfg[C_MEDIA_SETTINGS][ P_TEMP_MED_DIR] = f'{dir_utils.get_main_dir()}/cfg/temporary_media_directory' if global_settings.cfg.get(C_MEDIA_SETTINGS, P_PERM_MEDIA_DIR, fallback=None): dir_utils.make_directory(global_settings.cfg[C_MEDIA_SETTINGS][P_PERM_MEDIA_DIR]) else: dir_utils.make_directory(f'{dir_utils.get_main_dir()}/cfg/permanent_media_directory') global_settings.cfg[C_MEDIA_SETTINGS][ P_PERM_MEDIA_DIR] = f'{dir_utils.get_main_dir()}/cfg/permanent_media_directory' dir_utils.make_directory(f'{global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/internal/images') dir_utils.make_directory(f'{global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/internal/audio') log(INFO, "######### Initialized Temporary Directories", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize PGUI system. global_settings.gui_service = PseudoGUI() log(INFO, "######### Initialized PGUI", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Initialize VLC interface. global_settings.aud_interface = AudioLibraryInterface() # Initialize plugins. if global_settings.safe_mode: BotServiceHelper.initialize_plugins_safe() runtime_settings.tick_rate = 0.2 log(INFO, "Initialized plugins with safe mode.", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) else: BotServiceHelper.initialize_plugins() log(INFO, "######### Initializing Mumble Client", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Retrieve mumble client data from configs. mumble_login_data = BotServiceHelper.retrieve_mumble_data(serv_ip, serv_port, serv_pass) self.initialize_mumble(mumble_login_data) log(INFO, "######### Initialized Mumble Client", origin=L_STARTUP, print_mode=PrintMode.VERBOSE_PRINT.value) # Start runtime loop. BotService.loop()
args = parser.parse_args() # Safe/Verbose/Quiet Mode launch parameter handling if args.quiet_mode: global_settings.quiet_mode = True if args.safe_mode: global_settings.safe_mode = True elif args.verbose_mode: global_settings.verbose_mode = True if global_settings.verbose_mode and global_settings.quiet_mode: raise SysArgError( "It looks like both verbose mode and quiet mode are enabled.\n" "Only one or the other can be used!") if not path.exists(f'{dir_utils.get_main_dir()}/cfg/'): dir_utils.make_directory(f'{dir_utils.get_main_dir()}/cfg/') if args.force_defaults: dir_utils.clear_directory(f'{dir_utils.get_main_dir()}/cfg/') if not path.exists(f'{dir_utils.get_main_dir()}/cfg/config.ini'): copy(f'{dir_utils.get_main_dir()}/templates/config_template.ini', f'{dir_utils.get_main_dir()}/cfg/config.ini') if not path.exists(f'{dir_utils.get_main_dir()}/cfg/global_aliases.csv'): copy(f'{dir_utils.get_main_dir()}/templates/aliases_template.csv', f'{dir_utils.get_main_dir()}/cfg/global_aliases.csv') if not path.exists(f'{dir_utils.get_main_dir()}/cfg/plugins/'): dir_utils.make_directory(f'{dir_utils.get_main_dir()}/cfg/plugins/') global_settings.cfg = configparser.ConfigParser() global_settings.cfg.read(f'{dir_utils.get_main_dir()}/cfg/config.ini')
def __init__(self, serv_ip, serv_port, serv_pass): # Initialize bot services. global_settings.bot_service = self global_settings.clbk_service = CallbackService() # Initialize user settings. BotServiceHelper.initialize_settings() # Initialize logging directory if unavailable. if global_settings.cfg.get(C_LOGGING, P_LOG_DIR, fallback=None): dir_utils.make_directory(global_settings.cfg[C_LOGGING][P_LOG_DIR]) else: dir_utils.make_directory(f'{dir_utils.get_main_dir()}/cfg/logs') global_settings.cfg[C_LOGGING][P_LOG_DIR] = f'{dir_utils.get_main_dir()}/cfg/logs' # Initialize logging services. initialize_logging() log(INFO, "######### Initializing JJMumbleBot #########", origin=L_STARTUP) rprint("######### Initializing JJMumbleBot #########", origin=L_STARTUP) # Initialize up-time tracking. runtime_settings.start_time = datetime.now() # Set maximum multi-command limit. runtime_settings.multi_cmd_limit = int(global_settings.cfg[C_MAIN_SETTINGS][P_CMD_MULTI_LIM]) # Initialize command queue limit. global_settings.cmd_queue = QueueHandler([], maxlen=runtime_settings.cmd_queue_lim) # Initialize command history tracking. global_settings.cmd_history = CMDQueue(runtime_settings.cmd_hist_lim) log(INFO, "######### Initializing Internal Database #########", origin=L_DATABASE) rprint("######### Initializing Internal Database #########", origin=L_DATABASE) # Back up internal database. if global_settings.cfg.getboolean(C_MAIN_SETTINGS, P_DB_BACKUP, fallback=False): db_backup = BotServiceHelper.backup_database() if db_backup: log(INFO, f"Created internal database backup @ {db_backup}", origin=L_DATABASE) rprint(f"Created internal database backup @ {db_backup}", origin=L_DATABASE) # Initialize internal database. global_settings.mumble_db = init_database() log(INFO, "######### Initialized Internal Database #########", origin=L_DATABASE) rprint("######### Initialized Internal Database #########", origin=L_DATABASE) # Initialize major directories. if global_settings.cfg.get(C_MEDIA_SETTINGS, P_TEMP_MED_DIR, fallback=None): dir_utils.make_directory(global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]) else: dir_utils.make_directory(f'{dir_utils.get_main_dir()}/cfg/temporary_media_directory') global_settings.cfg[C_MEDIA_SETTINGS][ P_TEMP_MED_DIR] = f'{dir_utils.get_main_dir()}/cfg/temporary_media_directory' if global_settings.cfg.get(C_MEDIA_SETTINGS, P_PERM_MEDIA_DIR, fallback=None): dir_utils.make_directory(global_settings.cfg[C_MEDIA_SETTINGS][P_PERM_MEDIA_DIR]) else: dir_utils.make_directory(f'{dir_utils.get_main_dir()}/cfg/permanent_media_directory') global_settings.cfg[C_MEDIA_SETTINGS][ P_PERM_MEDIA_DIR] = f'{dir_utils.get_main_dir()}/cfg/permanent_media_directory' dir_utils.make_directory(f'{global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/internal/images') dir_utils.make_directory(f'{global_settings.cfg[C_MEDIA_SETTINGS][P_TEMP_MED_DIR]}/internal/audio') log(INFO, "######### Initialized Temporary Directories #########", origin=L_STARTUP) rprint("######### Initialized Temporary Directories #########", origin=L_STARTUP) # Initialize PGUI system. global_settings.gui_service = PseudoGUI() log(INFO, "######### Initialized PGUI #########", origin=L_STARTUP) rprint("######### Initialized PGUI #########", origin=L_STARTUP) # Initialize VLC interface. global_settings.aud_interface = AudioLibraryInterface() # Initialize plugins. if global_settings.safe_mode: BotServiceHelper.initialize_plugins_safe() runtime_settings.tick_rate = 0.2 log(INFO, "Initialized plugins with safe mode.", origin=L_STARTUP) rprint("Initialized plugins with safe mode.", origin=L_STARTUP) else: BotServiceHelper.initialize_plugins() log(INFO, "######### Initializing Mumble Client #########", origin=L_STARTUP) rprint("######### Initializing Mumble Client #########", origin=L_STARTUP) # Retrieve mumble client data from configs. mumble_login_data = BotServiceHelper.retrieve_mumble_data(serv_ip, serv_port, serv_pass) self.initialize_mumble(mumble_login_data) log(INFO, "######### Initialized Mumble Client #########", origin=L_STARTUP) rprint("######### Initialized Mumble Client #########", origin=L_STARTUP) # Initialize web interface if global_settings.cfg.getboolean(C_WEB_SETTINGS, P_WEB_ENABLE, fallback=False) and global_settings.safe_mode is False: log(INFO, "######### Initializing Web Interface #########", origin=L_WEB_INTERFACE) rprint("######### Initializing Web Interface #########", origin=L_WEB_INTERFACE) from JJMumbleBot.lib.database import InsertDB from JJMumbleBot.lib.utils.database_management_utils import get_memory_db from JJMumbleBot.lib.privileges import Privileges if InsertDB.insert_new_user(db_conn=get_memory_db(), username=global_settings.cfg[C_CONNECTION_SETTINGS][P_USER_ID]): InsertDB.insert_new_permission(db_conn=get_memory_db(), username=global_settings.cfg[C_CONNECTION_SETTINGS][P_USER_ID], permission_level=int(Privileges.SUPERUSER.value)) from JJMumbleBot.web import web_helper web_helper.initialize_web() log(INFO, "######### Initialized Web Interface #########", origin=L_WEB_INTERFACE) rprint("######### Initialized Web Interface #########", origin=L_WEB_INTERFACE) # Start runtime loop. BotService.loop()