diff --git a/plugins/mctools.py b/plugins/mctools.py index 43327a9..f80d2af 100755 --- a/plugins/mctools.py +++ b/plugins/mctools.py @@ -2,9 +2,15 @@ from util import hook, http import socket import json import struct -import DNS ## Please remember to install the dependancy 'pydns' -def mccolorconvert(motd): +try: + import DNS ## Please remember to install the dependancy 'pydns' + pydns_installed = True +except ImportError: + pydns_installed = False + + +def format_motd(motd): empty = "" colors = [u"\x0300,\xa7f", u"\x0301,\xa70", u"\x0302,\xa71", u"\x0303,\xa72", u"\x0304,\xa7c", u"\x0305,\xa74", u"\x0306,\xa75", u"\x0307,\xa76", u"\x0308,\xa7e", u"\x0309,\xa7a", u"\x0310,\xa73", u"\x0311,\xa7b", u"\x0312,\xa71", u"\x0313,\xa7d", u"\x0314,\xa78", u"\x0315,\xa77", u"\x02,\xa7l", u"\x0310,\xa79", u"\x09,\xa7o", u"\x13,\xa7m", u"\x0f,\xa7r", u"\x15,\xa7n"]; for s in colors: @@ -13,6 +19,7 @@ def mccolorconvert(motd): motd = motd.replace(u"\xa7k", empty) return motd + def mcping_connect(host, port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: @@ -43,10 +50,11 @@ def mcping_connect(host, port): return "Error pinging " + host + ":" + str(port) +\ ", is it up? Double-check your address!" + def srvData(domain): DNS.ParseResolvConf() - srv_req = DNS.Request(qtype = 'srv') - srv_result = srv_req.req('_minecraft._tcp.%s' % domain) + srv_req = DNS.Request(qtype='srv') + srv_result = srv_req.req('_minecraft._tcp.{}'.format(domain)) for getsrv in srv_result.answers: if getsrv['typename'] == 'SRV': @@ -122,21 +130,23 @@ def mcping(inp): port = int(port) except: return "error: invalid port!" - return mccolorconvert(mcping_connect(host, port)) + return format_motd(mcping_connect(host, port)) else: host = inp port = 25565 - rdata = mccolorconvert(mcping_connect(host, port)) + rdata = format_motd(mcping_connect(host, port)) if 'is it up' in rdata: - getdata = srvData(inp) - try: - host = str(getdata[1]) - port = int(getdata[0]) - return mccolorconvert(mcping_connect(host, port)) - except: + if pydns_installed: + getdata = srvData(inp) + try: + host = str(getdata[1]) + port = int(getdata[0]) + return format_motd(mcping_connect(host, port)) + except: + return "Error pinging %s, is it up? Double-check your address!" % inp + else: return "Error pinging %s, is it up? Double-check your address!" % inp - else: return rdata