diff --git a/README.md b/README.md index 3b68a13..82bc9bb 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,33 @@ # Serverpack-Downloader -CLI Downloader to download server packs from curseforge +CLI Downloader to download server packs from CurseForge # IMPORTANT -add your own api key to the .env file +Add your own CurseForge API-Key to an .env file +```bash +CURSEFORGE_API_KEY=YOUR_API_KEY +``` + +You can get your own through https://console.curseforge.com/ # Dependencies -dotenv python library \ -inquirer python library \ -requests python library +```bash +python-dotenv +inquirer +requests +``` + +Install with `pip install -r requirements.txt` + + +# Notes + +If you get the following error, the Modpack you're trying to download most likely doesn't have a serverpack. + +```bash +Traceback (most recent call last): + File "Serverpack-Downloader\main.py", line 90, in + download_modpack(selected_modpack_name, selected_modpack_id) + ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "Serverpack-Downloader\main.py", line 64, in download_modpack + server_file_id = file['serverPackFileId'] +``` \ No newline at end of file diff --git a/main.py b/main.py index 9e0b630..ea9d41f 100644 --- a/main.py +++ b/main.py @@ -10,42 +10,53 @@ headers = { 'x-api-key': os.getenv("CURSEFORGE_API_KEY") } -input_name = input("Enter modpack name: ") -response = requests.get(f'https://api.curseforge.com/v1/mods/search?gameId=432&searchFilter={input_name}', headers=headers) -data = response.json() + +modpack_names = [] found = False selected_modpack_id = -1 -modpack_names = [] -for mod in data['data']: - modpack_url = mod['links']['websiteUrl'] - if modpack_url.startswith("https://www.curseforge.com/minecraft/modpacks/"): - modpack_names.append(mod['name']) - found = True - else: - pass -if not found: - print("No modpack found with that name.") -else: - pass +def search_modpacks(query): + global data + global found -if found == True: - questions = [ - inquirer.List('name', - message="Select a modpack", - choices=modpack_names, - ), -] + response = requests.get(f'https://api.curseforge.com/v1/mods/search?gameId=432&searchFilter={query}', headers=headers) + data = response.json() + for mod in data['data']: + modpack_url = mod['links']['websiteUrl'] + if modpack_url.startswith("https://www.curseforge.com/minecraft/modpacks/"): + modpack_names.append(mod['name']) + found = True + if not found: + print("No modpack found with that name.") + + return modpack_names + + +def select_modpacks(modpack_names): + + if found == True: + questions = [ + inquirer.List('name', + message="Select a modpack", + choices=modpack_names + ), + ] answers = inquirer.prompt(questions) + selected_modpack_name = answers['name'] for mod in data['data']: if mod['name'] == selected_modpack_name: selected_modpack_id = mod['id'] - selected_url = mod['links']['websiteUrl'] + + return selected_modpack_name, selected_modpack_id + + + +def download_modpack(selected_modpack_name, selected_modpack_id): r = requests.get(f"https://api.curseforge.com/v1/mods/{selected_modpack_id}/files", headers = headers) file_data = r.json() @@ -66,3 +77,16 @@ if found == True: break else: print("No server pack found for this modpack.") + + +if __name__ == "__main__": + print("Serverpack Downloader") + + query = input("Enter Search Query: ") + modpack_names = search_modpacks(query) + + selected_modpack_name, selected_modpack_id = select_modpacks(modpack_names) + + download_modpack(selected_modpack_name, selected_modpack_id) + + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f5cf6d0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +python-dotenv +inquirer +requests \ No newline at end of file