diff --git a/src/api/channels/messages.rs b/src/api/channels/messages.rs index 60d6a97..538cae6 100644 --- a/src/api/channels/messages.rs +++ b/src/api/channels/messages.rs @@ -8,7 +8,8 @@ use crate::errors::{ChorusError, ChorusResult}; use crate::instance::UserMeta; use crate::ratelimiter::ChorusRequest; use crate::types::{ - Channel, Message, MessageSearchEndpoint, MessageSearchQuery, MessageSendSchema, Snowflake, + Channel, CreateGreetMessage, Message, MessageSearchEndpoint, MessageSearchQuery, + MessageSendSchema, Snowflake, }; impl Message { @@ -224,6 +225,29 @@ impl Message { }; chorus_request.deserialize_response::(user).await } + + /// Posts a greet message to a channel. This endpoint requires the channel is a DM channel or you reply to a system message. + /// # Reference: + /// See: + pub async fn create_greet( + channel_id: Snowflake, + schema: CreateGreetMessage, + user: &mut UserMeta, + ) -> ChorusResult { + let chorus_request = ChorusRequest { + request: Client::new() + .post(format!( + "{}/channels/{}/messages/greet", + user.belongs_to.borrow().urls.api, + channel_id, + )) + .header("Authorization", user.token()) + .header("Content-Type", "application/json") + .body(to_string(&schema).unwrap()), + limit_type: LimitType::Channel(channel_id), + }; + chorus_request.deserialize_response::(user).await + } } fn search_error(result_text: String) -> ChorusError { diff --git a/src/types/entities/message.rs b/src/types/entities/message.rs index 2522268..f59cdc5 100644 --- a/src/types/entities/message.rs +++ b/src/types/entities/message.rs @@ -104,7 +104,7 @@ impl PartialEq for Message { } } -#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, Ord, PartialOrd)] /// # Reference /// See pub struct MessageReference { @@ -124,7 +124,7 @@ pub struct MessageInteraction { pub member: Option>>, } -#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] +#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Eq, PartialOrd, Ord)] pub struct AllowedMention { parse: Vec, roles: Vec, @@ -132,7 +132,7 @@ pub struct AllowedMention { replied_user: bool, } -#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize)] +#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize, Eq, PartialOrd, Ord)] #[serde(rename_all = "snake_case")] pub enum AllowedMentionType { Roles, diff --git a/src/types/schema/message.rs b/src/types/schema/message.rs index e0ee804..bf9cddc 100644 --- a/src/types/schema/message.rs +++ b/src/types/schema/message.rs @@ -96,3 +96,10 @@ impl std::default::Default for MessageSearchQuery { } } } + +#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub struct CreateGreetMessage { + pub sticker_ids: Vec, + pub allowed_mentions: Option, + pub message_reference: Option, +}