Пример #1
0
    def ev_restart_now(self):
        if not self.is_online():
            return False

        self.log('Restart button pressed')
        from ark.rcon import Rcon
        Rcon.callback_restart()
Пример #2
0
    def notify_player_sever_restart(cls,player_list):
        seconds_left, str_countdown = Rcon.get_next_restart_string()
        if seconds_left is None:
            return

        for steam_id in player_list:
            Rcon.message_steam_id(steam_id,'A restart is scheduled in {}'.format(str_countdown),Rcon.none_response_callback)
Пример #3
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))
Пример #4
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
Пример #5
0
 def vote(steam_name,player_name,text):
     regex = re.compile('!vote (?P<id>[0-9]+) (?P<opt>[0-9]+)',re.IGNORECASE)
     matches = regex.search(text)
     if matches is not None:
         res=Db.find_survey(matches.group('id'))
         if res is not None:
             survey_id=res.id
         else:
             survey_id=None
         option = matches.group('opt')
         if Db.option_exists(survey_id,option) is True:
             choice=matches.group('opt')
             player=Db.find_player(steam_name=steam_name)
             steam_id=player.steam_id if player is not None else None
             player_name=player.name if player is not None else None
             if steam_id is not None:
                 result=Db.vote(survey_id,choice,steam_id,player_name)
                 if result is True:
                     msg=Lang.get('survey_vote_ok')
                     result=True
                 else:
                     msg=Lang.get('survey_vote_error')
                     result= False
             else:
                 msg=Lang.get('survey_vote_no_steamid')
                 result= False
         else:
             msg=Lang.get('survey_vote_option_not_found').format(matches.group('opt'))
             result= False
     else:
         msg=Lang.get('survey_vote_syntax_error')
         result= False
     Rcon.message_steam_name(steam_name,msg)
     return result
Пример #6
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
Пример #7
0
    def notify_player_sever_restart(cls, player_list):
        seconds_left, str_countdown = Rcon.get_next_restart_string()
        if seconds_left is None:
            return

        for steam_id in player_list:
            Rcon.message_steam_id(
                steam_id, 'A restart is scheduled in {}'.format(str_countdown),
                Rcon.none_response_callback)
Пример #8
0
 def admin_check_version(steam_name,player_name,text):
     if not Rcon.is_admin(steam_name=steam_name):
         out(Lang.get('unauthorized'), text)
         return False
     res, live_version, steam_version = ServerControl.new_version()
     if res is True:
         Rcon.message_steam_name(steam_name,Lang.get('new_version'))
         return True
     else:
         Rcon.message_steam_name(steam_name,Lang.get('no_new_version'))
         return False
Пример #9
0
    def list_online(steam_name,player_name,text):
        players = {}
        for steam_id, p_steam_name in Storage.players_online_steam_name.items():
            if steam_id in Storage.players_online_player_name and Storage.players_online_player_name[steam_id]:
                players[steam_id] = Storage.players_online_player_name[steam_id]
            else:
                players[steam_id] = p_steam_name


        player_list = ", ".join(players.values())
        response = Lang.get('chat_players_online').format(len(Storage.players_online_steam_name), player_list)
        Rcon.message_steam_name(steam_name,response)
Пример #10
0
    def list_online(recipient):
        players = {}
        for steam_id, steam_name in Storage.players_online_steam_name.items():
            if steam_id in Storage.players_online_player_name and Storage.players_online_player_name[steam_id]:
                players[steam_id] = Storage.players_online_player_name[steam_id]
            else:
                players[steam_id] = steam_name


        player_list = ", ".join(players.values())
        response = Lang.get('chat_players_online').format(len(Storage.players_online_steam_name), player_list)
        Rcon.message_steam_name(recipient,response)
Пример #11
0
    def welcome_message(cls,player_list):
        if cls.first_list_players: #Don't message people when rcon starts. Message when they log on.
            cls.first_list_players = False
            return

        response = 'Welcome to Clash.gg PVP Server.\nAvailable chat commands: !help, !lastseen, !online, !next_restart'
        response_admin = 'Hello admin!'

        for steam_id in player_list:
            if Rcon.is_admin(steam_id=steam_id):
                Rcon.message_steam_id(steam_id,response_admin,Rcon.none_response_callback,echo=False)
            else:
                Rcon.message_steam_id(steam_id,response,Rcon.none_response_callback,echo=False)
Пример #12
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)
Пример #13
0
    def last_seen(steam_name,player_name,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(steam_name,response)
Пример #14
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)
Пример #15
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))
Пример #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.')
Пример #17
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))
Пример #18
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.')
Пример #19
0
    def get_version(cls):
        data = Rcon.query_server()
        if data:
            if Factory.has('GUI_CONTROL'):
                Factory.get('GUI_CONTROL').set_server_version(data['game_version'])

            out('Server is running game version: ', data['game_version'])
        else:
            out('Unable to retrieve server game version')
