[Minetest] Tweak the way the seever list is filtered

master
ShadowNinja 2013-12-30 23:03:54 -06:00
parent d650c9bb71
commit 2b990a3b6a
1 changed files with 61 additions and 63 deletions

View File

@ -8,56 +8,6 @@ from supybot.commands import *
import supybot.ircdb as ircdb
import supybot.utils as utils
def filterServersByName(server_list, arg, field):
result = []
for i in range(len(server_list)):
if arg.lower().strip()\
in server_list[i][field].lower().strip():
result.append(server_list[i])
return result
def filterServersByNum(server_list, arg, field, typeconv):
result = []
if arg.startswith("<"): # less comparing
try: num = typeconv(arg[1:])
except: return
for i in range(0, len(server_list)):
if typeconv(server_list[i][field]) < num:
result.append(server_list[i])
elif arg.startswith(">"): # more comparing
try: num = typeconv(arg[1:])
except: return
for i in range(0, len(server_list)):
if typeconv(server_list[i][field]) > num:
result.append(server_list[i])
elif arg.startswith("!"): # NOT
try: num = typeconv(arg[1:])
except: return
for i in range(0, len(server_list)):
if typeconv(server_list[i][field]) != num:
result.append(server_list[i])
elif arg == "highest":
highest = [0, 0]
for i in range(0, len(server_list)):
if typeconv(server_list[i][field]) > highest[0]:
highest[0] = typeconv(server_list[i][field])
highest[1] = i
result = [server_list[highest[1]]]
elif arg == "lowest":
lowest = [None, 0]
for i in range(0, len(server_list)):
if lowest[0] is None or\
typeconv(server_list[i][field]) < lowest[0]:
lowest[0] = typeconv(server_list[i][field])
lowest[1] = i
result = [server_list[lowest[1]]]
else:
try: num = typeconv(arg)
except: return server_list
for i in range(len(server_list)):
if typeconv(server_list[i][field]) == num:
result.append(server_list[i])
return result
class Minetest(callbacks.Plugin):
"""Adds some Minetest-related commands
@ -120,7 +70,7 @@ class Minetest(callbacks.Plugin):
for option in options:
if len(server_list) > 0:
server_list = self.serverSearchFilters[option[0]]\
(self.serverSearchFilters, server_list, option[1])
(self, server_list, option[1])
if len(server_list) == 0:
irc.reply("No results.")
@ -150,21 +100,69 @@ class Minetest(callbacks.Plugin):
"port": "something"
})])
#--Helpers--#
# Helpers
def filterServersByName(self, server_list, arg, field):
result = []
for i in range(len(server_list)):
if arg.lower().strip()\
in server_list[i][field].lower().strip():
result.append(server_list[i])
return result
def filterServersByNum(self, server_list, arg, field, typeconv):
result = []
if arg.startswith("<"): # less comparing
try: num = typeconv(arg[1:])
except: return
for i in range(0, len(server_list)):
if typeconv(server_list[i][field]) < num:
result.append(server_list[i])
elif arg.startswith(">"): # more comparing
try: num = typeconv(arg[1:])
except: return
for i in range(0, len(server_list)):
if typeconv(server_list[i][field]) > num:
result.append(server_list[i])
elif arg.startswith("!"): # NOT
try: num = typeconv(arg[1:])
except: return
for i in range(0, len(server_list)):
if typeconv(server_list[i][field]) != num:
result.append(server_list[i])
elif arg == "highest":
highest = [0, 0]
for i in range(0, len(server_list)):
if typeconv(server_list[i][field]) > highest[0]:
highest[0] = typeconv(server_list[i][field])
highest[1] = i
result = [server_list[highest[1]]]
elif arg == "lowest":
lowest = [None, 0]
for i in range(0, len(server_list)):
if lowest[0] is None or\
typeconv(server_list[i][field]) < lowest[0]:
lowest[0] = typeconv(server_list[i][field])
lowest[1] = i
result = [server_list[lowest[1]]]
else:
try: num = typeconv(arg)
except: return server_list
for i in range(len(server_list)):
if typeconv(server_list[i][field]) == num:
result.append(server_list[i])
return result
serverSearchFilters = {
"address": lambda filters, server_list, arg: filters["byName"](server_list, arg, "address"),
"name": lambda filters, server_list, arg: filters["byName"](server_list, arg, "name"),
"version": lambda filters, server_list, arg: filters["byName"](server_list, arg, "version"),
"game": lambda filters, server_list, arg: filters["byName"](server_list, arg, "gameid"),
"players": lambda filters, server_list, arg: filters["byNum"](server_list, arg, "clients", int),
"ping": lambda filters, server_list, arg: filters["byNum"](server_list, arg, "ping", float),
"port": lambda filters, server_list, arg: filters["byNum"](server_list, arg, "port", int),
"byName": filterServersByName,
"byNum" : filterServersByNum
"address": lambda self, server_list, arg: self.filterServersByName(server_list, arg, "address"),
"name": lambda self, server_list, arg: self.filterServersByName(server_list, arg, "name"),
"version": lambda self, server_list, arg: self.filterServersByName(server_list, arg, "version"),
"game": lambda self, server_list, arg: self.filterServersByName(server_list, arg, "gameid"),
"players": lambda self, server_list, arg: self.filterServersByNum(server_list, arg, "clients", int),
"ping": lambda self, server_list, arg: self.filterServersByNum(server_list, arg, "ping", float),
"port": lambda self, server_list, arg: self.filterServersByNum(server_list, arg, "port", int)
}
def ServerUp(self, address, port):