diff --git a/core/cli.py b/core/cli.py index a226786..b8e7c03 100644 --- a/core/cli.py +++ b/core/cli.py @@ -170,7 +170,7 @@ def reset_user(username: str): def remove_user(username: str): try: cli_api.kick_user_by_name(username) - cli_api.traffic_status() + cli_api.traffic_status(display_output=False) cli_api.remove_user(username) click.echo(f"User '{username}' removed successfully.") except Exception as e: @@ -182,7 +182,7 @@ def kick_user(username: str): """Kicks a specific user by username.""" try: cli_api.kick_user_by_name(username) - click.echo(f"User '{username}' kicked successfully.") + # click.echo(f"User '{username}' kicked successfully.") except Exception as e: click.echo(f'{e}', err=True) @@ -209,9 +209,10 @@ def show_user_uri(username: str, qrcode: bool, ipv: int, all: bool, singbox: boo @cli.command('traffic-status') -def traffic_status(): +@click.option('--no-gui', is_flag=True, help='Retrieve traffic data without displaying output') +def traffic_status(no_gui): try: - cli_api.traffic_status() + cli_api.traffic_status(no_gui=no_gui) except Exception as e: click.echo(f'{e}', err=True) diff --git a/core/cli_api.py b/core/cli_api.py index 01abcec..70403ec 100644 --- a/core/cli_api.py +++ b/core/cli_api.py @@ -49,7 +49,7 @@ class Command(Enum): SERVICES_STATUS = os.path.join(SCRIPT_DIR, 'services_status.sh') VERSION = os.path.join(SCRIPT_DIR, 'hysteria2', 'version.py') LIMIT_SCRIPT = os.path.join(SCRIPT_DIR, 'hysteria2', 'limit.sh') - KICK_USER_SCRIPT = os.path.join(SCRIPT_DIR, 'hysteria2', 'kickuser.sh') + KICK_USER_SCRIPT = os.path.join(SCRIPT_DIR, 'hysteria2', 'kickuser.py') # region Custom Exceptions @@ -312,7 +312,7 @@ def kick_user_by_name(username: str): if not os.path.exists(script_path): raise ScriptNotFoundError(f"Kick user script not found at: {script_path}") try: - subprocess.run(['bash', script_path, username], check=True) + subprocess.run(['python3', script_path, username], check=True) except subprocess.CalledProcessError as e: raise CommandExecutionError(f"Failed to execute kick user script: {e}") @@ -339,9 +339,10 @@ def show_user_uri(username: str, qrcode: bool, ipv: int, all: bool, singbox: boo # region Server -def traffic_status(): +def traffic_status(no_gui=False, display_output=False): '''Fetches traffic status.''' - traffic.traffic_status() + data = traffic.traffic_status(no_gui=True if not display_output else no_gui) + return data # TODO: it's better to return json diff --git a/core/traffic.py b/core/traffic.py index 8a80fa3..251b14c 100644 --- a/core/traffic.py +++ b/core/traffic.py @@ -9,7 +9,7 @@ CONFIG_FILE = '/etc/hysteria/config.json' USERS_FILE = '/etc/hysteria/users.json' API_BASE_URL = 'http://127.0.0.1:25413' -def traffic_status(): +def traffic_status(no_gui=False): green = '\033[0;32m' cyan = '\033[0;36m' NC = '\033[0m' @@ -73,7 +73,10 @@ def traffic_status(): with open(USERS_FILE, 'w') as users_file: json.dump(users_data, users_file, indent=4) - display_traffic_data(users_data, green, cyan, NC) + if not no_gui: + display_traffic_data(users_data, green, cyan, NC) + + return users_data def display_traffic_data(data, green, cyan, NC): if not data: