From 1a7ed4243a5c46eb33cbef9c034a17cd37ce1f72 Mon Sep 17 00:00:00 2001 From: Bigsk Date: Fri, 30 Oct 2020 18:45:19 +0800 Subject: [PATCH] Update Requirement --- command.py | 145 ++++++++++++++++++++++++++++++++++++++ old/0.1.0/requirement.txt | 2 - requirement.txt | 7 ++ 3 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 command.py delete mode 100644 old/0.1.0/requirement.txt create mode 100644 requirement.txt diff --git a/command.py b/command.py new file mode 100644 index 0000000..1c031c3 --- /dev/null +++ b/command.py @@ -0,0 +1,145 @@ +#------------------# +import os,requests,json,time,sys,psutil,string,platform,glob,getpass,shutil,hashlib,random,subprocess,math,zipfile,threading +#------------------# + +class MultiThreadDownload(threading.Thread): + '''class for Multi-Thread Download''' + def __init__(self,url,startpos,endpos,f): + super(MultiThreadDownload,self).__init__() + self.url = url + self.startpos = startpos + self.endpos = endpos + self.fd = f + + def download(self): + headers = {"Range":"bytes=%s-%s"%(self.startpos,self.endpos)} + res = requests.get(self.url,headers=headers) + self.fd.seek(self.startpos) + self.fd.write(res.content) + + def run(self): + self.download() + +class GMCLCore(object): + '''The Main Class of the Launcher Core''' + '''AuthWay="offline",Account="Steve",Password="",GamePath=".minecraft",Memory="1GB",Version="",Java=""''' + ''' + self.GetAuthWay(AuthWay) + self.GetAccoutn(Account) + self.__Password=Password + self.__GamePath=GamePath + self.GetMemory(Memory) + self.__Version=Version + self.__Java=Java + ''' + def __init__(self,LauncherName="GMCLCore",LauncherVersion="A0.2.0"): + self.__LauncherName=LauncherName + self.__LauncherVersion=LauncherVersion + self.__UserAgent={'User-Agent':LauncherName+'/'+LauncherVersion+' ((GMCL Core Alpha 0.2.0;Alpha))'} + def GetAuthWay(self,AuthWay): + if(AuthWay=="offline"): + self.__AuthWay="offline" + elif(AuthWay=="online"): + self.__AuthWay="online" + else: + return "Error:Wrong Auth Way." + def GetMemory(self,Memory): + if(Memory.count("B")>1 or Memory.count("b")>1): + return "Error:Wrong Memory Unit" + else: + if(Memory.count("GB")==1): + self.__Memory=Memory.replace("GB","") + elif(Memory.count("MB")==1): + self.__Memory=str(float(Memory.replace("MB",""))/1024) + elif(Memory.count("Gb")==1): + self.__Memory=str(float(Memory.replace("Gb",""))/8) + elif(Memory.count("Mb")==1): + self.__Memory=str(float(Memory.replace("Mb",""))/8/1024) + else: + return "Error:Wrong Memory Unit." + def GetAccount(self,Account): + if(self.__AuthWay=="online"): + if(Account.count("@")==1): + self.OnlineAuth(Account,self._Password) + else: + return "Error:Wrong Account." + elif(self.__AuthWay=="offline"): + if(Account.count("@")==1): + return "Error:Wrong Account." + else: + self.OfflineAuth(Account) + else: + pass + def GetUUID(self,Account): + if(self.__AuthWay=="offline"): + result="OfflinePlayer:"+Account + md5=hashlib.md5() + md5.update(result.encode(encoding='utf-8')) + return md5.hexdigest() + else: + return "Error:Wrong Auth Way." + def OnlineAuth(self,Account,Password): + if(json.loads(requests.get("https://authserver.mojang.com/",headers=self.__UserAgent).text)['status']=="OK"): + result=json.loads(requests.post("https://authserver.mojang.com/authenticate",'{"agent":{"name":"Minecraft","Version":1},"username":"'+Account+'","password":"'+Password+'"}',headers=self.__UserAgent).text) + self.__Token=result['accessToken'] + self.__UUID=result['selectedProfile']['id'] + self.__ID=result['selectedProfile']['name'] + else: + return "Error:Fail to request Mojang\'s Auth Server." + def OfflineAuth(self,Account): + self.__ID=Account + self.__UUID=self.GetUUID(Account) + self.__Token="" + def GetJavaPath(self): + if(platform.system()=="Windows"): + path="C:/" + elif(platform.system()=="Linux"): + path="/" + else: + path="/" + i=0 + for ipath in os.listdir(Path): + FullDir=os.path.join(path,ipath) + if(os.path.isfile(FullDir)): + if("javaw.exe" in os.path.split(FullDir)[1]): + return FullDir + i+=1 + if(i==1): + break + def SetJavaPath(self,path): + if(path==None): + return "Error:Wrong local address for java." + else: + self.__JAVA=path + def Download(self,DownloadFrom,DownloadTo,ThreadNum=3): + if(DownloadFrom=="" or DownloadTo==""): + return "Error:Wrong online address or local address for download." + else: + url = DownloadFrom + filename = DownloadTo + filesize = int(requests.head(url).headers['Content-Length']) + + threadnum = ThreadNum + threading.BoundedSemaphore(threadnum) + step = filesize // threadnum + mtd_list = [] + start = 0 + end = -1 + + tempf = open(filename,'w') + tempf.close() + with open(filename,'rb+') as f: + fileno = f.fileno() + while end < filesize -1: + start = end +1 + end = start + step -1 + if end > filesize: + end = filesize + dup = os.dup(fileno) + fd = os.fdopen(dup,'rb+',-1) + t = MultiThreadDownload(url,start,end,fd) + t.start() + mtd_list.append(t) + + for i in mtd_list: + i.join() diff --git a/old/0.1.0/requirement.txt b/old/0.1.0/requirement.txt deleted file mode 100644 index a349fda..0000000 --- a/old/0.1.0/requirement.txt +++ /dev/null @@ -1,2 +0,0 @@ -requests -psutil \ No newline at end of file diff --git a/requirement.txt b/requirement.txt new file mode 100644 index 0000000..5909e2e --- /dev/null +++ b/requirement.txt @@ -0,0 +1,7 @@ +requests +psutil +random +subprocess +math +zipfile +threading \ No newline at end of file