Пример #20
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))
Пример #21
0
    def welcome_message(cls, player_list):
        if cls.first_list_players:  #Don't message people when rcon starts. Message when they log on.
            cls.first_list_players = False
            return

        response = 'Welcome to Clash.gg PVP Server.\nAvailable chat commands: !help, !lastseen, !online, !next_restart'
        response_admin = 'Hello admin!'

        for steam_id in player_list:
            if Rcon.is_admin(steam_id=steam_id):
                Rcon.message_steam_id(steam_id,
                                      response_admin,
                                      Rcon.none_response_callback,
                                      echo=False)
            else:
                Rcon.message_steam_id(steam_id,
                                      response,
                                      Rcon.none_response_callback,
                                      echo=False)
Пример #22
0
 def survey(steam_name,player_name,text):
     regex =  re.compile('!survey (?P<id>[0-9]+)',re.IGNORECASE)
     matches = regex.search(text)
     if matches is not None:
         result=Db.find_survey(matches.group('id'))
     else:
         result=Db.find_survey(None)
     if result is not None:
         options = Db.find_options(result.id)
         if options is not None:
             msg=Lang.get('survey_show').format(result.id,result.question,options,result.id,result.id)
         else:
             msg=Lang.get('survey_show_no_options').format(result.id,result.question)
         Rcon.broadcast(msg,Rcon.response_callback_response_only)
         return True
     else:
         msg=Lang.get('survey_no_found')
         Rcon.message_steam_name(steam_name,msg)
         return False
Пример #23
0
 def admin_filter_remove(steam_name,player_name,text):
     if not Rcon.is_admin(steam_name=steam_name):
         out(Lang.get('unauthorized'), text)
         return False
     regex =  re.compile('!admin_filter_remove (?P<words>[a-z ]+)',re.IGNORECASE)
     matches = regex.search(text)
     if matches is None:
         Rcon.message_steam_name(steam_name,Lang.get('chat_filter_remove_no_word'))
         return False
     words = matches.group('words')
     words = words.split()
     result=None
     for word in words:
         res = Db.remove_word(word)
         if res is False:
             res = Lang.get('chat_filter_remove_word_does_not_exists').format(word)
         else:
             res = Lang.get('unauthorized').format(word)
         if result is None:
             result = Lang.get('chat_filter_result').format(res)
         else:
             result = "{}, {}".format(result,res)
     Rcon.message_steam_name(steam_name,result)
Пример #24
0
 def admin_update_now(steam_name,player_name,text):
     if not Rcon.is_admin(steam_name=steam_name):
         out(Lang.get('unauthorized'), text)
         return False
     res, live_version, steam_version = ServerControl.new_version()
     if res is True:
         ServerControl.update_and_restart_server()
         Rcon.message_steam_name(steam_name,Lang.get('update_restart'))
         Rcon.broadcast(Lang.get('update_restart'), Rcon.response_callback_response_only)
         return True
     else:
         Rcon.message_steam_name(steam_name,Lang.get('no_new_version'))
         return False
Пример #25
0
 def admin_start_survey(steam_name,player_name,text):
     if not Rcon.is_admin(steam_name=steam_name):
         out(Lang.get('unauthorized'), text)
         return False
     regex=re.compile('!admin_start_survey (?P<id_survey>[0-9]+)',re.IGNORECASE)
     matches = regex.search(text)
     if matches is None:
         Rcon.message_steam_name(steam_name,Lang.get('survey_start_noid'))
         return False
     id_survey=matches.group('id_survey')
     result=False
     result=Db.start_survey(id_survey)
     if result is True:
         Rcon.message_steam_name(steam_name,Lang.get('survey_start_ok').format(id_survey,id_survey))
     else:
         Rcon.message_steam_name(steam_name,Lang.get('survey_start_error').format(id_survey))
Пример #26
0
 def admin_survey_add(steam_name,player_name,text):
     if not Rcon.is_admin(steam_name=steam_name):
         out(Lang.get('unauthorized'), text)
         return False
     regex=re.compile('!admin_survey_add (?P<question>[a-zA-Z0-9 ?]+)',re.IGNORECASE)
     matches = regex.search(text)
     if matches is None:
         Rcon.message_steam_name(steam_name,Lang.get('survey_no_question'))
         return False
     question=matches.group('question')
     result = None
     result = Db.add_survey(question)
     if result is not None:
         Rcon.message_steam_name(steam_name,Lang.get('survey_created').format(result,result))
     else:
         Rcon.message_steam_name(steam_name,Lang.get('survey_add_error'))
Пример #27
0
 def quote(steam_name,player_name,text):
     regex =  re.compile('!quote (?P<id>[0-9]+)',re.IGNORECASE)
     matches = regex.search(text)
     if matches is None:
         Rcon.message_steam_name(steam_name,Lang.get('quote_error'))
         return False
     quote = matches.group('id')
     result = Db.find_quote(quote)
     if result is not None:
         msg = Lang.get('quote_ok').format(quote,result.created,result.name,result.data)
         Rcon.broadcast(msg, Rcon.response_callback_response_only)
         return True
     else:
         Rcon.message_steam_name(steam_name,Lang.get('quote_not_found').format(quote))
         return False
