diff --git a/exts/imports/process_files.py b/exts/imports/process_files.py index 86b67bf..5728385 100644 --- a/exts/imports/process_files.py +++ b/exts/imports/process_files.py @@ -49,7 +49,14 @@ def process_file(in_file, file_type) -> ConfigParser: bot_config = json.load(f) ignore_strings = bot_config['ignore_strings'][file_type] keep_blocks = bot_config['keep_blocks'][file_type] - data = list(map(bytes.decode, in_file.readlines())) + lines = in_file.readlines() + try: + data = [line.decode('utf-8') for line in lines] + except UnicodeDecodeError: + try: + data = [line.decode('utf-16') for line in lines] + except UnicodeDecodeError: + return 0 clean_data = list() if ignore_strings: @@ -88,10 +95,14 @@ def process_files(z) -> (ConfigParser, ConfigParser, list): if filename.lower() == 'game.ini': # Clean the Game.ini file, removing unnecessary lines game_config = process_file(z.open(filename), 'game.ini') + if not game_config: + return 0, 0, 0 mods = check_for_mods(z.open(filename)) elif 'DinoExport' in filename: # Get the contents of all DinoExport_*.ini files loaded into a dict dino_data[filename] = process_file(z.open(filename), 'dino.ini') + if not dino_data[filename]: + return 0, 0, 0 if not mods: mods = check_for_modded_dinos(dino_data, mods) return game_config, dino_data, mods diff --git a/exts/uploader.py b/exts/uploader.py index baa1895..05b8c7b 100644 --- a/exts/uploader.py +++ b/exts/uploader.py @@ -24,6 +24,10 @@ class Uploader: await attachment.save(file) unzipped = process_files.load_zip(file) game_ini, dinos_data, mods = process_files.process_files(unzipped) + if not game_ini and not dinos_data and not mods: + await msg.edit(content='There was an encoding error with one of the files provided' + 'and they cannot be processed') + return if dinos_data == dict(): await msg.edit(content='There aren\'t any DinoExport files in the zip file attached.\n' 'Please make sure the files have not been renamed.')