use super::{GroupMessageUser, MessageAttachment, MessageReference};
use crate::models::{Snowflake, Timestamp};
use serde::{Deserialize, Serialize};
use crate::models::message::GroupMessageParams;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct GroupMessage {
pub id: Option<Snowflake>,
pub content: Option<String>,
pub message_reference: Option<MessageReference>,
#[serde(default)]
pub mentions: Vec<GroupMessageUser>,
#[serde(default)]
pub attachments: Vec<MessageAttachment>,
pub msg_seq: Option<u64>,
pub timestamp: Option<Timestamp>,
pub author: Option<GroupMessageUser>,
pub group_openid: Option<String>,
#[serde(skip)]
pub event_id: Option<String>,
}
impl GroupMessage {
pub async fn reply(
&self,
api: &crate::api_impl::BotApi,
content: &str,
) -> Result<crate::models::api::MessageResponse, crate::error::BotError> {
if let (Some(group_openid), Some(msg_id)) = (&self.group_openid, &self.id) {
let params = GroupMessageParams {
msg_type: 0,
content: Some(content.to_string()),
msg_id: Some(msg_id.clone()),
event_id: self.event_id.clone(),
..Default::default()
};
api.send_group_message(group_openid, params).await
} else {
Err(crate::error::BotError::InvalidData(
"Missing group_openid or message_id for reply".to_string(),
))
}
}
}