diff --git a/COMMANDS.md b/COMMANDS.md
index 63e625c..d3cee2a 100644
--- a/COMMANDS.md
+++ b/COMMANDS.md
@@ -53,6 +53,9 @@ Required arguments are enclosed in { and }, optional arguments are enclosed in \
| - >{number} finds server with players > x | |
| - <{number} finds server with players < < | |
| - [=]{number} finds server with x players | |
+ | ping:{modifier} uses Player count | |
+ | - same modifiers as players: | |
+ | i:{number/'last'} return Server no. x | |
serverup.py | | |
!up {IP/hostname} [port] | Check if server at IP/hostname is up | Anyone |
| Supports multiple Ports e.g. 123-456,999 | |
diff --git a/server.py b/server.py
index c3982f6..ac5ecdd 100755
--- a/server.py
+++ b/server.py
@@ -44,13 +44,13 @@ def by_players(tbl, arg):
ranking = (-1, None)
for i in range(0, len(tbl)):
if int(tbl[i]["clients"]) > ranking[0]:
- ranking = (tbl[i]["clients"], i)
+ ranking = (int(tbl[i]["clients"]), i)
return ranking[1]
elif arg == "least": # least
ranking = (9999, None)
for i in range(0, len(tbl)):
if int(tbl[i]["clients"]) < ranking[0]:
- ranking = (tbl[i]["clients"], i)
+ ranking = (int(tbl[i]["clients"]), i)
return ranking[1]
else:
if arg.startswith("="): # support "3" and "=3"
@@ -65,6 +65,57 @@ def by_players(tbl, arg):
return nu
return None
+def by_ping(tbl, arg):
+ if arg.startswith("<"): # less comparing
+ try:
+ nu = float(arg[1:])
+ except:
+ return None
+ for i in range(0, len(tbl)):
+ if float(tbl[i]["ping"]) < nu:
+ return i
+ elif arg.startswith(">"): # more comparing
+ try:
+ nu = int(arg[1:])
+ except:
+ return None
+ for i in range(0, len(tbl)):
+ if float(tbl[i]["ping"]) > nu:
+ return i
+ elif arg == "most": # most
+ ranking = (-1, None)
+ for i in range(0, len(tbl)):
+ if float(tbl[i]["ping"]) > ranking[0]:
+ ranking = (float(tbl[i]["ping"]), i)
+ return ranking[1]
+ elif arg == "least": # least
+ ranking = (9999, None)
+ for i in range(0, len(tbl)):
+ if float(tbl[i]["ping"]) < ranking[0]:
+ ranking = (float(tbl[i]["ping"]), i)
+ return ranking[1]
+ else:
+ if arg.startswith("="): # support "0.6" and "=0.6"
+ arg = arg[1:]
+ try:
+ nu = float(arg)
+ except:
+ return None
+ for i in range(0, len(tbl)):
+ if float(tbl[i]["clients"]) == nu:
+ return i
+ return nu
+ return None
+
+def by_index(tbl, arg):
+ if arg == "last":
+ return len(tbl) - 1
+ else:
+ try:
+ return int(arg)
+ except:
+ return None
+
def server(phenny, input):
for x in phenny.bot.commands["high"].values():
if x[0].__name__ == "aa_hook":
@@ -85,6 +136,12 @@ def server(phenny, input):
elif arg.startswith("players:"):
choicefunc = by_players
carg = arg[len("players:"):]
+ elif arg.startswith("ping:"):
+ choicefunc = by_ping
+ carg = arg[len("ping:"):]
+ elif arg.startswith("i:"):
+ choicefunc = by_index
+ carg = arg[len("i:"):]
else:
choicefunc = by_name
carg = None
@@ -93,7 +150,7 @@ def server(phenny, input):
server_list = json.loads(text)["list"]
choice = choicefunc(server_list, carg)
if choice == None:
- phenny.reply("No results")
+ return phenny.reply("No results")
name = server_list[choice]["name"]
address = server_list[choice]["address"]