import os.path import json from rcon.source import Client servers_file = "./.midnight_servers.json" servers = [] isfirstrun = False def load_servers(): global servers if os.path.isfile(servers_file): with open(servers_file,'r') as openfile: servers = json.load(openfile) else: create_server(True) def write_servers(): json_obj = json.dumps(servers,indent=4) with open(servers_file, "w") as outfile: outfile.write(json_obj) def list_servers(mode=int(1)): if(mode==1): index = int(0) for x in servers: strindex = str(index) print('ID: '+strindex+' ===') print(' Name:'+x['name']) print(' Address:'+x['address']) print(' Port:'+x['port']) print(' Password: **********\n') index += 1 initial_choice() elif(mode==2): index = int(0) for x in servers: strindex = str(index) print('ID: '+strindex+' ('+x['name']+')') index += 1 def create_server(isfirstrun=False): global servers if(isfirstrun): print('\n!! Looks like you do not have any servers yet - Let\'s add one.\n') print('\n=== Add Server ===') srv_name = input('Name: ') srv_addr = input('Address: ') srv_port = input('Port: ') srv_pass = input('Password: ') print('OK\n') new_server = [{"name":srv_name,"address":srv_addr,"port":srv_port,"password":srv_pass}] if(isfirstrun): json_obj = json.dumps(new_server,indent=4) with open(servers_file, "w") as outfile: outfile.write(json_obj) else: servers = servers + new_server write_servers() initial_choice() def pop_server(): global servers print('\n=== Remove Server ===\nPick a server to delete') list_servers(2) delete = int(input('?: ')) servers.pop(delete) write_servers() initial_choice() def send_commands(): proceed=True print('\n=== Send commands ===') choice = int(input('Single Server (1) or All (2)?: ')) if(choice==1): list_servers(2) server = int(input('Server?: ')) while(proceed): command = input('Input command (None to exit): ') if(command!=""): with Client(servers[server]['address'], int(servers[server]['port']), passwd=servers[server]['password']) as client: response = client.run(command) print(servers[server]['name']+': '+response+'\n') else: proceed = False print('No command was entered. Exiting.\n') initial_choice() elif(choice==2): while(proceed): command = input('Input command (None to exit): ') for x in servers: if(command!=""): with Client(x['address'], int(x['port']), passwd=x['password']) as client: response = client.run(command) print(x['name']+': '+response+'\n') else: proceed = False print('No command was entered. Exiting.\n') initial_choice() def initial_choice(): choose_func = input('=== Choose Function ===\n1. Add servers\n2. Remove servers\n3. List servers\n4. Send commands\n5. Exit\n?: ') match choose_func: case "1": create_server() case "2": pop_server() case "3": list_servers() case "4": send_commands() case "5": exit() case _: print("\n!! Invalid input\n") initial_choice() load_servers() initial_choice() #with Client('10.100.4.60', 30580, passwd='orrQLZvXH6jgD@wt') as client: # response = client.run('tps') # #print(response)