rcon-tool/mc_control.py

127 lines
No EOL
3.8 KiB
Python

import os.path
import json
from rcon.source import Client
# Declare variables that are needed everywhere.
servers_file = "./.midnight_servers.json"
servers = []
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()