feat: lua executor via chat
This commit is contained in:
@@ -1,14 +1,21 @@
|
|||||||
|
use std::path::Path;
|
||||||
|
|
||||||
use common::structs::MultiPathAvatar;
|
use common::structs::MultiPathAvatar;
|
||||||
use proto::{chat_message_extend_data::ExtendType, dabbfcoafjg::Eedaadmacap};
|
use proto::{chat_message_extend_data::ExtendType, dabbfcoafjg::Eedaadmacap};
|
||||||
|
use tokio::fs;
|
||||||
|
|
||||||
use crate::{net::PlayerSession, util::cur_timestamp_ms};
|
use crate::{
|
||||||
|
net::PlayerSession,
|
||||||
|
util::{self, cur_timestamp_ms},
|
||||||
|
};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
const SERVER_UID: u32 = 727;
|
const SERVER_UID: u32 = 727;
|
||||||
const SERVER_HEAD_ICON: u32 = 201402;
|
const SERVER_HEAD_ICON: u32 = 201402;
|
||||||
const SERVER_CHAT_BUBBLE_ID: u32 = 220005;
|
const SERVER_CHAT_BUBBLE_ID: u32 = 220005;
|
||||||
const SERVER_CHAT_HISTORY: [&str; 5] = [
|
const SERVER_CHAT_HISTORY: [&str; 6] = [
|
||||||
|
"'lua {path_to_lua_script}' execute lua script",
|
||||||
"'sync' to synchronize stats between json and in-game view",
|
"'sync' to synchronize stats between json and in-game view",
|
||||||
"'mc {mc_id}' mc_id can be set from 8001 to 8008",
|
"'mc {mc_id}' mc_id can be set from 8001 to 8008",
|
||||||
"'march {march_id}' march_id can be set 1001 or 1224",
|
"'march {march_id}' march_id can be set 1001 or 1224",
|
||||||
@@ -189,6 +196,66 @@ pub async fn on_send_msg_cs_req(
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
"lua" => {
|
||||||
|
let path = Path::new(args.first().unwrap_or(&""));
|
||||||
|
|
||||||
|
if !path.is_file() {
|
||||||
|
session
|
||||||
|
.send(create_send_message(
|
||||||
|
25,
|
||||||
|
SERVER_UID,
|
||||||
|
body.message_type,
|
||||||
|
body.chat_type,
|
||||||
|
body.chat_message_extend_data.clone(),
|
||||||
|
format!("File {path:?} does not exist!"),
|
||||||
|
))
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
let data = match fs::read(&path).await {
|
||||||
|
Ok(file) => file,
|
||||||
|
Err(err) => {
|
||||||
|
session
|
||||||
|
.send(create_send_message(
|
||||||
|
25,
|
||||||
|
SERVER_UID,
|
||||||
|
body.message_type,
|
||||||
|
body.chat_type,
|
||||||
|
body.chat_message_extend_data.clone(),
|
||||||
|
format!("Failed to read file: {err:?}"),
|
||||||
|
))
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
session
|
||||||
|
.send(ClientDownloadDataScNotify {
|
||||||
|
download_data: Some(ClientDownloadData {
|
||||||
|
version: 51,
|
||||||
|
time: util::cur_timestamp_ms() as i64,
|
||||||
|
data,
|
||||||
|
..Default::default()
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
session
|
||||||
|
.send(create_send_message(
|
||||||
|
25,
|
||||||
|
SERVER_UID,
|
||||||
|
body.message_type,
|
||||||
|
body.chat_type,
|
||||||
|
body.chat_message_extend_data.clone(),
|
||||||
|
format!("Executed {path:?}"),
|
||||||
|
))
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user