From f402df2c566b63d6772e1d03a5631a2fa84f0170 Mon Sep 17 00:00:00 2001 From: tylerlowrey Date: Fri, 17 Jul 2020 12:25:52 -0400 Subject: [PATCH] Altered ban so that it kicks the player as well --- server/src/cmd.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/server/src/cmd.rs b/server/src/cmd.rs index 5eb5212ec3..07f8f0647b 100644 --- a/server/src/cmd.rs +++ b/server/src/cmd.rs @@ -1860,7 +1860,7 @@ fn handle_kick( fn handle_ban( server: &mut Server, client: EcsEntity, - _target: EcsEntity, + target: EcsEntity, args: String, action: &ChatCommand, ) { @@ -1878,9 +1878,9 @@ fn handle_ban( server.settings_mut().edit(|s| { s.banlist.push((target_alias.clone(), reason.clone())) }); - // Override AuthProvider's banlist since it is only a copy - let mut accounts = server.state.ecs().write_resource::(); - accounts.banlist = server.settings().banlist.clone(); + // Overwrite AuthProvider's banlist since it AuthProvider only has a copy + let ecs = server.state.ecs(); + ecs.write_resource::().banlist = server.settings().banlist.clone(); server.notify_client( client, ChatType::CommandInfo.server_msg( @@ -1888,6 +1888,15 @@ fn handle_ban( target_alias, reason)) ); + + // If the player is online kick them + let entity_opt = (&ecs.entities(), &ecs.read_storage::()) + .join() + .find(|(_, player)| player.alias == target_alias) + .map(|(entity, _)| entity); + if let Some(_) = entity_opt { + get_handler(&ChatCommand::Kick)(server, client, target, format!("{} {}", target_alias, reason), &ChatCommand::Kick) + } } } else { @@ -1909,7 +1918,7 @@ fn handle_unban( server.settings_mut().edit(|s| { s.banlist.retain(|x| !(x.0).eq_ignore_ascii_case(&username)) }); - // Override AuthProvider's banlist since it is only a copy + // Overwrite AuthProvider's banlist since it AuthProvider only has a copy let mut accounts = server.state.ecs().write_resource::(); accounts.banlist = server.settings().banlist.clone(); server.notify_client(