Пример #1
0
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)
Пример #2
0
 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."
     )
Пример #3
0
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
Пример #4
0
 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)
Пример #5
0
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
Пример #6
0
 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
     )
Пример #7
0
 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.")
Пример #8
0
 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."
     )
Пример #9
0
 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."
     )
Пример #10
0
 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
Пример #14
0
 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()
Пример #15
0
    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()
Пример #16
0
    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)
Пример #17
0
    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)
Пример #18
0
    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)
Пример #19
0
    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()
Пример #20
0
    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')
Пример #21
0
    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()