|
| 1 | +use async_trait::async_trait; |
| 2 | +use quickxml_to_serde::{xml_string_to_json, Config}; |
| 3 | + |
| 4 | +use crate::{handler::event_entity::{Event, EventHandler}, service::global_service::GLOBAL, wcferry::wcf}; |
| 5 | + |
| 6 | +/// 日志打印 |
| 7 | +pub struct EventMessageHandler { |
| 8 | + pub id: String, |
| 9 | +} |
| 10 | + |
| 11 | +#[async_trait] |
| 12 | +impl EventHandler for EventMessageHandler { |
| 13 | + async fn handle(&mut self, event: Event) { |
| 14 | + if let Event::ClientMessage(ref msg) = event { |
| 15 | + if msg.r#type == 1 { |
| 16 | + |
| 17 | + log::debug!("[{}] 接收到事件推送:{:?}", self.id, msg); |
| 18 | + if !msg.content.contains("关键词") { |
| 19 | + return |
| 20 | + } |
| 21 | + |
| 22 | + // 解析xml 判断是否是at自己的信息 |
| 23 | + let mut is_at_me = false; |
| 24 | + |
| 25 | + let global = GLOBAL.get().unwrap(); |
| 26 | + let wechat_service = global.wechat_service.clone(); |
| 27 | + let self_wx_id = wechat_service.lock().unwrap().get_self_wxid(); |
| 28 | + |
| 29 | + let json = xml_string_to_json(msg.xml.clone(), &Config::new_with_defaults()).unwrap(); |
| 30 | + let msgsource = json.get("msgsource"); |
| 31 | + if msgsource.is_some(){ |
| 32 | + // 事件推送中包含 @某人,记录 @某人列表 |
| 33 | + let at_user_list = msgsource.unwrap().get("atuserlist"); |
| 34 | + if at_user_list.is_some() { |
| 35 | + |
| 36 | + let at_user_list = at_user_list.unwrap(); |
| 37 | + for at_user_item in at_user_list.as_str().unwrap().split(",") { |
| 38 | + if self_wx_id == at_user_item { |
| 39 | + is_at_me = true; |
| 40 | + } |
| 41 | + } |
| 42 | + } |
| 43 | + } |
| 44 | + |
| 45 | + // 如果不是@我,则停止处理 |
| 46 | + if !is_at_me { |
| 47 | + return; |
| 48 | + } |
| 49 | + log::debug!("[{}] 接收到事件有人@我:{:?}", self.id, msg); |
| 50 | + let wechat_service = global.wechat_service.clone(); |
| 51 | + let text_msg = wcf::TextMsg{ |
| 52 | + msg: format!("@{} {}",msg.sender.clone()," 事件推送有人at我".to_string()), |
| 53 | + receiver: msg.roomid.clone(), |
| 54 | + aters: msg.sender.clone() |
| 55 | + }; |
| 56 | + log::debug!("发送的文本信息 -- {:?}",text_msg); |
| 57 | + wechat_service.lock().unwrap().send_text(text_msg); |
| 58 | + } |
| 59 | + } |
| 60 | + } |
| 61 | +} |
| 62 | + |
| 63 | + |
| 64 | + |
0 commit comments