commit
391dcb6bf4
|
@ -7,7 +7,9 @@ use crate::errors::ChorusError;
|
||||||
use crate::errors::ChorusResult;
|
use crate::errors::ChorusResult;
|
||||||
use crate::instance::UserMeta;
|
use crate::instance::UserMeta;
|
||||||
use crate::ratelimiter::ChorusRequest;
|
use crate::ratelimiter::ChorusRequest;
|
||||||
use crate::types::{Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildCreateSchema};
|
use crate::types::{
|
||||||
|
Channel, ChannelCreateSchema, Guild, GuildBanCreateSchema, GuildCreateSchema, GuildModifySchema,
|
||||||
|
};
|
||||||
use crate::types::{GuildBan, Snowflake};
|
use crate::types::{GuildBan, Snowflake};
|
||||||
|
|
||||||
impl Guild {
|
impl Guild {
|
||||||
|
@ -161,6 +163,28 @@ impl Guild {
|
||||||
.await?;
|
.await?;
|
||||||
Ok(response)
|
Ok(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// # Reference
|
||||||
|
/// <https://discord-userdoccers.vercel.app/resources/guild#modify-guild>
|
||||||
|
pub async fn modify(
|
||||||
|
guild_id: Snowflake,
|
||||||
|
schema: GuildModifySchema,
|
||||||
|
user: &mut UserMeta,
|
||||||
|
) -> ChorusResult<Guild> {
|
||||||
|
let chorus_request = ChorusRequest {
|
||||||
|
request: Client::new()
|
||||||
|
.patch(format!(
|
||||||
|
"{}/guilds/{}",
|
||||||
|
user.belongs_to.borrow().urls.api,
|
||||||
|
guild_id,
|
||||||
|
))
|
||||||
|
.header("Authorization", user.token())
|
||||||
|
.body(to_string(&schema).unwrap()),
|
||||||
|
limit_type: LimitType::Guild(guild_id),
|
||||||
|
};
|
||||||
|
let response = chorus_request.deserialize_response::<Guild>(user).await?;
|
||||||
|
Ok(response)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Channel {
|
impl Channel {
|
||||||
|
|
|
@ -14,6 +14,7 @@ use crate::types::{
|
||||||
utils::Snowflake,
|
utils::Snowflake,
|
||||||
Composite,
|
Composite,
|
||||||
};
|
};
|
||||||
|
use bitflags::bitflags;
|
||||||
|
|
||||||
/// See <https://discord.com/developers/docs/resources/guild>
|
/// See <https://discord.com/developers/docs/resources/guild>
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, Updateable, Composite)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, Updateable, Composite)]
|
||||||
|
@ -33,7 +34,7 @@ pub struct Guild {
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
#[observe_option_vec]
|
#[observe_option_vec]
|
||||||
pub channels: Option<Vec<Arc<RwLock<Channel>>>>,
|
pub channels: Option<Vec<Arc<RwLock<Channel>>>>,
|
||||||
pub default_message_notifications: Option<i32>,
|
pub default_message_notifications: Option<MessageNotificationLevel>,
|
||||||
pub description: Option<String>,
|
pub description: Option<String>,
|
||||||
pub discovery_splash: Option<String>,
|
pub discovery_splash: Option<String>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
|
@ -57,9 +58,9 @@ pub struct Guild {
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub max_stage_video_channel_users: Option<i32>,
|
pub max_stage_video_channel_users: Option<i32>,
|
||||||
pub max_video_channel_users: Option<i32>,
|
pub max_video_channel_users: Option<i32>,
|
||||||
pub mfa_level: Option<i32>,
|
pub mfa_level: Option<MFALevel>,
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
pub nsfw_level: Option<i32>,
|
pub nsfw_level: Option<NSFWLevel>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub owner: Option<bool>,
|
pub owner: Option<bool>,
|
||||||
// True if requesting user is owner
|
// True if requesting user is owner
|
||||||
|
@ -69,7 +70,7 @@ pub struct Guild {
|
||||||
pub preferred_locale: Option<String>,
|
pub preferred_locale: Option<String>,
|
||||||
pub premium_progress_bar_enabled: Option<bool>,
|
pub premium_progress_bar_enabled: Option<bool>,
|
||||||
pub premium_subscription_count: Option<i32>,
|
pub premium_subscription_count: Option<i32>,
|
||||||
pub premium_tier: Option<i32>,
|
pub premium_tier: Option<PremiumTier>,
|
||||||
pub primary_category_id: Option<Snowflake>,
|
pub primary_category_id: Option<Snowflake>,
|
||||||
pub public_updates_channel_id: Option<Snowflake>,
|
pub public_updates_channel_id: Option<Snowflake>,
|
||||||
pub region: Option<String>,
|
pub region: Option<String>,
|
||||||
|
@ -82,11 +83,11 @@ pub struct Guild {
|
||||||
pub splash: Option<String>,
|
pub splash: Option<String>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub stickers: Option<Vec<Sticker>>,
|
pub stickers: Option<Vec<Sticker>>,
|
||||||
pub system_channel_flags: Option<i32>,
|
pub system_channel_flags: Option<u64>,
|
||||||
pub system_channel_id: Option<Snowflake>,
|
pub system_channel_id: Option<Snowflake>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub vanity_url_code: Option<String>,
|
pub vanity_url_code: Option<String>,
|
||||||
pub verification_level: Option<i32>,
|
pub verification_level: Option<VerificationLevel>,
|
||||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
#[observe_option_vec]
|
#[observe_option_vec]
|
||||||
pub voice_states: Option<Vec<Arc<RwLock<VoiceState>>>>,
|
pub voice_states: Option<Vec<Arc<RwLock<VoiceState>>>>,
|
||||||
|
@ -199,3 +200,95 @@ pub enum GuildScheduledEventEntityType {
|
||||||
pub struct GuildScheduledEventEntityMetadata {
|
pub struct GuildScheduledEventEntityMetadata {
|
||||||
pub location: Option<String>,
|
pub location: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, Eq, PartialEq)]
|
||||||
|
pub struct VoiceRegion {
|
||||||
|
id: String,
|
||||||
|
name: String,
|
||||||
|
optimal: bool,
|
||||||
|
deprecated: bool,
|
||||||
|
custom: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
/// See <https://discord-userdoccers.vercel.app/resources/guild#message-notification-level>
|
||||||
|
pub enum MessageNotificationLevel {
|
||||||
|
#[default]
|
||||||
|
AllMessages = 0,
|
||||||
|
OnlyMentions = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
/// See <https://discord-userdoccers.vercel.app/resources/guild#explicit-content-filter-level>
|
||||||
|
pub enum ExplicitContentFilterLevel {
|
||||||
|
#[default]
|
||||||
|
Disabled = 0,
|
||||||
|
MembersWithoutRoles = 1,
|
||||||
|
AllMembers = 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
/// See <https://discord-userdoccers.vercel.app/resources/guild#verification-level>
|
||||||
|
pub enum VerificationLevel {
|
||||||
|
#[default]
|
||||||
|
None = 0,
|
||||||
|
Low = 1,
|
||||||
|
Medium = 2,
|
||||||
|
High = 3,
|
||||||
|
VeryHigh = 4,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
/// See <https://discord-userdoccers.vercel.app/resources/guild#verification-level>
|
||||||
|
pub enum MFALevel {
|
||||||
|
#[default]
|
||||||
|
None = 0,
|
||||||
|
Elevated = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
/// See <https://discord-userdoccers.vercel.app/resources/guild#verification-level>
|
||||||
|
pub enum NSFWLevel {
|
||||||
|
#[default]
|
||||||
|
Default = 0,
|
||||||
|
Explicit = 1,
|
||||||
|
Safe = 2,
|
||||||
|
AgeRestricted = 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize_repr, Deserialize_repr, Debug, Default, Clone, Eq, PartialEq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
/// See <https://discord-userdoccers.vercel.app/resources/guild#verification-level>
|
||||||
|
pub enum PremiumTier {
|
||||||
|
#[default]
|
||||||
|
None = 0,
|
||||||
|
Tier1 = 1,
|
||||||
|
Tier2 = 2,
|
||||||
|
Tier3 = 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
bitflags! {
|
||||||
|
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
|
||||||
|
/// # Reference
|
||||||
|
/// See <https://discord-userdoccers.vercel.app/resources/guild#system-channel-flags>
|
||||||
|
pub struct SystemChannelFlags: u64 {
|
||||||
|
/// Indicates if an app uses the Auto Moderation API
|
||||||
|
const SUPPRESS_JOIN_NOTIFICATIONS = 1 << 0;
|
||||||
|
const SUPPRESS_PREMIUM_SUBSCRIPTIONS = 1 << 1;
|
||||||
|
const SUPPRESS_GUILD_REMINDER_NOTIFICATIONS = 1 << 2;
|
||||||
|
const SUPPRESS_JOIN_NOTIFICATION_REPLIES = 1 << 3;
|
||||||
|
const SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS = 1 << 4;
|
||||||
|
const SUPPRESS_ROLE_SUBSCRIPTION_PURCHASE_NOTIFICATIONS_REPLIES = 1 << 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::entities::Channel;
|
use crate::types::entities::Channel;
|
||||||
|
use crate::types::types::guild_configuration::GuildFeatures;
|
||||||
|
use crate::types::{
|
||||||
|
ExplicitContentFilterLevel, MessageNotificationLevel, Snowflake, SystemChannelFlags,
|
||||||
|
VerificationLevel,
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
|
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
|
@ -24,3 +29,30 @@ pub struct GuildBanCreateSchema {
|
||||||
pub delete_message_days: Option<u8>,
|
pub delete_message_days: Option<u8>,
|
||||||
pub delete_message_seconds: Option<u32>,
|
pub delete_message_seconds: Option<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Default, Clone, Eq, PartialEq)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
|
pub struct GuildModifySchema {
|
||||||
|
pub name: Option<String>,
|
||||||
|
pub icon: Option<Vec<u8>>,
|
||||||
|
pub banner: Option<Vec<u8>>,
|
||||||
|
pub home_header: Option<Vec<u8>>,
|
||||||
|
pub splash: Option<Vec<u8>>,
|
||||||
|
pub discovery_splash: Option<Vec<u8>>,
|
||||||
|
pub owner_id: Option<Snowflake>,
|
||||||
|
pub description: Option<String>,
|
||||||
|
pub region: Option<String>,
|
||||||
|
pub afk_channel_id: Option<Snowflake>,
|
||||||
|
pub afk_timeout: Option<u16>,
|
||||||
|
pub verification_level: Option<VerificationLevel>,
|
||||||
|
pub default_message_notifications: Option<MessageNotificationLevel>,
|
||||||
|
pub explicit_content_filter: Option<ExplicitContentFilterLevel>,
|
||||||
|
pub features: Option<Vec<GuildFeatures>>,
|
||||||
|
pub system_channel_id: Option<Snowflake>,
|
||||||
|
pub system_channel_flags: Option<SystemChannelFlags>,
|
||||||
|
pub rules_channel_id: Option<Snowflake>,
|
||||||
|
pub public_updates_channel_id: Option<Snowflake>,
|
||||||
|
pub safety_alerts_channel_id: Option<Snowflake>,
|
||||||
|
pub preferred_locale: Option<String>,
|
||||||
|
pub premium_progress_bar_enabled: Option<bool>,
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
use chorus::types::{CreateChannelInviteSchema, Guild, GuildBanCreateSchema, GuildCreateSchema};
|
use chorus::types::{
|
||||||
|
CreateChannelInviteSchema, Guild, GuildBanCreateSchema, GuildCreateSchema, GuildModifySchema,
|
||||||
|
};
|
||||||
|
|
||||||
mod common;
|
mod common;
|
||||||
|
|
||||||
|
@ -66,3 +68,18 @@ async fn guild_create_ban() {
|
||||||
.is_err());
|
.is_err());
|
||||||
common::teardown(bundle).await
|
common::teardown(bundle).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn modify_guild() {
|
||||||
|
let mut bundle = common::setup().await;
|
||||||
|
let schema = GuildModifySchema {
|
||||||
|
name: Some("Mycoolguild".to_string()),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
let guild_id = bundle.guild.read().unwrap().id;
|
||||||
|
let result = Guild::modify(guild_id, schema, &mut bundle.user)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(result.name.unwrap(), "Mycoolguild".to_string());
|
||||||
|
common::teardown(bundle).await
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue