use super::{MessageAttachment, MessageMember, MessageReference, MessageScene, MessageUser};
use crate::models::{Snowflake, Timestamp};
use serde::{Deserialize, Serialize};
use crate::models::message::{Ark, Embed, MessageParams};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Message {
pub id: Option<Snowflake>,
pub content: Option<String>,
pub channel_id: Option<Snowflake>,
pub guild_id: Option<Snowflake>,
pub group_id: Option<Snowflake>,
pub author: Option<MessageUser>,
pub member: Option<MessageMember>,
pub message_reference: Option<MessageReference>,
#[serde(default)]
pub mentions: Vec<MessageUser>,
#[serde(default)]
pub attachments: Vec<MessageAttachment>,
#[serde(default)]
pub embeds: Vec<Embed>,
pub ark: Option<Ark>,
pub direct_message: Option<bool>,
pub seq: Option<u64>,
pub seq_in_channel: Option<String>,
pub timestamp: Option<Timestamp>,
pub edited_timestamp: Option<Timestamp>,
pub mention_everyone: Option<bool>,
pub src_guild_id: Option<Snowflake>,
pub file_info: Option<String>,
pub ttl: Option<u32>,
pub message_scene: Option<MessageScene>,
#[serde(skip)]
pub event_id: Option<String>,
}
impl Message {
pub async fn reply(
&self,
api: &crate::api_impl::BotApi,
content: &str,
) -> Result<crate::models::api::MessageResponse, crate::error::BotError> {
if let (Some(channel_id), Some(msg_id)) = (&self.channel_id, &self.id) {
let params = MessageParams {
content: Some(content.to_string()),
msg_id: Some(msg_id.clone()),
event_id: self.event_id.clone(),
..Default::default()
};
api.send_message(channel_id, params).await
} else {
Err(crate::error::BotError::InvalidData(
"Missing channel_id or message_id for reply".to_string(),
))
}
}
}