def players_connected(cls, player_list): Db.update_last_seen(player_list.keys()) if len(player_list) > 1: out("** Connected: [{} online]".format(len(player_list))) for steam_id, name in player_list.items(): player_name = Storage.players_online_player_name[steam_id] if Rcon.is_admin(steam_id=steam_id): out("\t{} {} ({}) ADMIN".format(name.ljust(30), player_name.ljust(30), steam_id)) else: out("\t{} {} ({})".format(name.ljust(30), player_name.ljust(30), steam_id)) elif len(player_list) == 1: for steam_id in player_list: player_name = Storage.players_online_player_name[steam_id] if Rcon.is_admin(steam_id=steam_id): out("** Connected: {} {} ({}) ADMIN".format( player_list[steam_id], player_name.ljust(30), steam_id)) else: out("** Connected: {} {} ({})".format( player_list[steam_id], player_name.ljust(30), steam_id))
def init(): # Config.show_keep_alive_after_idle = 1 Config = Factory.get('Config') Lang = Factory.get('Translation') try: Config.printSettings() Db.init() if not ServerControl.is_server_running(): out(Lang.get('server_not_running')) ServerControl.start_server() custom_import(Config.events_config, 'events') #Load events Rcon.init(Config.rcon_host, Config.rcon_port, Config.query_port, Config.rcon_password, Config.rcon_socket_timeout) InputHandler.init() #Activate listening for terminal input #custom_import(Config.events_config,'input') #Load terminal input configuration custom_import(Config.tasks_config, 'tasks') #Load tasks # Prevent threads from dying due to early main completed execution. while True: if Storage.terminate_application is True: exit() time.sleep(1) # Important part of not being a CPU hog. except KeyboardInterrupt: Storage.terminate_application = True
def init(): # Config.show_keep_alive_after_idle = 1 Config = Factory.get('Config') Lang = Factory.get('Translation') try: Config.printSettings() Db.init() if not ServerControl.is_server_running(): out(Lang.get('server_not_running')) ServerControl.start_server() custom_import(Config.events_config,'events') #Load events Rcon.init(Config.rcon_host, Config.rcon_port, Config.query_port, Config.rcon_password, Config.rcon_socket_timeout) InputHandler.init() #Activate listening for terminal input #custom_import(Config.events_config,'input') #Load terminal input configuration custom_import(Config.tasks_config,'tasks') #Load tasks # Prevent threads from dying due to early main completed execution. while True: if Storage.terminate_application is True: exit() time.sleep(1) # Important part of not being a CPU hog. except KeyboardInterrupt: Storage.terminate_application = True
def add_player_to_database(cls, steam_id, steam_name): p, added = Db.create_player(steam_id=steam_id, steam_name=steam_name) if added is True: debug_out('Adding player to database:', steam_name, steam_id, level=1) out('We have a new player! {} ({})'.format(steam_name, steam_id)) else: Db.update_player(steam_id=steam_id,steam_name=steam_name) debug_out('Player already in database:', steam_name, steam_id, level=1)
def parse(packet): if packet.decoded["body"].strip() == 'No Players Connected': player_list = {} else: body = packet.decoded["body"].split("\n") rx = re.compile('[\d]+\. (?P<name>[^,]+), (?P<steamid>[\d]+)', re.IGNORECASE) player_list = {} for line in body: match = rx.search(line) if match is None: #empty string continue steam_id = match.group("steamid") name = match.group("name") player_list[steam_id] = name connected_ids = set(player_list.keys()) - set( Storage.players_online_steam_name.keys()) connected = {} for steam_id in connected_ids: connected[steam_id] = player_list[steam_id] if steam_id not in Storage.players_online_player_name: player = Db.find_player(steam_id=steam_id) if player and player.name: Storage.players_online_player_name[steam_id] = player.name else: Storage.players_online_player_name[steam_id] = "" disconnected_ids = set(Storage.players_online_steam_name.keys()) - set( player_list.keys()) disconnected = {} for steam_id in disconnected_ids: disconnected[steam_id] = Storage.players_online_steam_name[ steam_id] Storage.players_online_steam_name = player_list if len(connected): for steam_id in connected: name = Storage.players_online_steam_name[steam_id] player = Db.find_player(name, steam_id) if player is None: EventHandler.triggerEvent(EventHandler.E_NEW_PLAYER, steam_id, name) EventHandler.triggerEvent(EventHandler.E_CONNECT, connected) if len(disconnected): EventHandler.triggerEvent(EventHandler.E_DISCONNECT, disconnected) return connected, disconnected, Storage.players_online_steam_name
def parse(packet): if packet.decoded["body"].strip() == 'No Players Connected': player_list = {} else: body = packet.decoded["body"].split("\n") rx = re.compile('[\d]+\. (?P<name>[^,]+), (?P<steamid>[\d]+)', re.IGNORECASE) player_list = {} for line in body: match = rx.search(line) if match is None: #empty string continue steam_id = match.group("steamid") name = match.group("name") player_list[steam_id] = name connected_ids = set(player_list.keys()) - set(Storage.players_online_steam_name.keys()) connected = {} for steam_id in connected_ids: connected[steam_id] = player_list[steam_id] if steam_id not in Storage.players_online_player_name: player = Db.find_player(steam_id=steam_id) if player and player.name: Storage.players_online_player_name[steam_id] = player.name else: Storage.players_online_player_name[steam_id] = "" disconnected_ids = set(Storage.players_online_steam_name.keys()) - set(player_list.keys()) disconnected = {} for steam_id in disconnected_ids: disconnected[steam_id] = Storage.players_online_steam_name[steam_id] Storage.players_online_steam_name = player_list if len(connected): for steam_id in connected: name = Storage.players_online_steam_name[steam_id] player = Db.find_player(name,steam_id) if player is None: EventHandler.triggerEvent(EventHandler.E_NEW_PLAYER, steam_id, name) EventHandler.triggerEvent(EventHandler.E_CONNECT, connected) if len(disconnected): EventHandler.triggerEvent(EventHandler.E_DISCONNECT, disconnected) return connected,disconnected,Storage.players_online_steam_name
def add_player_to_database(cls, steam_id, steam_name): p, added = Db.create_player(steam_id=steam_id, steam_name=steam_name) if added is True: debug_out('Adding player to database:', steam_name, steam_id, level=1) out('We have a new player! {} ({})'.format(steam_name, steam_id)) else: Db.update_player(steam_id=steam_id, steam_name=steam_name) debug_out('Player already in database:', steam_name, steam_id, level=1)
def filter_chat(cls,steam_name,player_name,text,line): words=text.split() res=None for word in words: if res is None: res=Db.check_mot(word) if res: player=Db.find_player(steam_name=steam_name) steamid=player.steam_id if player is not None else None if steamid is not None: """Rcon.kick_player(steamid)""" """msg=Lang.get('chat_filter_player_kicked').format(player_name,res)""" msg=Lang.get('chat_filter_forbidden_word').format(player_name,res) Rcon.broadcast(msg, rcon.response_callback_response_only)
def players_disconnected(cls,player_list): Db.update_last_seen(player_list.keys()) if len(player_list) > 1: out("** Disconnected: [{} online]".format(len(player_list))) for steam_id, name in player_list.items(): if Rcon.is_admin(steam_id=steam_id): out("\t{} ({}) ADMIN".format(name.ljust(25),steam_id)) else: out("\t{} ({})".format(name.ljust(25),steam_id)) elif len(player_list) == 1: for steam_id,name in player_list.items(): if Rcon.is_admin(steam_id=steam_id): out("** Disconnected: {} ({}) ADMIN".format(name,steam_id)) else: out("** Disconnected: {} ({})".format(name,steam_id))
def players_disconnected(cls, player_list): Db.update_last_seen(player_list.keys()) if len(player_list) > 1: out("** Disconnected: [{} online]".format(len(player_list))) for steam_id, name in player_list.items(): if Rcon.is_admin(steam_id=steam_id): out("\t{} ({}) ADMIN".format(name.ljust(25), steam_id)) else: out("\t{} ({})".format(name.ljust(25), steam_id)) elif len(player_list) == 1: for steam_id, name in player_list.items(): if Rcon.is_admin(steam_id=steam_id): out("** Disconnected: {} ({}) ADMIN".format( name, steam_id)) else: out("** Disconnected: {} ({})".format(name, steam_id))
def is_admin(steam_id=None, steam_name=None): player = Db.find_player(steam_id=steam_id, steam_name=steam_name) if not player: return False if player.admin: return True return False
def players_connected(cls,player_list): Db.update_last_seen(player_list.keys()) if len(player_list) > 1: out("** Connected: [{} online]".format(len(player_list))) for steam_id,name in player_list.items(): player_name = Storage.players_online_player_name[steam_id] if Rcon.is_admin(steam_id=steam_id): out("\t{} {} ({}) ADMIN".format(name.ljust(30), player_name.ljust(30), steam_id)) else: out("\t{} {} ({})".format(name.ljust(30), player_name.ljust(30), steam_id)) elif len(player_list) == 1: for steam_id in player_list: player_name = Storage.players_online_player_name[steam_id] if Rcon.is_admin(steam_id=steam_id): out("** Connected: {} {} ({}) ADMIN".format(player_list[steam_id], player_name.ljust(30), steam_id)) else: out("** Connected: {} {} ({})".format(player_list[steam_id], player_name.ljust(30), steam_id))
def store_settings_to_db(cls): config = ServerControl.get_config() Db.website_data_set('Game.ini',config['Game.ini']) Db.website_data_set('GameUserSettings.ini',config['GameUserSettings.ini']) data = Rcon.query_server() Db.website_data_set('game_version',data['game_version']) out('Settings uploaded to database.')
def last_seen(recipient,text): cmdlen = len("!lastseen ") name = text[cmdlen:] player = Db.find_player_wildcard(name) if player is None: response = Lang.get('chat_last_seen_error').format(name) else: date = player.last_seen seconds_ago = int(time.time() - date.timestamp()) ago = time_ago(date.timestamp()) response = Lang.get('chat_last_seen').format(name,ago,date) Rcon.message_steam_name(recipient,response)
def store_settings_to_db(cls): config = ServerControl.get_config() Db.website_data_set('Game.ini', config['Game.ini']) Db.website_data_set('GameUserSettings.ini', config['GameUserSettings.ini']) data = Rcon.query_server() Db.website_data_set('game_version', data['game_version']) out('Settings uploaded to database.')
def upload_to_web_players_online(cls, player_list): Db.website_data_set('players_online', len(Storage.players_online_steam_name))
""" Installation script for PyArc """ print('Running checks....') print('Loading config and checking required params and config integrity') from configs.config_base import ConfigBase ConfigBase.load_config() from ark.database import Db print('Database tables. Creating table unless they exist.') Db.init() Db.first_run() print('All seems well! GLHF')
def run(): Db.keep_alive()
def store_chat(cls,steam_name,player_name,text,line): player = Db.find_player(steam_name=player_name) player_id = player.id if player is not None else None Db.create_chat_entry(player_id,player_name,text)
def update_player_name(cls,steam_name,player_name,text,line): steam_id = Rcon.find_online_steam_id(steam_name) if steam_id: Db.update_player(steam_id, steam_name=steam_name, name=player_name)
def upload_to_web_players_online(cls,player_list): Db.website_data_set('players_online', len(Storage.players_online_steam_name))