Advertisement
Guest User

VSmodAutoUpdater

a guest
Jan 22nd, 2024
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.85 KB | Source Code | 0 0
  1. import requests
  2. import json
  3. import os
  4. import wget
  5. import zipfile
  6.  
  7. def separator():
  8.     print(f"{'_' * 50}")
  9.  
  10. home_url = "https://mods.vintagestory.at"
  11. mod_api = "http://mods.vintagestory.at/api/mod"
  12.  
  13.  
  14. """
  15. mod_api = "http://mods.vintagestory.at/api/mods"
  16.  
  17. def fetch_data():
  18.    #get full list of mods from databas
  19.    res = requests.get(mod_api, headers={"Accept": "application/json"})
  20.    if res.status_code == 200:
  21.        try:
  22.            sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
  23.  
  24.            data = res.json()
  25.            # with open("mods.json", "w", encoding="utf-8") as md:
  26.            # md.write(json.dumps(data, indent=4))
  27.            return data
  28.  
  29.        except Exception as e:
  30.            print(e)
  31.  
  32. data = fetch_data()
  33. mod_data = data["mods"]
  34. mod_names = []
  35. for x in mod_data:
  36.    mod_names.append(x["name"])
  37. """
  38.  
  39. curr_path = os.path.dirname(os.path.abspath(__file__))
  40. if not os.path.isfile(".\\modsdir.txt"):
  41.     f = open(".\\modsdir.txt", "w+")
  42.     mods_dir = input("What is your mod directory?")
  43.     f.write(mods_dir)
  44.     f.close
  45.  
  46. f = open(".\\modsdir.txt", "r")
  47.  
  48. if f.read() == "":
  49.     f.close()
  50.     f = open(".\\modsdir.txt", "w")
  51.     mods_dir = input("What is your mod directory?")
  52.     f.write(mods_dir)
  53.     f.close()
  54.  
  55. f.close()
  56.  
  57. f = open(".\\modsdir.txt", "r")
  58. modpath = f.read()
  59. f.close()
  60.  
  61. path_out = ".\\output"
  62. if not os.path.isdir(path_out):
  63.     os.mkdir(path_out)
  64.     print("Creating output directory")
  65.  
  66. modlist = os.listdir(modpath)
  67.  
  68. mod_info_list = []
  69.  
  70. print("Mods in your folder: \n")
  71. for mod in modlist:
  72.     # Get modinfo.json data inside local mod-zipfile
  73.     if mod[-4:-1] + mod[-1] == ".zip":
  74.         get_zip = zipfile.ZipFile(mod, mode="r")
  75.         with get_zip.open("modinfo.json", mode="r") as mod_info:
  76.             mod_info_json = json.loads(str(mod_info.read().decode("utf-8")))
  77.             mod_info_list.append(mod_info_json)
  78.  
  79.         print(mod_info_json["name"])
  80.  
  81. separator()
  82. print("\nChecking for updates...\n")
  83.  
  84. for mod in mod_info_list:
  85.     api_req = mod_api + "/" + str(mod["modid"])
  86.     # Get new mod info data from database to check version
  87.     mod_res = requests.get(api_req, headers={"Accept": "application/json"})
  88.  
  89.     res_modinfo = mod_res.json()["mod"]
  90.  
  91.     releases = res_modinfo["releases"][0]
  92.  
  93.     if releases["modversion"] != mod["version"]:
  94.         separator()
  95.         print("\n" + mod["name"] + " has a newer version!")
  96.         print("Downloading from:")
  97.  
  98.         file_id = releases["fileid"]
  99.         downlink = home_url + "/download?fileid=" + str(file_id)
  100.         print(downlink)
  101.         response = wget.download(downlink, out=path_out)
  102.         print("\nDone! Check output folder\n")
  103.         separator()
  104.     else:
  105.         print(mod["name"] + " is the latest!")
  106. separator()
  107. input("\n\nDownload complete, press Enter to exit!")
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement