From 3cd4d97a2cc0b04bb8831fbe0b0fa3926b645557 Mon Sep 17 00:00:00 2001 From: super_wang Date: Mon, 10 Jul 2023 22:50:22 +0800 Subject: [PATCH 1/2] v3.9.2.3 (2023.07.10) --- rust/wcferry/proto/wcf.proto | 10 ++++--- rust/wcferry/src/proto/wcf.rs | 16 +++++++---- rust/wcferry/src/wechat.rs | 52 +++++++++++++++++++---------------- 3 files changed, 46 insertions(+), 32 deletions(-) diff --git a/rust/wcferry/proto/wcf.proto b/rust/wcferry/proto/wcf.proto index 34d1d83..f994171 100644 --- a/rust/wcferry/proto/wcf.proto +++ b/rust/wcferry/proto/wcf.proto @@ -21,9 +21,10 @@ enum Functions { FUNC_DISABLE_RECV_TXT = 0x40; FUNC_EXEC_DB_QUERY = 0x50; FUNC_ACCEPT_FRIEND = 0x51; - FUNC_ADD_ROOM_MEMBERS = 0x52; - FUNC_RECV_TRANSFER = 0x53; + FUNC_RECV_TRANSFER = 0x52; FUNC_DECRYPT_IMAGE = 0x60; + FUNC_ADD_ROOM_MEMBERS = 0x70; + FUNC_DEL_ROOM_MEMBERS = 0x71; } message Request @@ -167,5 +168,6 @@ message DecPath message Transfer { string wxid = 1; // 转账人 - string tid = 2; // 转账id transferid -} + string tfid = 2; // 转账id transferid + string taid = 3; // Transaction id +} \ No newline at end of file diff --git a/rust/wcferry/src/proto/wcf.rs b/rust/wcferry/src/proto/wcf.rs index 5b77e9e..8123866 100644 --- a/rust/wcferry/src/proto/wcf.rs +++ b/rust/wcferry/src/proto/wcf.rs @@ -305,7 +305,10 @@ pub struct Transfer { pub wxid: ::prost::alloc::string::String, /// 转账id transferid #[prost(string, tag = "2")] - pub tid: ::prost::alloc::string::String, + pub tfid: ::prost::alloc::string::String, + /// Transaction id + #[prost(string, tag = "3")] + pub taid: ::prost::alloc::string::String, } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] @@ -327,9 +330,10 @@ pub enum Functions { FuncDisableRecvTxt = 64, FuncExecDbQuery = 80, FuncAcceptFriend = 81, - FuncAddRoomMembers = 82, - FuncRecvTransfer = 83, + FuncRecvTransfer = 82, FuncDecryptImage = 96, + FuncAddRoomMembers = 112, + FuncDelRoomMembers = 113, } impl Functions { /// String value of the enum field names used in the ProtoBuf definition. @@ -355,9 +359,10 @@ impl Functions { Functions::FuncDisableRecvTxt => "FUNC_DISABLE_RECV_TXT", Functions::FuncExecDbQuery => "FUNC_EXEC_DB_QUERY", Functions::FuncAcceptFriend => "FUNC_ACCEPT_FRIEND", - Functions::FuncAddRoomMembers => "FUNC_ADD_ROOM_MEMBERS", Functions::FuncRecvTransfer => "FUNC_RECV_TRANSFER", Functions::FuncDecryptImage => "FUNC_DECRYPT_IMAGE", + Functions::FuncAddRoomMembers => "FUNC_ADD_ROOM_MEMBERS", + Functions::FuncDelRoomMembers => "FUNC_DEL_ROOM_MEMBERS", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -380,9 +385,10 @@ impl Functions { "FUNC_DISABLE_RECV_TXT" => Some(Self::FuncDisableRecvTxt), "FUNC_EXEC_DB_QUERY" => Some(Self::FuncExecDbQuery), "FUNC_ACCEPT_FRIEND" => Some(Self::FuncAcceptFriend), - "FUNC_ADD_ROOM_MEMBERS" => Some(Self::FuncAddRoomMembers), "FUNC_RECV_TRANSFER" => Some(Self::FuncRecvTransfer), "FUNC_DECRYPT_IMAGE" => Some(Self::FuncDecryptImage), + "FUNC_ADD_ROOM_MEMBERS" => Some(Self::FuncAddRoomMembers), + "FUNC_DEL_ROOM_MEMBERS" => Some(Self::FuncDelRoomMembers), _ => None, } } diff --git a/rust/wcferry/src/wechat.rs b/rust/wcferry/src/wechat.rs index 06d35f5..ce0421c 100644 --- a/rust/wcferry/src/wechat.rs +++ b/rust/wcferry/src/wechat.rs @@ -53,7 +53,7 @@ impl WeChat { } fn start(wcf_path: PathBuf, debug: bool) -> Result<(), Box> { - let mut args = vec!["start"]; + let mut args = vec!["start", "10086"]; if debug { args.push("debug"); } @@ -389,14 +389,15 @@ pub fn send_text( if response.is_none() { return Ok(false); } - match response.unwrap() { - wcf::response::Msg::Status(status) => { - return Ok(1 == status); - } - _ => { - return Ok(false); - } - }; + return Ok(true); + // match response.unwrap() { + // wcf::response::Msg::Status(status) => { + // return Ok(1 == status); + // } + // _ => { + // return Ok(false); + // } + // }; } pub fn send_image( @@ -419,17 +420,19 @@ pub fn send_image( return Err("图片发送失败".into()); } }; + println!("{:?}", response); if response.is_none() { return Ok(false); } - match response.unwrap() { - wcf::response::Msg::Status(status) => { - return Ok(1 == status); - } - _ => { - return Ok(false); - } - }; + return Ok(true); + // match response.unwrap() { + // wcf::response::Msg::Status(status) => { + // return Ok(1 == status); + // } + // _ => { + // return Ok(false); + // } + // }; } pub fn send_file( @@ -731,13 +734,15 @@ pub fn decrypt_image( pub fn recv_transfer( wxid: String, transferid: String, + transcationid: String, wechat: &mut WeChat, ) -> Result> { let req = wcf::Request { func: wcf::Functions::FuncRecvTransfer.into(), msg: Some(wcf::request::Msg::Tf(wcf::Transfer { - wxid, - tid: transferid, + wxid: wxid, + taid: transferid, + tfid: transcationid, })), }; let response = match send_cmd(wechat, req) { @@ -799,7 +804,7 @@ mod test { let status = crate::wechat::send_text( &mut wechat, String::from("Hello, wcferry!"), - String::from("******@chatroom"), + String::from("filehelper"), String::from(""), ) .unwrap(); @@ -814,7 +819,7 @@ mod test { let status = crate::wechat::send_image( &mut wechat, PathBuf::from("C:\\Users\\Administrator\\Pictures\\1.jpg"), - String::from("****@chatroom"), + String::from("filehelper"), ) .unwrap(); println!("Success: {}", status); @@ -824,7 +829,7 @@ mod test { fn test_recv_msg() { let mut wechat = crate::wechat::WeChat::default(); let mut socket = crate::wechat::enable_listen(&mut wechat).unwrap(); - for _ in 1..100 { + for _ in 1..5 { let msg = crate::wechat::recv_msg(&mut socket).unwrap(); println!("WxMsg: {:?}", msg); } @@ -871,7 +876,8 @@ mod test { let mut wechat = crate::wechat::WeChat::default(); let status = crate::wechat::recv_transfer( String::from("****"), - String::from("1000050001202305070217704377865"), + String::from("1000050001202306300415889890620"), + String::from("100005000123063000081247810011296088"), &mut wechat, ) .unwrap(); From 3c835ab1214092866602c5bf955c1e44864f142c Mon Sep 17 00:00:00 2001 From: super_wang Date: Mon, 10 Jul 2023 23:07:11 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B8=A2=E5=87=BA?= =?UTF-8?q?=E7=BE=A4=E6=88=90=E5=91=98=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rust/wcferry/src/wechat.rs | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/rust/wcferry/src/wechat.rs b/rust/wcferry/src/wechat.rs index ce0421c..ad2ce89 100644 --- a/rust/wcferry/src/wechat.rs +++ b/rust/wcferry/src/wechat.rs @@ -702,6 +702,35 @@ pub fn add_chatroom_members( }; } +pub fn del_chatroom_members( + roomid: String, + wxids: String, + wechat: &mut WeChat, +) -> Result> { + let req = wcf::Request { + func: wcf::Functions::FuncDelRoomMembers.into(), + msg: Some(wcf::request::Msg::M(wcf::AddMembers { roomid, wxids })), + }; + let response = match send_cmd(wechat, req) { + Ok(res) => res, + Err(e) => { + error!("命令发送失败: {}", e); + return Err("微信群踢人失败".into()); + } + }; + if response.is_none() { + return Ok(false); + } + match response.unwrap() { + wcf::response::Msg::Status(status) => { + return Ok(status == 1); + } + _ => { + return Ok(false); + } + }; +} + pub fn decrypt_image( src: String, dst: String, @@ -864,6 +893,18 @@ mod test { println!("Status: {}", status); } + #[test] + fn test_del_chatroom_members() { + let mut wechat = crate::wechat::WeChat::default(); + let status = crate::wechat::del_chatroom_members( + String::from("34476879773@chatroom"), + String::from("*******"), + &mut wechat, + ) + .unwrap(); + println!("Status: {}", status); + } + #[test] fn test_get_user_info() { let mut wechat = crate::wechat::WeChat::default();