Exemple #1
0
    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))
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
 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)
Exemple #5
0
    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
Exemple #6
0
    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
Exemple #7
0
 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)
Exemple #8
0
 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)
Exemple #9
0
 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))
Exemple #10
0
 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))
Exemple #11
0
    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
Exemple #12
0
    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
Exemple #13
0
    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))
Exemple #14
0
 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.')
Exemple #15
0
    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)
Exemple #16
0
 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.')
Exemple #17
0
 def upload_to_web_players_online(cls, player_list):
     Db.website_data_set('players_online',
                         len(Storage.players_online_steam_name))
Exemple #18
0
"""
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')
Exemple #19
0
 def run():
     Db.keep_alive()
Exemple #20
0
 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)
Exemple #21
0
 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)
Exemple #22
0
 def upload_to_web_players_online(cls,player_list):
     Db.website_data_set('players_online', len(Storage.players_online_steam_name))