More commands

This commit is contained in:
2026-07-27 02:23:59 +02:00
parent 99515c17d4
commit 9006bc7440
2 changed files with 164 additions and 100 deletions
+163
View File
@@ -0,0 +1,163 @@
use crate::{engine::Engine, store::config::Config};
use pulse_wire::terminal::{ItemState, Mode, Strategy};
use toml::Value;
impl Engine {
pub async fn execute_command(&self, command: &str, args: Vec<&str>) -> tokio::io::Result<()> {
match command {
"config" | "cfg" => {
if args.len() == 0 {
return self.invalid_command_usage("config").await;
}
match args[0] {
"reload" => {
*self.config.lock().await = Config::new().await?;
}
"set" => {
macro_rules! set_cfg {
($n:ident, $v:expr) => {
if let Ok(Ok($n)) = Value::try_from(args[2]).map(|v| v.try_into()) {
$v;
} else {
self.terminal_server
.error("config::set", "Unable to parse value")
.await?;
}
};
}
if args.len() == 3 {
match args[1] {
"watchlist" | "watch" | "wl" => {
set_cfg!(v, self.config.lock().await.watchlist = v);
}
"strategy" | "strat" | "str" | "sg" => {
set_cfg!(id, {
let id: String = id;
self.strategy.reload_strategy(id.as_str()).await?;
self.config.lock().await.strategy = id;
});
}
"risk" | "rs" => {
set_cfg!(id, {
let id: String = id;
self.strategy.reload_risk(id.as_str()).await?;
self.config.lock().await.risk = id;
});
}
"cooldown" | "cool" | "cd" => {
set_cfg!(cooldown, {
self.config.lock().await.cooldown = cooldown;
self.terminal_server.broadcast(
pulse_wire::terminal::TerminalServerMessage::StrategyUpdated(Strategy {
strategy: self.strategy.strategy.manifest.lock().await.clone(),
risk: self.strategy.risk.manifest.lock().await.clone(),
mode: Mode::Auto,
state: ItemState::Running,
cooldown,
}),
)
.await?;
});
}
_ => {
self.terminal_server
.error("config::set", "Invalid usage, available options: watchlist, strategy, risk, cooldown")
.await?;
}
}
} else {
self.invalid_command_usage("config").await?;
}
}
_ => {
self.invalid_command_usage("config").await?;
}
}
}
"account" | "acc" => {
if args.len() == 0 {
return self.invalid_command_usage("account man").await;
}
match args[0] {
"list" | "ls" => {
self.terminal_server
.info("account man", "ACCOUNT LIST")
.await?;
let accounts = self.accounts.lock().await;
for (name, acc) in &accounts.accounts {
self.terminal_server
.info(
"account man",
&if name == &accounts.active {
format!(
"{} (active) -> {}",
name,
acc.get_truncated_address()
)
} else {
format!("{} -> {}", name, acc.get_truncated_address())
},
)
.await?;
}
}
"use" | "set" => {
if args.len() < 2 {
return self.invalid_command_usage("account man").await;
}
let new_active = args[1];
let mut accounts = self.accounts.lock().await;
if !accounts.accounts.contains_key(new_active) {
return self
.terminal_server
.error("account man", &format!("Account not found ({new_active})"))
.await;
}
accounts.active = new_active.to_string();
self.terminal_server
.info(
"account man",
&format!("Account set to {new_active} successfully!"),
)
.await?;
}
_ => {
return self.invalid_command_usage("account man").await;
}
}
}
_ => {
self.terminal_server
.error(
"Command executor",
&format!("Command '{}' not found", command),
)
.await?;
}
}
Ok(())
}
}
+1 -100
View File
@@ -1,4 +1,5 @@
pub mod plugin;
pub mod command;
use crate::{
engine::plugin::StrategyEngine,
@@ -136,104 +137,4 @@ impl Engine {
pub async fn invalid_command_usage(&self, name: &str) -> tokio::io::Result<()> {
self.terminal_server.error(name, "Invalid usage").await
}
pub async fn execute_command(&self, command: &str, args: Vec<&str>) -> tokio::io::Result<()> {
match command {
"config" | "cfg" => {
if args.len() != 1 {
return self.invalid_command_usage("config").await;
}
match args[0] {
"reload" => {
*self.config.lock().await = Config::new().await?;
}
_ => {
self.terminal_server
.error("config", "Invalid usage")
.await?;
}
}
}
"account" | "acc" => {
if args.len() == 0 {
return self.invalid_command_usage("account man").await;
}
match args[0] {
"reload" => {
*self.accounts.lock().await = AccountList::new().await?;
}
"list" | "ls" => {
self.terminal_server
.info("account man", "ACCOUNT LIST")
.await?;
let accounts = self.accounts.lock().await;
for (name, acc) in &accounts.accounts {
self.terminal_server
.info(
"account man",
&if name == &accounts.active {
format!(
"{} (active) -> {}",
name,
acc.get_truncated_address()
)
} else {
format!("{} -> {}", name, acc.get_truncated_address())
},
)
.await?;
}
}
"use" | "set" => {
if args.len() < 2 {
return self.invalid_command_usage("account man").await;
}
let new_active = args[1];
let mut accounts = self.accounts.lock().await;
if !accounts.accounts.contains_key(new_active) {
return self
.terminal_server
.error("account man", &format!("Account not found ({new_active})"))
.await;
}
accounts.active = new_active.to_string();
self.terminal_server
.info(
"account man",
&format!("Account set to {new_active} successfully!"),
)
.await?;
}
_ => {
return self.invalid_command_usage("account man").await;
}
}
}
_ => {
self.terminal_server
.error(
"Command executor",
&format!("Command '{}' not found", command),
)
.await?;
}
}
Ok(())
}
}