Add message acknowledge endpoint

This commit is contained in:
bitfl0wer 2023-08-22 22:06:19 +02:00
parent 2352034b82
commit c11ab6f727
No known key found for this signature in database
GPG Key ID: 0ACD574FCF5226CF
2 changed files with 42 additions and 1 deletions

View File

@ -8,7 +8,7 @@ use crate::errors::{ChorusError, ChorusResult};
use crate::instance::UserMeta;
use crate::ratelimiter::ChorusRequest;
use crate::types::{
Channel, CreateGreetMessage, Message, MessageSearchEndpoint, MessageSearchQuery,
Channel, CreateGreetMessage, Message, MessageAck, MessageSearchEndpoint, MessageSearchQuery,
MessageSendSchema, Snowflake,
};
@ -248,6 +248,40 @@ impl Message {
};
chorus_request.deserialize_response::<Message>(user).await
}
/// Sets the channel's latest acknowledged message (marks a message as read) for the current user.
/// The message ID parameter does not need to be a valid message ID, but it must be a valid snowflake.
/// If the message ID is being set to a message sent prior to the latest acknowledged one,
/// manual should be true or the resulting read state update should be ignored by clients (but is still saved), resulting in undefined behavior.
/// In this case, mention_count should also be set to the amount of mentions unacknowledged as it is not automatically calculated by Discord.
///
/// Returns an optional token, which can be used as the new `ack` token for following `ack`s.
///
/// # Reference:
/// See: <https://discord-userdoccers.vercel.app/resources/message#acknowledge-message>
pub async fn acknowledge(
channel_id: Snowflake,
message_id: Snowflake,
schema: MessageAck,
user: &mut UserMeta,
) -> ChorusResult<Option<String>> {
let chorus_request = ChorusRequest {
request: Client::new()
.post(format!(
"{}/channels/{}/messages/{}/ack",
user.belongs_to.borrow().urls.api,
channel_id,
message_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::<Option<String>>(user)
.await
}
}
fn search_error(result_text: String) -> ChorusError {

View File

@ -103,3 +103,10 @@ pub struct CreateGreetMessage {
pub allowed_mentions: Option<AllowedMention>,
pub message_reference: Option<MessageReference>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct MessageAck {
pub token: Option<String>,
pub manual: Option<bool>,
pub mention_count: Option<u32>,
}