phenny/modules/wargame.py

116 lines
3.6 KiB
Python
Raw Normal View History

2011-02-09 22:38:26 -05:00
#!/usr/bin/python2
# -*- coding: utf-8 -*-
"""
wargame.py - wargame module for the vtluug wargame
http://wargame.vtluug.org
author: Casey Link <unnamedrambler@gmail.com>
"""
import random
2011-09-22 14:17:27 -04:00
import configparser, os
from urllib.parse import quote as urlquote
from urllib.request import urlopen
from urllib.error import HTTPError
2011-02-09 22:38:26 -05:00
from lxml import etree
from lxml import objectify
from datetime import datetime
import re
APIURL = "http://wargame.vtluug.org/scoreboard.xml"
class server(object):
def __init__(self, name):
self.name = name
self.players = []
def __str__(self):
s = "%s - %d players: " %(self.name, len(self.players))
2011-09-22 14:17:27 -04:00
s += ", ".join([str(p) for p in self.players])
2011-02-09 22:38:26 -05:00
return s
class player(object):
def __init__(self, name):
self.name = name
self.score = "-1"
self.isOwner = False
def __str__(self):
return "%s%s: %s points" %(self.name, " (Current King)" if self.isOwner else "", self.score)
def __cmp__(self, other):
if int(self.score) < int(other.score):
return -1
elif int(self.score) == int(other.score):
return 0
else:
return 1
def parse_player(player_element):
p = player( player_element.attrib.get("name") )
p.score = player_element.attrib.get("score")
p.isOwner = player_element.attrib.get("isOwner") == "True"
return p
def parse_server(server_element):
s = server( server_element.name.text )
for player_e in server_element.players.player:
s.players.append( parse_player( player_e ) )
s.players.sort()
s.players.reverse()
return s
def wargame(phenny, input):
if input.group(2) is not None:
rest = input.group(2)
m = re.match("^scores\s+(\S+)\s*$",rest)
if m is not None and len( m.groups() ) == 1:
return wargame_scores(phenny, m.group(1))
m = re.match("^scores\s*$",rest)
if m is not None:
return wargame_scores(phenny, "Total")
m = re.match("^help\s*$",rest)
if m is not None:
phenny.say("VTLUUG King of the Root - http://wargame.vtluug.org'")
phenny.say("syntax: '.wargame' to see network status and target list'")
phenny.say("syntax: '.wargame scores <target name>' to get current scores for a target'")
return
else:
phenny.say("hmm.. I don't know what you mean. try '.wargame help'")
return
try:
req = urlopen(APIURL)
2011-09-22 14:17:27 -04:00
except HTTPError as e:
2011-02-09 22:38:26 -05:00
phenny.say("uhoh. try again later, mmkay?")
return
root = objectify.parse(req).getroot()
online = root.attrib.get("online") == "True"
updated = root.attrib.get("updated")
servers = []
for server_e in root.servers.server:
servers.append( parse_server( server_e ) )
2011-09-22 14:17:27 -04:00
phenny.say( "wargame network is %s. last updated %s. available targets: %s" % ( "ONLINE" if online else "OFFLINE", updated, ", ".join([s.name for s in servers])) )
2011-02-09 22:38:26 -05:00
def wargame_scores(phenny, s_name):
try:
req = urlopen(APIURL)
2011-09-22 14:17:27 -04:00
except HTTPError as e:
2011-02-09 22:38:26 -05:00
phenny.say("uhoh. try again later, mmkay?")
return
root = objectify.parse(req).getroot()
online = root.attrib.get("online") == "True"
updated = root.attrib.get("updated")
servers = {}
for server_e in root.servers.server:
s = parse_server( server_e )
servers[s.name] = s
if not s_name in servers:
phenny.say("sorry, i couldn't find %s" % ( s_name ))
return
phenny.say( str(servers[s_name]) )
wargame.commands = ['wargame']