-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcsgo_server.py
83 lines (66 loc) · 2.86 KB
/
csgo_server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import discord
import logging
from rcon.source import rcon
from discord.ext.commands import Context
from typing import List
from logging.config import fileConfig
class CSGOServer:
def __init__(self, identifier: int, server_address: str, server_port: int, server_password: str,
RCON_password: str):
fileConfig('logging.conf')
self.logger = logging.getLogger(f'10man.{__name__}')
self.id: int = identifier
self.server_address: str = server_address
self.server_port: int = server_port
self.server_password: str = server_password
self.RCON_password: str = RCON_password
self.available: bool = True
self.gotv: int = None
self.logger.debug(f'Created CSGO Server {self.id}')
self.ctx: Context = None
self.channels: List[discord.VoiceChannel] = None
self.players: List[discord.Member] = None
self.score_message: discord.Message = None
self.team_names: List[str] = None
self.team_scores: List[int] = [0, 0]
def get_context(self, ctx: Context, channels: List[discord.VoiceChannel], players: List[discord.Member],
score_message: discord.Message):
self.ctx = ctx
self.channels = channels
self.players = players
self.score_message = score_message
self.logger.debug(f'ServerID:{self.id} got context')
def set_team_names(self, team_names: List[str]):
self.team_names = team_names
self.logger.debug(f'ServerID:{self.id} got team_names: {team_names}')
def update_team_scores(self, team_scores: List[int]):
self.team_scores = team_scores
self.logger.debug(f'ServerID:{self.id} got team_names: {team_scores}')
def make_available(self):
self.available: bool = True
self.ctx: Context = None
self.channels: List[discord.VoiceChannel] = None
self.players: List[discord.Member] = None
self.score_message: discord.Message = None
self.team_names: List[str] = None
self.team_scores: List[int] = [0, 0]
self.logger.info(f'ServerID:{self.id} is available')
def get_gotv(self) -> int:
if self.gotv is None:
tv_port: str = rcon('tv_port', self.server_address, self.server_port, self.RCON_password)
self.logger.debug(tv_port)
try:
self.gotv = tv_port[CSGOServer.findNthOccur(tv_port, '"', 3) + 1:CSGOServer.findNthOccur(tv_port, '"', 4)]
except ValueError or valve.rcon.RCONMessageError:
self.gotv = None
self.logger.info(f'ServerID={self.id} GoTV={self.gotv}')
return self.gotv
@staticmethod
def findNthOccur(string, ch, N):
occur = 0
for i in range(len(string)):
if string[i] == ch:
occur += 1
if occur == N:
return i
return -1