import os.path import json from rcon.source import Client # Declare variables that are needed everywhere. servers_file = "./.midnight_servers.json" servers = [] # Loads servers in from the servers_file, if it does not exist, trigger adding first server via create_servers. def load_servers(): global servers if os.path.isfile(servers_file): with open(servers_file,'r') as openfile: servers = json.load(openfile) else: print('\n!! Looks like you do not have any servers yet - Let\'s add one.\n') create_server() # Write the contents to the servers variable to the servers_file. def write_servers(): json_obj = json.dumps(servers,indent=4) # Add indentation when dumping to string. with open(servers_file, "w") as outfile: outfile.write(json_obj) # Lists servers, default action is to list all information minus password. Second option lists only ID and name. def list_servers(mode=int(1)): # make sure a default is set. if(mode==1): index = int(0) for x in servers: # for each dict in the servers array as x. strindex = str(index) print('ID: '+strindex+' ===') print(' Name:'+x['name']) print(' Address:'+x['address']) print(' Port:'+x['port']) print(' Password: **********\n') index += 1 elif(mode==2): index = int(0) for x in servers: strindex = str(index) print('ID: '+strindex+' ('+x['name']+')') index += 1 # Creates new server dicts in the server array. def create_server(): global servers 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}] 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() initial_choice() case "4": send_commands() case "5": exit() case _: print("\n!! Invalid input\n") initial_choice() load_servers() initial_choice()