Python:HL2Server
From Devicenull's Code
This lets you do various actions to HL2 Servers. Depends on Python:HL2Rcon or similar.
import CServer, CHL2Rcon import re, string class CHL2Server(CServer.CServer): def __init__(self,ip,port,rcon_pass): #self.__parent__.__init(self,ip,port,rcon_pass) self.rcon = CHL2Rcon.CHL2Rcon(ip,port,rcon_pass) self._reg_players = re.compile("#([ ]+)([0-9]*) \"(.*)\" (.*) ([0-9:]*) ([0-9]*) ([0-9]*) (.*) ([0-9.:]*)") self._reg_hostname = re.compile("hostname: (.*)") self._reg_map = re.compile("map[ ]+: (.*) at: (.*)") self._reg_maps = re.compile("PENDING:[ ]+ \(fs\) (.*)") def GetPlayers(self): buffer = self.rcon.Execute("status").split("\n") players = [] for CurLine in buffer: #print CurLine.lstrip() RegResult = self._reg_players.search(CurLine.lstrip()) if RegResult: Groups = RegResult.groups() player = {} player['uniqueid'] = Groups[3] player['name'] = Groups[2] player['ip'] = Groups[8] players.append(player) return players def GetInfo(self): buffer = self.rcon.Execute("status").split("\n") hostname = "" map = "" for CurLine in buffer: RegResult = self._reg_hostname.search(CurLine.lstrip()) if RegResult: hostname = RegResult.groups()[0] else: RegResult = self._reg_map.search(CurLine.lstrip()) if RegResult: map = RegResult.groups()[0] return (hostname, map) def GetMaps(self): buffer = self.rcon.Execute("maps *").split("\n") maps = [] for CurLine in buffer: RegResult = self._reg_maps.search(CurLine.lstrip()) if RegResult: maps.append(RegResult.groups()[0]) return maps def KickPlayer(self, PlayerName): Players = self.GetPlayers() for CurPlayer in Players: if (PlayerName == CurPlayer['name']): self.rcon.Execute("kick %s" % CurPlayer['uniqueid']) return elif (PlayerName == CurPlayer['uniqueid']): self.rcon.Execute("kick %s" % CurPlayer['uniqueid']) return raise Exception() def BanPlayer(self, PlayerName, Minutes): Players = self.GetPlayers() for CurPlayer in Players: if (PlayerName == CurPlayer['name']): self.rcon.Execute("banid %i %s" % (Minutes*60,CurPlayer['uniqueid'])) self.rcon.Execute("kick %s" % CurPlayer['uniqueid']) return self.rcon.Execute("banid %i %s" % (Minutes*60,PlayerName)) def ChangeMap(self, NewMap): self.rcon.Execute("changelevel %s" % NewMap) def SendMessage(self, Message): self.rcon.Execute("say %s" % Message)