feat: lua executor via chat

This commit is contained in:
amizing25
2026-02-09 14:19:32 +07:00
parent 5e5a90cb50
commit 9d856e76c8
+69 -2
View File
@@ -1,14 +1,21 @@
use std::path::Path;
use common::structs::MultiPathAvatar;
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::*;
const SERVER_UID: u32 = 727;
const SERVER_HEAD_ICON: u32 = 201402;
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",
"'mc {mc_id}' mc_id can be set from 8001 to 8008",
"'march {march_id}' march_id can be set 1001 or 1224",
@@ -189,6 +196,66 @@ pub async fn on_send_msg_cs_req(
.await
.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();
}
_ => {}
}
}