use crate::error::RconError;
use crate::parser::utils::check_invalid_command;
use crate::rcon_client::RconClient;
use crate::rcon_client::{TargetStatus, TargetStatusSuccess};
pub fn op(client: &mut RconClient, player: &str) -> Result<TargetStatus, RconError> {
let command = format!("op {}", player);
let feedback = client.send(command.to_string())?;
check_invalid_command(&feedback)?;
if feedback.contains("That player does not exist") {
return Ok(TargetStatus::NotFound);
}
if feedback.contains("Nothing changed.") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Duplicated));
}
if feedback.contains("Made") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
if feedback.contains("Opped") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
Err(RconError::UnknownParserError(
format!("Unknown error when op player {}.", player).to_string(),
))
}
pub fn deop(client: &mut RconClient, player: &str) -> Result<TargetStatus, RconError> {
let command = format!("deop {}", player);
let feedback = client.send(command.to_string())?;
check_invalid_command(&feedback)?;
if feedback.contains("That player does not exist") {
return Ok(TargetStatus::NotFound);
}
if feedback.contains("Nothing changed.") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Duplicated));
}
if feedback.contains("Could not de-op") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Duplicated));
}
if feedback.contains("no longer a server operator") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
if feedback.contains("De-opped") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
Err(RconError::UnknownParserError(
format!("Unknown error when deop player {}.", player).to_string(),
))
}