diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c7c52a9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +credentials.json \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..c01cf0d --- /dev/null +++ b/main.py @@ -0,0 +1,258 @@ +from rcon.battleye import Client +import socket +import sys +import os +import json + +# Define the server details +SERVER_ADDRESS = '' +SERVER_PORT = 0 +RCON_PASSWORD = '' + +# Check if credentials file exists +if os.path.exists('credentials.json'): + # Load credentials from file + with open('credentials.json', 'r') as file: + credentials = json.load(file) + SERVER_ADDRESS = credentials.get('SERVER_ADDRESS', '') + SERVER_PORT = credentials.get('SERVER_PORT', 0) + RCON_PASSWORD = credentials.get('RCON_PASSWORD', '') +else: + # Generate example credentials file + credentials = { + 'SERVER_ADDRESS': 'YOUR-SERVER-ADDRESS', # Example Values + 'SERVER_PORT': 2303, # Example Values + 'RCON_PASSWORD': 'RCON_PASSWORD' # Example Values + } + with open('credentials.json', 'w') as file: + json.dump(credentials, file, indent=4) + print("Please fill in the server details in the credentials.json file.") + sys.exit() + + +def print_menu(): + print() + print("1. List Players") + print("2. Messaging") + print("3. Locking") + print("4. Kicking") + print("5. Banning") + print("6. Exit") + +def handle_input(choice): + if choice == "1": + list_players() + elif choice == "2": + print_message_menu() + message_choice = input("Enter your choice: ") + handle_message_input(message_choice) + elif choice == "3": + print_locking_menu() + locking_choice = input("Enter your choice: ") + handle_locking_input(locking_choice) + elif choice == "4": + print_kick_menu() + kick_choice = input("Enter your choice: ") + handle_kick_input(kick_choice) + elif choice == "5": + print_banning_menu() + banning_choice = input("Enter your choice: ") + handle_banning_input(banning_choice) + elif choice == "6": + sys.exit() + else: + print("Invalid choice. Please try again.") + +def print_message_menu(): + print("1. Send Global Message") + print("2. Send Direct Message") + print("3. Back") + +def print_locking_menu(): + print("1. Lock Server") + print("2. Unlock Server") + print("3. Back") + +def print_kick_menu(): + print("1. Kick Single Player") + print("2. Kick All Players") + print("3. Back") + +def print_banning_menu(): + print("1. Show Banlist") + print("2. Ban Player") + print("3. Ban Player by SteamID") + print("4. Unban Player") + print("5. Back") + +def handle_message_input(choice): + if choice == "1": + send_global_message() + elif choice == "2": + send_direct_message() + elif choice == "3": + print_menu() + else: + print("Invalid choice. Please try again.") + +def handle_locking_input(choice): + if choice == "1": + lock_server() + elif choice == "2": + unlock_server() + elif choice == "3": + print_menu() + else: + print("Invalid choice. Please try again.") + +def handle_kick_input(choice): + if choice == "1": + kick_single_player() + elif choice == "2": + kick_all_players() + elif choice == "3": + print_menu() + else: + print("Invalid choice. Please try again.") + +def handle_banning_input(choice): + if choice == "1": + show_banlist() + elif choice == "2": + ban_player() + elif choice == "3": + ban_player_by_steamid() + elif choice == "4": + unban_player() + elif choice == "5": + print_menu() + else: + print("Invalid choice. Please try again.") + +def send_global_message(): + message = input("Enter the message to send: ") + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run(f'Say -1 {message}') + print(response) + +def send_direct_message(): + list_players() + player_name = input("Enter the # (number) of the player to message: ") + message = input("Enter the message to send: ") + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run(f'Say -{player_name} {message}') + print(response) + +def list_players(): + try: + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run('players') + print(response) + except socket.timeout: + print("Connection timed out. Please check the server address, port, and network settings.") + except Exception as e: + print(f"An error occurred: {e}") + +def kick_single_player(): + list_players() + player_name = input("Enter the # (number) of the player to kick: ") + reason = input("Enter the reason for kicking the player (can be empty): ") + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run(f'kick {player_name} "{reason}"') + if not response: + print("Player kicked successfully.") + else: + print(response) + +def kick_all_players(): ##UNOPERATIONAL + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run('kick -1') + print(response) + +def show_banlist(): + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run('Bans') + print(response) + +def ban_player(): + list_players() + player_name = input("Enter the # (number) of the player to ban: ") + ban_time = input("Enter the ban time in minutes: ") + reason = input("Enter the reason for banning the player (can be empty): ") + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run(f'ban {player_name} {ban_time} "{reason}"') + if not response: + print("Player banned successfully.") + else: + print(response) + +def ban_player_by_steamid(): + steamid = input("Enter the SteamID of the player to ban: ") + ban_time = input("Enter the ban time in minutes: ") + reason = input("Enter the reason for banning the player (can be empty): ") + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run(f'ban -1 {ban_time} "{reason}" {steamid}') + if not response: + print("Player banned successfully.") + else: + print(response) + +def unban_player(): + show_banlist() + ban_id = input("Enter the # (number) of the ban to remove: ") + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run(f'removeBan {ban_id}') + if not response: + print("Ban removed successfully.") + else: + print(response) + +def lock_server(): + try: + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run('#lock') + print(response) + except socket.timeout: + print("Connection timed out. Please check the server address, port, and network settings.") + except Exception as e: + print(f"An error occurred: {e}") + +def unlock_server(): + try: + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run('#unlock') + print(response) + except socket.timeout: + print("Connection timed out. Please check the server address, port, and network settings.") + except Exception as e: + print(f"An error occurred: {e}") + def handle_input(choice): + if choice == "1": + lock_server() + elif choice == "2": + unlock_server() + elif choice == "3": + sys.exit() + elif choice == "4": + list_players() + else: + print("Invalid choice. Please try again.") + + def list_players(): + try: + with Client(SERVER_ADDRESS, SERVER_PORT, passwd=RCON_PASSWORD) as client: + response = client.run('players') + print(response) + except socket.timeout: + print("Connection timed out. Please check the server address, port, and network settings.") + except Exception as e: + print(f"An error occurred: {e}") + +def create_cli(): + while True: + print_menu() + choice = input("Enter your choice: ") + handle_input(choice) + +if __name__ == "__main__": + create_cli() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7201105 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +rcon \ No newline at end of file