mirror of
				https://github.com/Neocky/pluGET.git
				synced 2024-04-29 16:12:30 +00:00 
			
		
		
		
	| @@ -7,4 +7,8 @@ pynacl >= 1.4.0 | ||||
| cffi >= 1.14.5 | ||||
| six >= 1.15.0 | ||||
| pycparser >= 2.20 | ||||
| pysftp >= 0.2.9 | ||||
| pysftp >= 0.2.9 | ||||
| rich >= 9.13.0 | ||||
| commonmark >= 0.9.1 | ||||
| Pygments >= 2.8.1 | ||||
| typing_extensions >= 3.7.4.3 | ||||
| @@ -1,10 +1,7 @@ | ||||
| from utils.consoleoutput import consoleTitle, clearConsole, printMainMenu, oColors | ||||
| from utils.utilities import getHelp, check_requirements | ||||
| from utils.consoleoutput import consoleTitle, clearConsole, printMainMenu | ||||
| from utils.utilities import check_requirements | ||||
| from handlers.handle_input import createInputLists, getInput | ||||
| from handlers.handle_config import checkConfig | ||||
| from plugin.plugin_downloader import searchPackage, getSpecificPackage | ||||
| from plugin.plugin_updatechecker import updateInstalledPackage, checkInstalledPackage | ||||
| from plugin.plugin_remover import removePlugin | ||||
|  | ||||
|  | ||||
| def mainFunction(): | ||||
|   | ||||
| @@ -58,10 +58,10 @@ def createConfig(): | ||||
|     config['General'] = {} | ||||
|     config['General'][';'] = 'If a local plugin folder exists (True/False): (If False SFTP will be used)' | ||||
|     config['General']['LocalPluginFolder'] = 'True' | ||||
|     config['General']['PathToPluginFolder'] = 'C:\\Users\\USER\\Desktop\\plugins' | ||||
|     config['General']['PathToPluginFolder'] = 'C:/Users/USER/Desktop/plugins' | ||||
|     config['General'][';_'] = 'If you want a different folder to store the updated plugins change to (True/False) and the path below' | ||||
|     config['General']['SeperateDownloadPath'] = 'False' | ||||
|     config['General']['PathToSeperateDownloadPath'] = 'C:\\Users\\USER\\Desktop\\plugins' | ||||
|     config['General']['PathToSeperateDownloadPath'] = 'C:/Users/USER/Desktop/plugins' | ||||
|  | ||||
|     config['SFTP - Remote Server'] = {} | ||||
|     config['SFTP - Remote Server']['Server'] = '0.0.0.0' | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import sys | ||||
|  | ||||
| from utils.consoleoutput import oColors | ||||
| from utils.utilities import getHelp | ||||
| from utils.utilities import getHelp, getCommandHelp | ||||
| from handlers.handle_config import checkConfig | ||||
| from plugin.plugin_downloader import searchPackage, getSpecificPackage | ||||
| from plugin.plugin_updatechecker import updateInstalledPackage, checkInstalledPackage | ||||
| @@ -68,7 +68,10 @@ def handleInput(inputCommand, inputSelectedObject, inputParams): | ||||
|         if inputCommand == 'exit': | ||||
|             sys.exit() | ||||
|         if inputCommand == 'help': | ||||
|             getHelp() | ||||
|             if inputSelectedObject == 'command' or inputSelectedObject == 'commands': | ||||
|                 getCommandHelp(inputParams) | ||||
|             else: | ||||
|                 getHelp() | ||||
|             break | ||||
|         if inputCommand == 'remove': | ||||
|             removePlugin(inputSelectedObject) | ||||
| @@ -77,7 +80,7 @@ def handleInput(inputCommand, inputSelectedObject, inputParams): | ||||
|             papermc_downloader(inputSelectedObject, inputParams) | ||||
|             break | ||||
|         else: | ||||
|             print(oColors.brightRed + "Command not found. Please try again." + oColors.standardWhite) | ||||
|             print(oColors.brightRed + "Error: Command not found. Please try again. :(" + oColors.standardWhite) | ||||
|             getInput() | ||||
|     getInput() | ||||
|  | ||||
| @@ -88,7 +91,8 @@ def getInput(): | ||||
|             inputCommand, inputSelectedObject, *inputParams = input("pluGET >> ").split() | ||||
|             break | ||||
|         except ValueError: | ||||
|             print(oColors.brightRed + "Wrong input! Use: > *command* *selectedObject* *optionalParams*" + oColors.standardWhite) | ||||
|             print(oColors.brightRed + "Wrong input! Use: > 'command' 'selectedObject' [optionalParams]" + oColors.standardWhite) | ||||
|             print(oColors.brightRed + "Use: '" + oColors.standardWhite +"help command" + oColors.brightRed +"' to get all available commands" + oColors.standardWhite) | ||||
|  | ||||
|     inputParams = inputParams[0] if inputParams else None | ||||
|     handleInput(inputCommand, inputSelectedObject, inputParams) | ||||
|   | ||||
| @@ -61,7 +61,7 @@ def searchPackage(ressourceName): | ||||
|     url = f"https://api.spiget.org/v2/search/resources/{ressourceName}?field=name&sort=-downloads" | ||||
|     packageName = doAPIRequest(url) | ||||
|     i = 1 | ||||
|     print(f"Searching: {ressourceName}") | ||||
|     print(oColors.brightBlack + f"Searching: {ressourceName}" + oColors.standardWhite) | ||||
|     print("Index | Name                        | Description                                                                                                          |  Downloads") | ||||
|     for ressource in packageName: | ||||
|         pName = ressource["name"] | ||||
|   | ||||
| @@ -1,7 +1,10 @@ | ||||
| import os | ||||
| import re | ||||
| import io | ||||
| from zipfile import ZipFile | ||||
| from urllib.error import HTTPError | ||||
| from pathlib import Path | ||||
| from rich.progress import track | ||||
|  | ||||
| from utils.consoleoutput import oColors | ||||
| from utils.web_request import doAPIRequest | ||||
| @@ -38,6 +41,10 @@ def getFileVersion(pluginName): | ||||
|     pluginVersion = re.search(r'([\d.]+[.jar]+)', pluginNameFull) | ||||
|     pluginVersionFull = pluginVersion.group() | ||||
|     pluginVersionString = pluginVersionFull.replace('.jar', '') | ||||
|     if pluginVersionString.endswith('.'): | ||||
|         pluginVersionString = '' | ||||
|     if pluginVersionString == '': | ||||
|         pluginVersionString = eggCrackingJar(pluginNameFull) | ||||
|     return pluginVersionString | ||||
|  | ||||
|  | ||||
| @@ -56,6 +63,28 @@ def compareVersions(plugin_latest_version, pluginVersion): | ||||
|     return plugin_is_outdated | ||||
|  | ||||
|  | ||||
| def eggCrackingJar(localJarFileName): | ||||
|     if not checkConfig().localPluginFolder: | ||||
|         pluginPath = checkConfig().sftp_folderPath | ||||
|     else: | ||||
|         pluginPath = checkConfig().pathToPluginFolder | ||||
|     pathToPluginJar = Path(f"{pluginPath}/{localJarFileName}") | ||||
|     pluginVersion = '' | ||||
|     with ZipFile(pathToPluginJar, 'r') as pluginJar: | ||||
|         try: | ||||
|             with io.TextIOWrapper(pluginJar.open('plugin.yml', 'r'), encoding="utf-8") as pluginYml: | ||||
|                 pluginYmlContentLine = pluginYml.readlines() | ||||
|                 for line in pluginYmlContentLine: | ||||
|                     if "version: " in line: | ||||
|                         pluginVersion = line.replace('version: ', '') | ||||
|                         pluginVersion = pluginVersion.replace('\n', '') | ||||
|                         break | ||||
|  | ||||
|         except FileNotFoundError: | ||||
|             pluginVersion = '' | ||||
|     return pluginVersion | ||||
|  | ||||
|  | ||||
| def checkInstalledPackage(inputSelectedObject="all"): | ||||
|     createPluginList() | ||||
|     if not checkConfig().localPluginFolder: | ||||
| @@ -65,10 +94,12 @@ def checkInstalledPackage(inputSelectedObject="all"): | ||||
|         pluginList = os.listdir(checkConfig().pathToPluginFolder) | ||||
|     i = 0 | ||||
|     oldPackages = 0 | ||||
|     print(f"Checking: {inputSelectedObject}") | ||||
|     print("Index | Name                           | Installed V. | Latest V. |  Update available") | ||||
|     print(oColors.brightBlack + f"Checking: {inputSelectedObject}" + oColors.standardWhite) | ||||
|     print("┌─────┬────────────────────────────────┬──────────────┬───────────┬───────────────────┐") | ||||
|     print("│ No. │ Name                           │ Installed V. │ Latest V. │  Update available │") | ||||
|     print("└─────┴────────────────────────────────┴──────────────┴───────────┴───────────────────┘") | ||||
|     try: | ||||
|         for plugin in pluginList: | ||||
|         for plugin in track(pluginList, description="Checking for updates" ,transient=True, complete_style="cyan"): | ||||
|             try: | ||||
|                 fileName = getFileName(plugin) | ||||
|                 fileVersion = getFileVersion(plugin) | ||||
| @@ -77,10 +108,8 @@ def checkInstalledPackage(inputSelectedObject="all"): | ||||
|                 i += 1 | ||||
|                 continue | ||||
|             pluginIdStr = str(pluginId) | ||||
|  | ||||
|             if fileVersion == '': | ||||
|                 fileVersion = 'N/A' | ||||
|  | ||||
|             try: | ||||
|                 pluginLatestVersion = INSTALLEDPLUGINLIST[i][2] | ||||
|             except IndexError: | ||||
| @@ -99,25 +128,31 @@ def checkInstalledPackage(inputSelectedObject="all"): | ||||
|  | ||||
|             if pluginIsOutdated == True: | ||||
|                 oldPackages = oldPackages + 1 | ||||
|              | ||||
|  | ||||
|             if inputSelectedObject != "*" and inputSelectedObject != "all": | ||||
|                 if inputSelectedObject == pluginIdStr or re.search(inputSelectedObject, fileName, re.IGNORECASE): | ||||
|                     print(f" [{1}]".ljust(8), end='') | ||||
|                     if pluginLatestVersion == 'N/A': | ||||
|                         print(oColors.brightBlack + f" [{1}]".ljust(8), end='') | ||||
|                     else: | ||||
|                         print(f" [{1}]".ljust(8), end='') | ||||
|                     print(f"{fileName}".ljust(33), end='') | ||||
|                     print(f"{fileVersion}".ljust(15), end='') | ||||
|                     print(f"{pluginLatestVersion}".ljust(12), end='') | ||||
|                     print(f" {pluginIsOutdated}".ljust(5)) | ||||
|                     print(f" {pluginIsOutdated}".ljust(5) + oColors.standardWhite) | ||||
|                     break | ||||
|             else: | ||||
|                 print(f" [{i+1}]".ljust(8), end='') | ||||
|                 if pluginLatestVersion == 'N/A': | ||||
|                     print(oColors.brightBlack + f" [{i+1}]".ljust(8), end='') | ||||
|                 else: | ||||
|                     print(f" [{i+1}]".ljust(8), end='') | ||||
|                 print(f"{fileName}".ljust(33), end='') | ||||
|                 print(f"{fileVersion}".ljust(15), end='') | ||||
|                 print(f"{pluginLatestVersion}".ljust(12), end='') | ||||
|                 print(f" {pluginIsOutdated}".ljust(5)) | ||||
|                 print(f" {pluginIsOutdated}".ljust(5) + oColors.standardWhite) | ||||
|  | ||||
|             i += 1 | ||||
|     except TypeError: | ||||
|         print(oColors.brightRed + "Aborted checking for plugins." + oColors.standardWhite) | ||||
|         print(oColors.brightRed + "Error occured: Aborted checking for updates." + oColors.standardWhite) | ||||
|     print(oColors.brightYellow + f"Old packages: [{oldPackages}/{i}]" + oColors.standardWhite) | ||||
|  | ||||
|  | ||||
| @@ -131,10 +166,12 @@ def updateInstalledPackage(inputSelectedObject='all'): | ||||
|     i = 0 | ||||
|     pluginsUpdated = 0 | ||||
|     indexNumberUpdated = 0 | ||||
|     print(f"Updating: {inputSelectedObject}") | ||||
|     print("Index | Name                        |   Old V.   |   New V.") | ||||
|     print(oColors.brightBlack + f"Updating: {inputSelectedObject}" + oColors.standardWhite) | ||||
|     print("┌─────┬────────────────────────────────┬────────────┬──────────┐") | ||||
|     print("│ No. │ Name                           │   Old V.   │   New V. │") | ||||
|     print("└─────┴────────────────────────────────┴────────────┴──────────┘") | ||||
|     try: | ||||
|         for plugin in pluginList: | ||||
|         for plugin in track(pluginList, description="Updating" ,transient=True, complete_style="red"): | ||||
|             try: | ||||
|                 fileName = getFileName(plugin) | ||||
|                 fileVersion = getFileVersion(plugin) | ||||
| @@ -147,21 +184,19 @@ def updateInstalledPackage(inputSelectedObject='all'): | ||||
|                 i += 1 | ||||
|                 continue | ||||
|             pluginIdStr = str(pluginId) | ||||
|  | ||||
|             if pluginId == None: | ||||
|             if pluginId == None or pluginId == '': | ||||
|                 print(oColors.brightRed + "Couldn't find plugin id. Sorry :(" + oColors.standardWhite) | ||||
|                 continue | ||||
|  | ||||
|             if inputSelectedObject == pluginIdStr or re.search(inputSelectedObject, fileName, re.IGNORECASE): | ||||
|                 if INSTALLEDPLUGINLIST[i][3] == True: | ||||
|                     print(f" [{indexNumberUpdated+1}]".ljust(8), end='') | ||||
|                     print(f"{fileName}".ljust(30), end='') | ||||
|                     print(f"{fileName}".ljust(33), end='') | ||||
|                     print(f"{fileVersion}".ljust(8), end='') | ||||
|                     print("     ", end='') | ||||
|                     print(f"{latestVersion}".ljust(8)) | ||||
|  | ||||
|                     if not checkConfig().localPluginFolder: | ||||
|                         if checkConfig().sftp_pathToSeperateDownloadPath is True: | ||||
|                         if checkConfig().sftp_seperateDownloadPath is True: | ||||
|                             pluginPath = checkConfig().sftp_pathToSeperateDownloadPath | ||||
|                         else: | ||||
|                             pluginPath = checkConfig().sftp_folderPath | ||||
| @@ -204,7 +239,7 @@ def updateInstalledPackage(inputSelectedObject='all'): | ||||
|             if inputSelectedObject == 'all': | ||||
|                 if INSTALLEDPLUGINLIST[i][3] == True: | ||||
|                     print(f" [{indexNumberUpdated+1}]".ljust(8), end='') | ||||
|                     print(f"{fileName}".ljust(30), end='') | ||||
|                     print(f"{fileName}".ljust(33), end='') | ||||
|                     print(f"{fileVersion}".ljust(8), end='') | ||||
|                     print("     ", end='') | ||||
|                     print(f"{latestVersion}".ljust(8)) | ||||
| @@ -214,7 +249,6 @@ def updateInstalledPackage(inputSelectedObject='all'): | ||||
|                             pluginPath = checkConfig().sftp_pathToSeperateDownloadPath | ||||
|                         else: | ||||
|                             pluginPath = checkConfig().sftp_folderPath | ||||
|                         pluginPath = checkConfig().sftp_folderPath | ||||
|                         pluginPath = f"{pluginPath}/{plugin}" | ||||
|                         sftp = createSFTPConnection() | ||||
|                         indexNumberUpdated += 1 | ||||
| @@ -249,10 +283,10 @@ def updateInstalledPackage(inputSelectedObject='all'): | ||||
|  | ||||
|             i = i + 1 | ||||
|     except TypeError: | ||||
|         print(oColors.brightRed + "Aborted updating for plugins." + oColors.standardWhite) | ||||
|     print(f"[{pluginsUpdated}/{i}] Plugins updated") | ||||
|         print(oColors.brightRed + "Error occured: Aborted updating for plugins." + oColors.standardWhite) | ||||
|     print(oColors.brightYellow + f"[{pluginsUpdated}/{i}] Plugins updated" + oColors.standardWhite) | ||||
|     if inputSelectedObject =='all' and pluginsUpdated == 0: | ||||
|         print(oColors.brightGreen + "All plugins are on the latest version!" + oColors.standardWhite) | ||||
|         print(oColors.brightGreen + "All found plugins are on the latest version!" + oColors.standardWhite) | ||||
|  | ||||
|  | ||||
| def getInstalledPlugin(localFileName, localFileVersion): | ||||
|   | ||||
| @@ -13,11 +13,11 @@ def clearConsole(): | ||||
| # https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences | ||||
| class oColors: | ||||
|     standardWhite = "\033[0m" | ||||
|     brightYellow = "\033[93m" | ||||
|     brightMagenta = "\033[95m" | ||||
|     brightBlack = "\033[90m" | ||||
|     brightRed = "\033[91m" | ||||
|     brightGreen = "\033[92m" | ||||
|     darkMagenta = "\033[35m" | ||||
|     brightYellow = "\033[93m" | ||||
|     brightMagenta = "\033[95m" | ||||
|  | ||||
|  | ||||
| def printLogo(): | ||||
| @@ -72,9 +72,12 @@ def printLogo(): | ||||
|     oColors.standardWhite) | ||||
|     print() | ||||
|     print() | ||||
|     print(oColors.brightYellow + "                                      [" + oColors.darkMagenta + "By Neocky" + | ||||
|     oColors.brightYellow + "]                                    " + oColors.standardWhite) | ||||
|     print() | ||||
|     print(oColors.brightBlack + "                        ┌────────────────────────────────────┐" + oColors.standardWhite) | ||||
|     print(oColors.brightBlack + "                        │             [" + oColors.brightMagenta + "By Neocky" +oColors.brightBlack + | ||||
|      "]            │                                   " + oColors.standardWhite) | ||||
|     print(oColors.brightBlack + "                        │  " + oColors.brightMagenta + "https://github.com/Neocky/pluGET" + oColors.brightBlack + | ||||
|      "  │                                                  " + oColors.standardWhite) | ||||
|     print(oColors.brightBlack + "                        └────────────────────────────────────┘" + oColors.standardWhite) | ||||
|  | ||||
|  | ||||
| def printHorizontalLine(): | ||||
|   | ||||
| @@ -12,12 +12,88 @@ from handlers.handle_sftp import createSFTPConnection | ||||
|  | ||||
| def getHelp(): | ||||
|     print(oColors.brightYellow+ "Need help?" + oColors.standardWhite) | ||||
|     print("Check the docs here:") | ||||
|     print("For a list of all commands: 'help command'") | ||||
|     print("Or check the docs here:") | ||||
|     print("https://github.com/Neocky/pluGET") | ||||
|     print("Or go to the official discord.") | ||||
|     print("The link for discord can also be found on Github!") | ||||
|  | ||||
|  | ||||
| def getCommandHelp(optionalParams): | ||||
|     if optionalParams == None: | ||||
|         optionalParams = 'all' | ||||
|     print(oColors.brightBlack + f"Help for command: {optionalParams}" +oColors.standardWhite) | ||||
|     print("┌────────────────┬─────────────────┬─────────────────┬────────────────────────────────────────────────────────┐") | ||||
|     print("│ Command        │ Selected Object │ Optional Params │ Function                                               │") | ||||
|     print("└────────────────┴─────────────────┴─────────────────┴────────────────────────────────────────────────────────┘") | ||||
|     while True: | ||||
|         if optionalParams == 'all': | ||||
|             print(oColors.brightBlack + " GENERAL:" + oColors.standardWhite) | ||||
|             print("  exit             ./anything                          Exit pluGET") | ||||
|             print("  help             ./anything                          Get general help") | ||||
|             print("  help             command           all/command       Get specific help to the commands of pluGET") | ||||
|             print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  get              Name/ID           Version           Downloads the latest version of a plugin") | ||||
|             print("  check            Name/ID/all                         Check for an update of an installed plugin") | ||||
|             print("  update           Name/ID/all                         Update installed plugins to the latest version") | ||||
|             print("  search           Name                                Search for a plugin and download the latest version") | ||||
|             print("  remove           Name/ID                             Delete an installed plugin") | ||||
|             print(oColors.brightBlack + " SERVER SOFTWARE MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  check            serverjar                           Check installed server software for an update") | ||||
|             print("  update           serverjar         Version/Latest    Update installed server software to a specific version") | ||||
|             print("  get-paper        PaperVersion      McVersion         Downloads a specific PaperMc version") | ||||
|             break | ||||
|  | ||||
|         if optionalParams == 'exit': | ||||
|             print(oColors.brightBlack + " GENERAL:" + oColors.standardWhite) | ||||
|             print("  exit             ./anything                          Exit pluGET") | ||||
|             break | ||||
|  | ||||
|         if optionalParams == 'help': | ||||
|             print(oColors.brightBlack + " GENERAL:" + oColors.standardWhite) | ||||
|             print("  help             ./anything                          Get general help") | ||||
|             print("  help             command           all/command       Get specific help to the commands of pluGET") | ||||
|             break | ||||
|  | ||||
|         if optionalParams == 'get': | ||||
|             print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite) | ||||
|             print(print("  get              Name/ID           Version           Downloads the latest version of a plugin")) | ||||
|             break | ||||
|  | ||||
|         if optionalParams == 'check': | ||||
|             print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  check            Name/ID/all                         Check for an update of an installed plugin") | ||||
|             print(oColors.brightBlack + " SERVER SOFTWARE MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  check            serverjar                           Check installed server software for an update") | ||||
|             break | ||||
|  | ||||
|         if optionalParams == 'update': | ||||
|             print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  update           Name/ID/all                         Update installed plugins to the latest version") | ||||
|             print(oColors.brightBlack + " SERVER SOFTWARE MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  update           serverjar         Version/Latest    Update installed server software to a specific version") | ||||
|             break | ||||
|  | ||||
|         if optionalParams == 'search': | ||||
|             print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  search           Name                                Search for a plugin and download the latest version") | ||||
|             break | ||||
|  | ||||
|         if optionalParams == 'remove': | ||||
|             print(oColors.brightBlack + " PLUGIN MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  remove           Name/ID                             Delete an installed plugin") | ||||
|             break | ||||
|  | ||||
|         if optionalParams == 'get-paper': | ||||
|             print(oColors.brightBlack + " SERVER SOFTWARE MANAGEMENT:" + oColors.standardWhite) | ||||
|             print("  get-paper        PaperVersion      McVersion         Downloads a specific PaperMc version") | ||||
|             break | ||||
|  | ||||
|         else: | ||||
|             print(oColors.brightRed + "Error: Help for Command not found. Please try again. :(" + oColors.standardWhite) | ||||
|             break | ||||
|  | ||||
|  | ||||
| def check_local_plugin_folder(): | ||||
|     if checkConfig().localPluginFolder: | ||||
|         if checkConfig().seperateDownloadPath: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Neocky
					Neocky