Skip to content

Commit a46ecad

Browse files
authored
Merge pull request #50 from uncledu/master
添加消息转发白名单正则配置
2 parents 5dbe998 + 87841a9 commit a46ecad

File tree

9 files changed

+45
-9
lines changed

9 files changed

+45
-9
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ if __name__ == "__main__":
9595
```
9696

9797
## 版本更新
98+
### v39.3.3-1(2024.11.18)
99+
100+
* 新增消息转发正则白名单配置,只针对r#type为1的纯文本消息
101+
未配置白名单,则默认转发所有消息
102+
配置白名单,只有符合正则的消息才会转发
103+
非文本消息,如好友消息,红包消息,卡片消息等默认转发
104+
98105
### v39.3.3(2024.11.15)
99106

100107
* 升级 WCF 至 v39.3.3

src-tauri/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "wcfrust"
3-
version = "39.3.3"
3+
version = "39.3.3-1"
44
description = "A HTTP (Rust) client for WeChatFerry"
55
authors = ["Changhua"]
66
license = "MIT"
@@ -41,6 +41,7 @@ rand = "0.8.5"
4141
ureq = { version = "2.10", features = ["json"] }
4242
rust_socketio = {version = "0.6.0", features = ["async"] }
4343
futures-util = "0.3.31"
44+
regex = "1"
4445

4546
[features]
4647
# this feature is used for production builds or when `devPath` points to the filesystem

src-tauri/config.json5

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"cburl":[],"http_server_port":10010,"wsurl":"","file_dir":"","front_msg_show":true}
1+
{"cburl":[],"http_server_port":10010,"wsurl":"","file_dir":"","front_msg_show":true,"msg_filter_regexp":""}

src-tauri/src/handler/message/http_message_handler.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
use async_trait::async_trait;
22

3-
use crate::{handler::event_entity::{Event, EventHandler}, service::global_service::GLOBAL};
3+
use crate::{
4+
handler::event_entity::{Event, EventHandler},
5+
service::global_service::GLOBAL,
6+
};
47

8+
use regex::Regex;
59
use serde_json::json;
610

711
/// 配置 http 回调地址后,将调用设置的url,
@@ -14,13 +18,27 @@ impl EventHandler for HttpMessageHandler {
1418
async fn handle(&mut self, event: Event) {
1519
if let Event::ClientMessage(ref msg) = event {
1620
let global = GLOBAL.get().unwrap();
17-
let wechat_config = global.wechat_config.read().unwrap();
18-
let cburl = wechat_config.cburl.clone();
21+
let (cburl, msg_filter_regexp) = {
22+
let config = global.wechat_config.read().unwrap();
23+
(config.cburl.clone(), config.msg_filter_regexp.clone())
24+
};
1925
if cburl.is_empty() {
26+
log::debug!("未配置回调地址,跳过处理");
2027
return;
2128
}
22-
23-
for url in cburl {
29+
// 仅对文本消息做过滤,其他消息也默认转发,如好友消息,红包消息,链接消息等
30+
if msg.r#type == 1 {
31+
if let Some(ref regex_str) = msg_filter_regexp {
32+
let regex = Regex::new(&regex_str).unwrap();
33+
if !regex.is_match(&msg.content) {
34+
log::debug!("消息被过滤,内容: {:?}", &msg.content);
35+
return;
36+
}
37+
} else {
38+
log::debug!("未配置正则过滤,所有消息转发")
39+
}
40+
}
41+
for url in cburl {
2442
log::debug!("http服务 {} 回调地址为: {:?}", self.id, url.clone());
2543
if !url.starts_with("http") {
2644
log::error!("http 转发消息失败,回调地址不合法");
@@ -38,7 +56,7 @@ impl EventHandler for HttpMessageHandler {
3856
Err(e) => {
3957
log::error!("转发消息失败:{}", e);
4058
}
41-
}
59+
}
4260
}
4361
}
4462
}

src-tauri/src/wechat_config.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ pub struct WechatConfig {
1212
pub file_dir: String,
1313
// 前端日志显示
1414
pub front_msg_show: bool,
15+
// 消息正则白名单过滤
16+
pub msg_filter_regexp: Option<String>,
1517
}

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
},
1010
"package": {
1111
"productName": "WcfRust",
12-
"version": "39.3.3"
12+
"version": "39.3.3-1"
1313
},
1414
"tauri": {
1515
"systemTray": {

src/components/Setting.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ const submitForm = async () => {
6363
<el-input v-model="configStore.wechatConfig.wsurl" />
6464
</el-form-item>
6565
</el-card>
66+
<el-card class="w-full mt-4">
67+
<template #header>消息过滤配置</template>
68+
<el-form-item label="正则白名单过滤:">
69+
<el-input v-model="configStore.wechatConfig.msg_filter_regexp" />
70+
</el-form-item>
71+
</el-card>
6672
</el-form>
6773
</el-main>
6874
</el-container>

src/store/modules/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export const useConfigStore = defineStore('config', () => {
1414
// 显示消息日志
1515
front_msg_show: true,
1616
file_dir: '',
17+
msg_filter_regexp: '',
1718
});
1819

1920
const update = async () => {

src/types/config.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ export type WechatConfig = {
44
http_server_port: number,
55
front_msg_show: boolean,
66
file_dir: string;
7+
msg_filter_regexp: string;
78
}

0 commit comments

Comments
 (0)