using System; using Content.Server.Database; using Content.Shared.Administration; using Robust.Server.Player; using Robust.Shared.Console; using Robust.Shared.IoC; using Robust.Shared.Network; #nullable enable namespace Content.Server.Administration.Commands { [AdminCommand(AdminFlags.Ban)] public sealed class BanCommand : IConsoleCommand { public string Command => "ban"; public string Description => "Bans somebody"; public string Help => "Usage: "; public async void Execute(IConsoleShell shell, string argStr, string[] args) { var player = shell.Player as IPlayerSession; var plyMgr = IoCManager.Resolve(); var dbMan = IoCManager.Resolve(); var target = args[0]; var reason = args[1]; var duration = int.Parse(args[2]); NetUserId targetUid; if (plyMgr.TryGetSessionByUsername(target, out var targetSession)) { targetUid = targetSession.UserId; } else if (Guid.TryParse(target, out var targetGuid)) { targetUid = new NetUserId(targetGuid); } else { shell.WriteLine("Unable to find user with that name."); return; } DateTimeOffset? expires = null; if (duration > 0) { expires = DateTimeOffset.Now + TimeSpan.FromMinutes(duration); } await dbMan.AddServerBanAsync(new ServerBanDef(null, targetUid, null, DateTimeOffset.Now, expires, reason, player?.UserId, null)); if (plyMgr.TryGetSessionById(targetUid, out var targetPlayer)) { targetPlayer.ConnectedClient.Disconnect("You've been banned. Tough shit."); } } } }