11use 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 ;
59use 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 }
0 commit comments