use crate::error::RconError;
use crate::parser::utils::{check_invalid_argument, check_invalid_command};
use crate::rcon_client::RconClient;
use crate::rcon_client::{TargetStatus, TargetStatusSuccess};
pub fn msg(
client: &mut RconClient,
target: &str,
message: &str,
) -> Result<TargetStatus, RconError> {
let command = format!("msg {} \"{}\"", target, message);
let feedback = client.send(command.to_string())?;
check_invalid_command(&feedback)?;
if feedback.contains("No player was found") {
return Ok(TargetStatus::NotFound);
}
if feedback.contains("cannot be found") {
return Ok(TargetStatus::NotFound);
}
if feedback.contains("You whisper to") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
if feedback == " ".to_string() {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
Err(RconError::UnknownParserError(
format!("Unknown error when whisper to player {}.", target).to_string(),
))
}
pub fn say(client: &mut RconClient, message: &str) -> Result<(), RconError> {
let command = format!("say \"{}\"", message);
let feedback = client.send(command.to_string())?;
check_invalid_command(&feedback)?;
if feedback != " ".to_string() {
return Err(RconError::UnknownParserError(
format!("Unknown error when say {}.", message).to_string(),
));
}
Ok(())
}
pub fn title(
client: &mut RconClient,
target: &str,
title_type: &str,
title_msg: &str,
) -> Result<TargetStatus, RconError> {
let arguments = vec!["title", "subtitle", "actionbar"];
check_invalid_argument(title_type, arguments)?;
let command = format!("title {} {} \"{}\"", target, title_type, title_msg);
let feedback = client.send(command.to_string())?;
check_invalid_command(&feedback)?;
if feedback.contains("No player was found") {
return Ok(TargetStatus::NotFound);
}
if feedback.contains("cannot be found") {
return Ok(TargetStatus::NotFound);
}
if feedback.contains("Showing new") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
if feedback.contains("Title command successfully") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
Err(RconError::UnknownParserError(
format!(
"Unknown error when {} {} to {}.",
title_type, title_msg, target
)
.to_string(),
))
}