From a16788b7dc68577eb0e1f224a2c410d6879ea773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl?= Date: Sun, 21 Sep 2025 20:07:54 +0200 Subject: [PATCH] Require target argument for css_bwho --- src/BetterWho/BetterWhoPlugin.cs | 92 +++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 14 deletions(-) diff --git a/src/BetterWho/BetterWhoPlugin.cs b/src/BetterWho/BetterWhoPlugin.cs index 45883d2..1c89f4a 100644 --- a/src/BetterWho/BetterWhoPlugin.cs +++ b/src/BetterWho/BetterWhoPlugin.cs @@ -36,6 +36,19 @@ private void HandleBetterWhoCommand(CCSPlayerController? caller, CommandInfo com return; } + if (command.ArgCount < 2) + { + command.ReplyToCommand("Usage: css_bwho "); + return; + } + + var targetArg = command.GetArg(1)?.Trim(); + if (string.IsNullOrWhiteSpace(targetArg)) + { + command.ReplyToCommand("Usage: css_bwho "); + return; + } + var players = Utilities.GetPlayers() .Where(player => player is { IsValid: true }) .ToList(); @@ -46,26 +59,77 @@ private void HandleBetterWhoCommand(CCSPlayerController? caller, CommandInfo com return; } - foreach (var player in players) + var matchingPlayers = players + .Where(player => PlayerMatchesArgument(player, targetArg)) + .ToList(); + + if (matchingPlayers.Count == 0) + { + command.ReplyToCommand($"No players match '{targetArg}'."); + return; + } + + if (matchingPlayers.Count > 1) { - var steamId = player.AuthorizedSteamID; - var steamId64 = steamId?.SteamId64 ?? 0; - var profileLink = steamId64 > 0 - ? $"https://steamcommunity.com/profiles/{steamId64}" - : "N/A"; + var playerNames = matchingPlayers + .Select(player => string.IsNullOrWhiteSpace(player.PlayerName) ? "Unknown" : player.PlayerName) + .ToList(); + + command.ReplyToCommand($"Multiple players match '{targetArg}': {string.Join(", ", playerNames)}."); + return; + } - var ipAddress = string.IsNullOrWhiteSpace(player.IpAddress) ? "N/A" : player.IpAddress; + var targetPlayer = matchingPlayers[0]; + var steamId = targetPlayer.AuthorizedSteamID; + var steamId64 = steamId?.SteamId64 ?? 0; + var profileLink = steamId64 > 0 + ? $"https://steamcommunity.com/profiles/{steamId64}" + : "N/A"; - var permissions = GetPlayerPermissions(player); - var permissionText = permissions.Count > 0 - ? string.Join(", ", permissions) - : "None"; + var ipAddress = string.IsNullOrWhiteSpace(targetPlayer.IpAddress) ? "N/A" : targetPlayer.IpAddress; - var message = - $"{player.PlayerName} | {profileLink} | {ipAddress} | {permissionText}"; + var permissions = GetPlayerPermissions(targetPlayer); + var permissionText = permissions.Count > 0 + ? string.Join(", ", permissions) + : "None"; - command.ReplyToCommand(message); + var message = + $"{targetPlayer.PlayerName} | {profileLink} | {ipAddress} | {permissionText}"; + + command.ReplyToCommand(message); + } + + private static bool PlayerMatchesArgument(CCSPlayerController player, string targetArg) + { + if (string.IsNullOrWhiteSpace(targetArg)) + { + return false; } + + if (!string.IsNullOrWhiteSpace(player.PlayerName) && + player.PlayerName.Contains(targetArg, System.StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + var steamId = player.AuthorizedSteamID; + if (steamId is not null) + { + if (steamId.SteamId64 > 0 && + steamId.SteamId64.ToString().Equals(targetArg, System.StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + var steamIdString = steamId.ToString(); + if (!string.IsNullOrWhiteSpace(steamIdString) && + steamIdString.Equals(targetArg, System.StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return false; } private static List GetPlayerPermissions(CCSPlayerController player)