From 5f0eea099ea7466c763c7570e0f1ec3002b4a5f2 Mon Sep 17 00:00:00 2001 From: linmeideli <2558527373@qq.com> Date: Sat, 13 Jun 2026 10:43:03 +0800 Subject: [PATCH] Kick Optional Reason --- src/Empostor.Server/Http/AdminController.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Empostor.Server/Http/AdminController.cs b/src/Empostor.Server/Http/AdminController.cs index e23d00b..83ad207 100644 --- a/src/Empostor.Server/Http/AdminController.cs +++ b/src/Empostor.Server/Http/AdminController.cs @@ -260,13 +260,13 @@ namespace Empostor.Server.Http return NotFound(Err($"Client {req.ClientId} not found")); } + await c.DisconnectAsync(DisconnectReason.Custom, req.Reason ?? "Kicked by admin"); + if (c.Player != null) { await c.Player.KickAsync(); } - await c.DisconnectAsync(DisconnectReason.Custom, req.Reason ?? "Kicked by admin"); - return Ok(new { kicked = true, name = c.Name }); } @@ -290,12 +290,13 @@ namespace Empostor.Server.Http var cip = c.Connection?.EndPoint?.Address; if (cip != null && Norm(cip) == Norm(ip)) { + await c.DisconnectAsync(DisconnectReason.Custom, req.Reason ?? "Banned by admin"); + if (c.Player != null) { await c.Player.BanAsync(); } - await c.DisconnectAsync(DisconnectReason.Custom, req.Reason ?? "Banned by admin"); kicked++; } } @@ -322,12 +323,13 @@ namespace Empostor.Server.Http { if (c.FriendCode == req.FriendCode) { + await c.DisconnectAsync(DisconnectReason.Custom, req.Reason ?? "Banned by admin"); + if (c.Player != null) { await c.Player.BanAsync(); } - await c.DisconnectAsync(DisconnectReason.Custom, req.Reason ?? "Banned by admin"); kicked++; } } @@ -374,6 +376,7 @@ namespace Empostor.Server.Http var players = g.Players.ToList(); foreach (var p in players) { + await p.Client.DisconnectAsync(DisconnectReason.Custom, req.Reason ?? "Game ended by admin"); await p.KickAsync(); } @@ -807,7 +810,7 @@ namespace Empostor.Server.Http public sealed record UnbanReq(string Value); - public sealed record GameCodeReq(string GameCode); + public sealed record GameCodeReq(string GameCode, string? Reason = null); public sealed record GamePublicReq(string GameCode, bool IsPublic); @@ -1657,6 +1660,7 @@ namespace Empostor.Server.Http

Force End Game

+
@@ -2289,7 +2293,8 @@ namespace Empostor.Server.Http const c = document.getElementById('ge-c').value.trim().toUpperCase(); if (!c) return msg('ge-r', false, _('alert.code_required', 'Code required')); if (!confirm(`End game ${c}?`)) return; - const { ok, data } = await api('POST', '/api/admin/game/end', { gameCode: c }); + const reason = document.getElementById('ge-reason').value.trim(); + const { ok, data } = await api('POST', '/api/admin/game/end', { gameCode: c, reason: reason || undefined }); msg('ge-r', ok, ok ? _('alert.ended', 'Ended ({0} kicked)').replace('{0}', data.playersKicked) : (data.error ?? 'Error')); if (ok) fGamesEnd(); }