Пример #28
0
    def parse(steam_name,player_name,text):
        #recipient = Db.find_player(player_name=player_name)
        cmd = ChatCommands._find_cmd(text)
        if cmd is False:
            debug_out(Lang.get('not_a_command').format(text),level=1)
            return False
        
        cmd = cmd.lower()
        debug_out('Processing chat command: ',cmd,level=1)
        if cmd == 'lastseen':
            ChatCommands.last_seen(steam_name,text)
            return True
        elif cmd == 'online':
            ChatCommands.list_online(steam_name)
            return True
        elif cmd == 'admin_restart':
            if not Rcon.is_admin(steam_name=steam_name):
                out(Lang.get('unauthorized'), cmd)
                return False

            if text.lower().strip() == '!admin_restart now':
                Rcon.message_steam_name(steam_name,Lang.get('issue_restart_now'))
                Rcon.broadcast(Lang.get('restarting'))
                ServerControl.restart_server()
                return True

            regex = re.compile('!admin_restart (?P<minutes>[\d]+)',re.IGNORECASE)
            matches = regex.search(text)
            if matches is None:
                Rcon.message_steam_name(steam_name,Lang.get('admin_restart_failed'))
                return False

            minutes = matches.group('minutes')

            result, err = Rcon.delayed_restart(minutes)
            if not result:
                Rcon.message_steam_name(steam_name,'ERROR: {}'.format(err))
                return False

            Rcon.message_steam_name(steam_name,Lang.get('issue_restart'))
            return True
        elif cmd == 'next_restart':
            seconds_left, str_countdown = Rcon.get_next_restart_string()
            response = 'Next restart: {}'.format(str_countdown)
            Rcon.message_steam_name(steam_name,response)
            return True
        elif cmd == 'help':
            Rcon.message_steam_name(steam_name,Lang.get('chat_help'))
            return True
        return False
Пример #29
0
 def run():
     Rcon.delayed_restart(60, Lang.get('event_restart'))
Пример #30
0
 def run():
     Storage.repopulate_dinos_on_next_restart = True
     Rcon.delayed_restart(60, Lang.get('event_restart_repopulate'))
Пример #31
0
 def get_version(cls):
     data = Rcon.query_server()
     if data:
         out('Server is running game version: ', data['game_version'])
     else:
         out('Unable to retrieve server game version')
Пример #32
0
 def run():
     if len(Storage.players_online_steam_name):
         Rcon.send('GetChat', Task_GetChat.parse)
Пример #33
0
 def run():
     if len(Storage.players_online_steam_name):
         Rcon.send('GetChat',Task_GetChat.parse)
Пример #34
0
 def admin_restart(steam_name,player_name,text):
     if not Rcon.is_admin(steam_name=steam_name):
         out(Lang.get('unauthorized'), text)
         return False
     if text.lower().strip() == '!admin_restart now':
         Rcon.message_steam_name(steam_name,Lang.get('issue_restart_now'))
         Rcon.broadcast(Lang.get('restarting'),Rcon.callback_restart())
         return True
     regex = re.compile('!admin_restart (?P<minutes>[\d]+)',re.IGNORECASE)
     matches = regex.search(text)
     if matches is None:
         Rcon.message_steam_name(steam_name,Lang.get('admin_restart_failed'))
         return False
     minutes = matches.group('minutes')
     result, err = Rcon.delayed_restart(minutes)
     if not result:
         Rcon.message_steam_name(steam_name,'ERROR: {}'.format(err))
         return False
     Rcon.message_steam_name(steam_name,Lang.get('issue_restart'))
     return True
Пример #35
0
    def ev_restart_min(self,minutes):
        if not self.is_online():
            return False

        from ark.rcon import Rcon
        Rcon.delayed_restart(minutes)
Пример #36
0
 def run():
     Rcon.send('ListPlayers', Task_ListPlayers.parse)
Пример #37
0
 def run():
     Storage.repopulate_dinos_on_next_restart = True
     Rcon.delayed_restart(60, Lang.get("event_restart_repopulate"))
Пример #38
0
 def next_restart(steam_name,player_name,text):
     seconds_left, str_countdown = Rcon.get_next_restart_string()
     response = 'Next restart: {}'.format(str_countdown)
     Rcon.message_steam_name(steam_name,response)
Пример #39
0
 def get_version(cls):
     data = Rcon.query_server()
     if data:
         out('Server is running game version: ', data['game_version'])
     else:
         out('Unable to retrieve server game version')
Пример #40
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)
Пример #41
0
 def help(steam_name,player_name,text):
     Rcon.message_steam_name(steam_name,Lang.get('chat_help'))
Пример #42
0
 def run():
     Rcon.send('ListPlayers',Task_ListPlayers.parse)
Пример #43
0
 def run():
     Rcon.delayed_restart(60, Lang.get("event_restart"))