use serde::{Deserialize, Serialize};
use crate::model::message::GroupMessageSender;
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct GroupMessageEvent {
pub sub_type: GroupMessageType,
pub message_id: u64,
pub user_id: u64,
pub group_id: u64,
pub message: Vec<crate::model::message::segment::MessageSegment>,
pub sender: GroupMessageSender,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum GroupMessageType {
Normal,
Anonymous,
Notice,
}
#[cfg(test)]
mod tests {
use crate::model::{
event::{BotEvent, GroupMessageType, MessageEvent, PostEvent},
message::segment::MessageSegment,
};
#[test]
fn test_deserialize_group_message_event() {
let json = r#"{"self_id":1796626362,"user_id":46595749,"time":1757679986,"message_id":434374353,"message_seq":434374353,"real_id":434374353,"real_seq":"9635","message_type":"group","sender":{"user_id":46595749,"nickname":"cc","card":"","role":"admin"},"raw_message":"[CQ:reply,id=1319395129][CQ:at,qq=3552586437] awien[CQ:at,qq=3552586437] this is so[CQ:image,file=A77A80E0DBF6A73387AEF190D7C1D449.png,sub_type=0,url=https://multimedia.nt.qq.com.cn/download?appid=1407&fileid=EhSWQKnNsZw62WxE3e06_g2FOTLzMhi1TSD_Ciid5biZnNOPAzIEcHJvZFCAvaMBWhDu6vYT0HHKmBmI5fcYnxxMegJz3YIBAmd6&rkey=CAQSMJskH7OvWAf5THIthpOJiC7-5xpK-c_vVUgMbde7dji8rjxdui9q1zQrlOd80pE_hQ,file_size=9909]me test [CQ:at,qq=1796626362] [CQ:image,file=F0C83EF6E2FE6B69CD7624F679783519.png,sub_type=0,url=https://multimedia.nt.qq.com.cn/download?appid=1407&fileid=EhQj6-w8uY-4c7R-64HHnWi-e7lMTxi6hQIg_wooie63mZzTjwMyBHByb2RQgL2jAVoQRzVWZ63jQK9D3N40-hwnPXoCTJSCAQJneg&rkey=CAQSMJskH7OvWAf5THIthpOJiC7-5xpK-c_vVUgMbde7dji8rjxdui9q1zQrlOd80pE_hQ,file_size=33466]","font":14,"sub_type":"normal","message":[{"type":"reply","data":{"id":"1319395129"}},{"type":"at","data":{"qq":"3552586437"}},{"type":"text","data":{"text":" awien"}},{"type":"at","data":{"qq":"3552586437"}},{"type":"text","data":{"text":" this is so"}},{"type":"image","data":{"summary":"","file":"A77A80E0DBF6A73387AEF190D7C1D449.png","sub_type":0,"url":"https://multimedia.nt.qq.com.cn/download?appid=1407&fileid=EhSWQKnNsZw62WxE3e06_g2FOTLzMhi1TSD_Ciid5biZnNOPAzIEcHJvZFCAvaMBWhDu6vYT0HHKmBmI5fcYnxxMegJz3YIBAmd6&rkey=CAQSMJskH7OvWAf5THIthpOJiC7-5xpK-c_vVUgMbde7dji8rjxdui9q1zQrlOd80pE_hQ","file_size":"9909"}},{"type":"text","data":{"text":"me test "}},{"type":"at","data":{"qq":"1796626362"}},{"type":"text","data":{"text":" "}},{"type":"image","data":{"summary":"","file":"F0C83EF6E2FE6B69CD7624F679783519.png","sub_type":0,"url":"https://multimedia.nt.qq.com.cn/download?appid=1407&fileid=EhQj6-w8uY-4c7R-64HHnWi-e7lMTxi6hQIg_wooie63mZzTjwMyBHByb2RQgL2jAVoQRzVWZ63jQK9D3N40-hwnPXoCTJSCAQJneg&rkey=CAQSMJskH7OvWAf5THIthpOJiC7-5xpK-c_vVUgMbde7dji8rjxdui9q1zQrlOd80pE_hQ","file_size":"33466"}}],"message_format":"array","post_type":"message","group_id":738943282,"group_name":"入机研究中心"}"#;
let bot_event: BotEvent = serde_json::from_str(json).expect("Failed to deserialize JSON");
match bot_event.post_type {
PostEvent::Message(message_event) => match message_event {
MessageEvent::Group(group_msg) => {
assert_eq!(group_msg.group_id, 738943282);
assert_eq!(group_msg.user_id, 46595749);
let GroupMessageType::Normal = group_msg.sub_type else {
panic!("Expected Normal sub_type");
};
assert_eq!(group_msg.message_id, 434374353);
assert_eq!(
group_msg.message,
vec![
MessageSegment::Reply {
id: "1319395129".to_string()
},
MessageSegment::At {
qq: "3552586437".to_string()
},
MessageSegment::Text {
text: " awien".to_string()
},
MessageSegment::At {
qq: "3552586437".to_string()
},
MessageSegment::Text {
text: " this is so".to_string()
},
MessageSegment::Image {
file: "A77A80E0DBF6A73387AEF190D7C1D449.png".to_string(),
url: Some("https://multimedia.nt.qq.com.cn/download?appid=1407&fileid=EhSWQKnNsZw62WxE3e06_g2FOTLzMhi1TSD_Ciid5biZnNOPAzIEcHJvZFCAvaMBWhDu6vYT0HHKmBmI5fcYnxxMegJz3YIBAmd6&rkey=CAQSMJskH7OvWAf5THIthpOJiC7-5xpK-c_vVUgMbde7dji8rjxdui9q1zQrlOd80pE_hQ".to_string()),
summary: Some("".to_string()),
sub_type: Some(0),
file_size: Some("9909".to_string()),
key: None,
emoji_id: None,
emoji_package_id: None,
},
MessageSegment::Text {
text: "me test ".to_string()
},
MessageSegment::At {
qq: "1796626362".to_string()
},
MessageSegment::Text {
text: " ".to_string()
},
MessageSegment::Image {
file: "F0C83EF6E2FE6B69CD7624F679783519.png".to_string(),
url: Some("https://multimedia.nt.qq.com.cn/download?appid=1407&fileid=EhQj6-w8uY-4c7R-64HHnWi-e7lMTxi6hQIg_wooie63mZzTjwMyBHByb2RQgL2jAVoQRzVWZ63jQK9D3N40-hwnPXoCTJSCAQJneg&rkey=CAQSMJskH7OvWAf5THIthpOJiC7-5xpK-c_vVUgMbde7dji8rjxdui9q1zQrlOd80pE_hQ".to_string()),
summary: Some("".to_string()),
sub_type: Some(0),
file_size: Some("33466".to_string()),
key: None,
emoji_id: None,
emoji_package_id: None,
},
]
);
}
_ => panic!("Expected GroupMessage event"),
},
_ => panic!("Expected Message event"),
}
}
}