Python:HL2Server

From Devicenull's Code

Jump to: navigation, search

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)