pyCraft/start.py

110 lines
4.1 KiB
Python
Raw Normal View History

2012-04-05 04:56:21 +02:00
import urllib
import urllib2
import getpass
import sys
2012-04-15 18:49:47 +02:00
import PacketSenderManager
2012-04-06 12:25:30 +02:00
import NetworkManager
import NoGUIstuff
import time
2012-04-05 04:56:21 +02:00
import threading
import wx
2012-04-16 22:09:43 +02:00
import GUI
2012-04-05 04:56:21 +02:00
2012-04-16 22:09:43 +02:00
#pyDev error fix
wx=wx
2012-04-05 04:56:21 +02:00
class MinecraftLoginThread(threading.Thread):
2012-04-16 22:09:43 +02:00
def __init__(self, window, rotationthread, username, password):
2012-04-05 04:56:21 +02:00
threading.Thread.__init__(self)
self.username = username
self.password = password
2012-04-16 22:09:43 +02:00
self.window = window
self.rotationthread = rotationthread
2012-04-05 04:56:21 +02:00
def run(self):
url = 'https://login.minecraft.net'
header = {'Content-Type' : 'application/x-www-form-urlencoded'}
data = {'user' : self.username,
'password' : self.password,
'version' : '13'}
2012-04-06 12:25:30 +02:00
try:
data = urllib.urlencode(data)
req = urllib2.Request(url, data, header)
opener = urllib2.build_opener()
response = opener.open(req)
response = response.read()
except urllib2.URLError:
2012-04-16 22:09:43 +02:00
self.rotationthread.Kill = True
self.window.Status.SetForegroundColour(wx.RED)
self.window.Status.SetLabel('Connection to minecraft.net failed')
2012-04-06 12:25:30 +02:00
return
2012-04-05 04:56:21 +02:00
if(response == "Bad login"):
2012-04-16 22:09:43 +02:00
self.rotationthread.Kill = True
self.window.Status.SetForegroundColour(wx.RED)
self.window.Status.SetLabel('Incorrect username or password')
2012-04-05 04:56:21 +02:00
return
response = response.split(":")
2012-04-16 22:09:43 +02:00
username = response[2]
sessionID = response[3]
KeepConnectionAlive(self.username, self.password).start()
2012-04-16 22:09:43 +02:00
self.window.username = username
self.window.sessionID = sessionID
self.window.loggedIn = True
self.window.handlePostLogin(self.rotationthread)
class KeepConnectionAlive(threading.Thread):
def __init__(self, username, password):
threading.Thread.__init__(self)
self.username = username
self.password = password
def run(self):
2012-04-07 16:02:46 +02:00
while True:
time.sleep(300)
url = 'https://login.minecraft.net'
header = {'Content-Type' : 'application/x-www-form-urlencoded'}
data = {'user' : self.username,
'password' : self.password,
'version' : '13'}
2012-04-06 12:25:30 +02:00
try:
data = urllib.urlencode(data)
req = urllib2.Request(url, data, header)
opener = urllib2.build_opener()
opener.open(req)
except urllib2.URLError:
popup = wx.MessageBox('Keep alive to minecraft.net failed', 'Warning',
wx.OK | wx.ICON_ERROR)
popup.ShowModal()
2012-04-05 04:56:21 +02:00
if __name__ == "__main__":
if (len(sys.argv) > 1):
if(sys.argv[1] == "nogui"):
user = raw_input("Enter your username: ")
passwd = getpass.getpass("Enter your password: ")
derp = NoGUIstuff.loginToMinecraft(user, passwd)
if(derp['Response'] == "Incorrect username/password" or derp['Response'] == "Can't connect to minecraft.net"):
print derp['Response']
sys.exit()
sessionid = derp['SessionID']
print "Logged in as " + derp['Username'] + "! Your session id is: " + sessionid
stuff = raw_input("Enter host and port if any: ")
if ':' in stuff:
StuffEnteredIntoBox = stuff.split(":")
2012-04-14 17:29:04 +02:00
host = StuffEnteredIntoBox[0]
port = int(StuffEnteredIntoBox[1])
else:
host = stuff
port = 25565
connection = NetworkManager.ServerConnection(None, derp['Username'], passwd, sessionid, host, port)
connection.start()
2012-04-15 18:49:47 +02:00
raw_input()
PacketSenderManager.send03(connection.grabSocket(), "/report Test report from pyCraft, hope this works :3")
else:
2012-04-16 22:09:43 +02:00
app = wx.PySimpleApp(0)
Login = GUI.LoginFrame(None, -1, "")
app.SetTopWindow(Login)
Login.Show()
app.MainLoop()