[serverup] simplify
parent
4ad3d24507
commit
a39a538d80
107
serverup.py
107
serverup.py
|
@ -1,79 +1,58 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
"""
|
"""
|
||||||
serverup.py - Minetest server ping module
|
serverup.py - Minetest server ping module
|
||||||
Copyright 2014, sfan5
|
Copyright 2018, sfan5
|
||||||
Licensed under GNU General Public License v2.0
|
Licensed under GNU General Public License v2.0
|
||||||
"""
|
"""
|
||||||
|
import socket
|
||||||
|
import time
|
||||||
|
|
||||||
import socket, time
|
def check(address, port):
|
||||||
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
sock.settimeout(2.0)
|
||||||
|
try:
|
||||||
|
buf = b"\x4f\x45\x74\x03\x00\x00\x00\x01"
|
||||||
|
sock.sendto(buf, (address, port))
|
||||||
|
start = time.time()
|
||||||
|
data = sock.recv(1024)
|
||||||
|
if not data:
|
||||||
|
return
|
||||||
|
end = time.time()
|
||||||
|
peer_id = data[12:14]
|
||||||
|
buf = b"\x4f\x45\x74\x03" + peer_id + b"\x00\x00\x03"
|
||||||
|
sock.sendto(buf, (address, port))
|
||||||
|
sock.close()
|
||||||
|
return (end - start)
|
||||||
|
except (socket.gaierror, socket.error):
|
||||||
|
return
|
||||||
|
|
||||||
def serverup(phenny, input):
|
def serverup(phenny, input):
|
||||||
arg = input.group(2)
|
arg = input.group(2)
|
||||||
if not arg:
|
if not arg:
|
||||||
return phenny.reply("give me an address (and port if you want)")
|
return phenny.reply("give me an address and port (optional)")
|
||||||
if not '.' in arg:
|
|
||||||
return phenny.reply("invalid address")
|
arg = arg.replace(":", " ")
|
||||||
if ':' in arg:
|
|
||||||
return phenny.reply("use 'example.org 1337' instead of 'example.org:1337'")
|
|
||||||
if ' ' in arg:
|
if ' ' in arg:
|
||||||
address = arg.split(' ')[0]
|
address, port = arg.split(' ')
|
||||||
port = arg.split(' ')[1]
|
try:
|
||||||
if '-' in port or ',' in port:
|
port = int(port)
|
||||||
ports = []
|
except ValueError:
|
||||||
ports_ = port.split(',')
|
return phenny.reply("invalid port")
|
||||||
for p in ports_:
|
|
||||||
if '-' in p:
|
|
||||||
if len(p.split('-')) != 2:
|
|
||||||
return phenny.reply("invalid port list")
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
a = int(p.split('-')[0])
|
|
||||||
except:
|
|
||||||
return phenny.reply("invalid port: %s" % p.split('-')[0])
|
|
||||||
try:
|
|
||||||
b = int(p.split('-')[1]) + 1
|
|
||||||
except:
|
|
||||||
return phenny.reply("invalid port: %s" % p.split('-')[1])
|
|
||||||
for i in range(a, b):
|
|
||||||
ports.append(i)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
ports.append(int(p))
|
|
||||||
except:
|
|
||||||
return phenny.reply("invalid port: %s" % p)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
ports = [int(port)]
|
|
||||||
except:
|
|
||||||
return phenny.reply("invalid port: %s" % port)
|
|
||||||
else:
|
else:
|
||||||
address = arg
|
address = arg
|
||||||
ports = [30000]
|
port = 30000
|
||||||
if len(ports) != 1 and input.sender.startswith('#') and not (input.admin or input.owner):
|
|
||||||
return phenny.reply("to check multiple ports please use private chat")
|
if '.' not in address:
|
||||||
if len(ports) > 6 and not (input.admin or input.owner): # owner and admins of the bot can bypass the limit
|
return phenny.reply("invalid address")
|
||||||
return phenny.reply("ow, too many ports!")
|
if port < 1024 and port >= 2**16:
|
||||||
for port in ports:
|
return phenny.reply("invalid port")
|
||||||
repres = address + ':' + str(port)
|
|
||||||
try:
|
desc = "%s:%d" % (address, port)
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
result = check(address, port)
|
||||||
sock.settimeout(2.5)
|
if result is None:
|
||||||
buf = b"\x4f\x45\x74\x03\x00\x00\x00\x01"
|
phenny.say("%s seems to be down" % desc)
|
||||||
sock.sendto(buf, (address, port))
|
else:
|
||||||
start = time.time()
|
phenny.say("%s is up (%dms)" % (desc, result*1000))
|
||||||
data, addr = sock.recvfrom(1000)
|
|
||||||
if data:
|
|
||||||
end = time.time()
|
|
||||||
peer_id = data[12:14]
|
|
||||||
buf = b"\x4f\x45\x74\x03" + peer_id + b"\x00\x00\x03"
|
|
||||||
sock.sendto(buf, (address, port))
|
|
||||||
sock.close()
|
|
||||||
t = (end - start) * 1000
|
|
||||||
phenny.say("%s is up (%dms)" % (repres,t))
|
|
||||||
else:
|
|
||||||
phenny.say("%s seems to be down " % repres)
|
|
||||||
except:
|
|
||||||
phenny.say("%s seems to be down " % repres)
|
|
||||||
|
|
||||||
serverup.commands = ['up']
|
serverup.commands = ['up']
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue