Guilds + Channels

This commit is contained in:
kozabrada123 2023-07-30 09:04:31 +02:00
parent ba25cab1e9
commit 1ce9bf08cd
4 changed files with 65 additions and 7 deletions

View File

@ -12,6 +12,9 @@ use crate::types::{Channel, ChannelCreateSchema, Guild, GuildCreateSchema};
impl Guild { impl Guild {
/// Creates a new guild. /// Creates a new guild.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#create-guild>
pub async fn create( pub async fn create(
user: &mut UserMeta, user: &mut UserMeta,
guild_create_schema: GuildCreateSchema, guild_create_schema: GuildCreateSchema,
@ -41,6 +44,9 @@ impl Guild {
/// Ok(_) => println!("Guild deleted successfully"), /// Ok(_) => println!("Guild deleted successfully"),
/// } /// }
/// ``` /// ```
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#delete-guild>
pub async fn delete(user: &mut UserMeta, guild_id: Snowflake) -> ChorusResult<()> { pub async fn delete(user: &mut UserMeta, guild_id: Snowflake) -> ChorusResult<()> {
let url = format!( let url = format!(
"{}/guilds/{}/delete/", "{}/guilds/{}/delete/",
@ -57,6 +63,14 @@ impl Guild {
} }
/// Creates a new channel in a guild. /// Creates a new channel in a guild.
///
/// Requires the [MANAGE_CHANNELS](crate::types::PermissionFlags::MANAGE_CHANNELS) permission.
///
/// # Notes
/// This method is a wrapper for [Channel::create].
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#create-guild-channel>
pub async fn create_channel( pub async fn create_channel(
&self, &self,
user: &mut UserMeta, user: &mut UserMeta,
@ -65,7 +79,12 @@ impl Guild {
Channel::create(user, self.id, schema).await Channel::create(user, self.id, schema).await
} }
/// Returns a list of the guild's channels /// Returns a list of the guild's channels.
///
/// Doesn't include threads.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#get-guild-channels>
pub async fn channels(&self, user: &mut UserMeta) -> ChorusResult<Vec<Channel>> { pub async fn channels(&self, user: &mut UserMeta) -> ChorusResult<Vec<Channel>> {
let chorus_request = ChorusRequest { let chorus_request = ChorusRequest {
request: Client::new() request: Client::new()
@ -97,6 +116,9 @@ impl Guild {
} }
/// Fetches a guild by its id. /// Fetches a guild by its id.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#get-channel>
pub async fn get(guild_id: Snowflake, user: &mut UserMeta) -> ChorusResult<Guild> { pub async fn get(guild_id: Snowflake, user: &mut UserMeta) -> ChorusResult<Guild> {
let chorus_request = ChorusRequest { let chorus_request = ChorusRequest {
request: Client::new() request: Client::new()
@ -115,6 +137,11 @@ impl Guild {
impl Channel { impl Channel {
/// Creates a new channel in a guild. /// Creates a new channel in a guild.
///
/// Requires the [MANAGE_CHANNELS](crate::types::PermissionFlags::MANAGE_CHANNELS) permission.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#create-guild-channel>
pub async fn create( pub async fn create(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,

View File

@ -10,6 +10,9 @@ use crate::{
impl types::GuildMember { impl types::GuildMember {
/// Retrieves a guild member. /// Retrieves a guild member.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#get-guild-member>
pub async fn get( pub async fn get(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,
@ -31,6 +34,9 @@ impl types::GuildMember {
} }
/// Adds a role to a guild member. /// Adds a role to a guild member.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#add-guild-member-role>
pub async fn add_role( pub async fn add_role(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,
@ -52,6 +58,9 @@ impl types::GuildMember {
} }
/// Removes a role from a guild member. /// Removes a role from a guild member.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#remove-guild-member-role>
pub async fn remove_role( pub async fn remove_role(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,

View File

@ -12,11 +12,12 @@ use crate::{
impl types::RoleObject { impl types::RoleObject {
/// Retrieves a list of roles for a given guild. /// Retrieves a list of roles for a given guild.
/// ///
/// Returns Ok(None) if the guild has no roles. /// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#get-guild-roles>
pub async fn get_all( pub async fn get_all(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,
) -> ChorusResult<Option<Vec<RoleObject>>> { ) -> ChorusResult<Vec<RoleObject>> {
let url = format!( let url = format!(
"{}/guilds/{}/roles/", "{}/guilds/{}/roles/",
user.belongs_to.borrow().urls.api, user.belongs_to.borrow().urls.api,
@ -30,13 +31,11 @@ impl types::RoleObject {
.deserialize_response::<Vec<RoleObject>>(user) .deserialize_response::<Vec<RoleObject>>(user)
.await .await
.unwrap(); .unwrap();
if roles.is_empty() { Ok(roles)
return Ok(None);
}
Ok(Some(roles))
} }
/// Retrieves a single role for a given guild. /// Retrieves a single role for a given guild.
// TODO: Couldn't find reference
pub async fn get( pub async fn get(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,
@ -58,6 +57,9 @@ impl types::RoleObject {
} }
/// Creates a new role for a given guild. /// Creates a new role for a given guild.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#create-guild-role>
pub async fn create( pub async fn create(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,
@ -83,6 +85,9 @@ impl types::RoleObject {
} }
/// Updates the position of a role in a given guild's hierarchy. /// Updates the position of a role in a given guild's hierarchy.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#modify-guild-role-positions>
pub async fn position_update( pub async fn position_update(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,
@ -110,6 +115,9 @@ impl types::RoleObject {
} }
/// Updates a role in a guild. /// Updates a role in a guild.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#modify-guild-role>
pub async fn update( pub async fn update(
user: &mut UserMeta, user: &mut UserMeta,
guild_id: Snowflake, guild_id: Snowflake,

View File

@ -72,9 +72,15 @@ pub struct Channel {
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] #[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
/// A tag that can be applied to a thread in a [ChannelType::GuildForum] or [ChannelType::GuildMedia] channel.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#forum-tag-object>
pub struct Tag { pub struct Tag {
pub id: Snowflake, pub id: Snowflake,
/// The name of the tag (max 20 characters)
pub name: String, pub name: String,
/// Whether this tag can only be added to or removed from threads by members with the [MANAGE_THREADS](crate::types::PermissionFlags::MANAGE_THREADS) permission
pub moderated: bool, pub moderated: bool,
pub emoji_id: Option<Snowflake>, pub emoji_id: Option<Snowflake>,
pub emoji_name: Option<String>, pub emoji_name: Option<String>,
@ -95,6 +101,8 @@ pub struct PermissionOverwrite {
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] #[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#thread-metadata-object>
pub struct ThreadMetadata { pub struct ThreadMetadata {
pub archived: bool, pub archived: bool,
pub auto_archive_duration: i32, pub auto_archive_duration: i32,
@ -105,6 +113,8 @@ pub struct ThreadMetadata {
} }
#[derive(Default, Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] #[derive(Default, Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#thread-member-object>
pub struct ThreadMember { pub struct ThreadMember {
pub id: Option<Snowflake>, pub id: Option<Snowflake>,
pub user_id: Option<Snowflake>, pub user_id: Option<Snowflake>,
@ -114,6 +124,10 @@ pub struct ThreadMember {
} }
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] #[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
/// Specifies the emoji to use as the default way to react to a [ChannelType::GuildForum] or [ChannelType::GuildMedia] channel post.
///
/// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/channel#default-reaction-object>
pub struct DefaultReaction { pub struct DefaultReaction {
#[serde(default)] #[serde(default)]
pub emoji_id: Option<Snowflake>, pub emoji_id: Option<Snowflake>,