diff --git a/README.md b/README.md index 512ab57..e3bc97c 100755 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ Linux packages needed for install: python, python-dev, libenchant-dev, libenchan CloudBot runs on **Python** *2.7.x*. It is developed on **Ubuntu** *12.04* with **Python** *2.7.3*. It **requires the Python module** `lXML`, and `Enchant` is needed for the spellcheck plugin. +It also **requires** `pydns` and is needed for SRV record lookup for the mctools plugin. The programs `daemon` or `screen` are recomended for the launcher to run optimaly. diff --git a/plugins/mctools.py b/plugins/mctools.py index d866988..c47d11c 100755 --- a/plugins/mctools.py +++ b/plugins/mctools.py @@ -2,6 +2,7 @@ from util import hook, http import socket import json import struct +import DNS ## Please remember to install the dependancy 'pydns' def mccolorconvert(motd): empty = "" @@ -42,6 +43,15 @@ 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) + + for getsrv in srv_result.answers: + if getsrv['typename'] == 'SRV': + data = [getsrv['data'][2],getsrv['data'][3]] + return data @hook.command(autohelp=False) def mclogin(inp, bot=None): @@ -106,6 +116,7 @@ def mcping(inp): "mcping [:port] - Ping a Minecraft server to check status." inp = inp.strip().split(" ")[0] + if ":" in inp: host, port = inp.split(":", 1) try: @@ -113,7 +124,12 @@ def mcping(inp): except: return "error: invalid port!" else: - host = inp - port = 25565 + try: + getdata = srvData(inp) + host = str(getdata[1]) + port = int(getdata[0]) + except: + host = inp + port = 25565 return mccolorconvert(mcping_connect(host, port)) diff --git a/requirements.txt b/requirements.txt index 91c1f29..0759413 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ BeautifulSoup==3.2.1 lxml==3.1beta1 pyenchant==1.6.5 +pydns>=2.3.6