Skip to content

Commit

Permalink
feat(model, cache): Add support for stage video
Browse files Browse the repository at this point in the history
  • Loading branch information
suneettipirneni committed Feb 15, 2023
1 parent 854b098 commit 74664a1
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 1 deletion.
3 changes: 3 additions & 0 deletions twilight-cache-inmemory/src/event/guild.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ impl InMemoryCache {
large,
max_members,
max_presences,
max_stage_video_channel_users,
max_video_channel_users,
member_count,
members,
Expand Down Expand Up @@ -137,6 +138,7 @@ impl InMemoryCache {
large,
max_members,
max_presences,
max_stage_video_channel_users,
max_video_channel_users,
member_count,
mfa_level,
Expand Down Expand Up @@ -413,6 +415,7 @@ mod tests {
large: false,
max_members: Some(50),
max_presences: Some(100),
max_stage_video_channel_users: Some(10),
max_video_channel_users: None,
member_count: Some(25),
members: Vec::new(),
Expand Down
6 changes: 6 additions & 0 deletions twilight-cache-inmemory/src/model/guild.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ pub struct CachedGuild {
pub(crate) large: bool,
pub(crate) max_members: Option<u64>,
pub(crate) max_presences: Option<u64>,
pub(crate) max_stage_video_channel_users: Option<u64>,
pub(crate) max_video_channel_users: Option<u64>,
pub(crate) member_count: Option<u64>,
pub(crate) mfa_level: MfaLevel,
Expand Down Expand Up @@ -149,6 +150,11 @@ impl CachedGuild {
self.max_presences
}

/// Maximum number of users in a stage video channel.
pub const fn max_stage_video_channel_users(&self) -> Option<u64> {
self.max_stage_video_channel_users
}

/// Maximum number of users in a video channel.
pub const fn max_video_channel_users(&self) -> Option<u64> {
self.max_video_channel_users
Expand Down
1 change: 1 addition & 0 deletions twilight-cache-inmemory/src/permission.rs
Original file line number Diff line number Diff line change
Expand Up @@ -726,6 +726,7 @@ mod tests {
large: false,
max_members: None,
max_presences: None,
max_video_channel_users: None,
member_count: None,
members: Vec::new(),
mfa_level: MfaLevel::Elevated,
Expand Down
1 change: 1 addition & 0 deletions twilight-cache-inmemory/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ pub fn guild(id: Id<GuildMarker>, member_count: Option<u64>) -> Guild {
large: false,
max_members: None,
max_presences: None,
max_stage_video_channel_users: None,
max_video_channel_users: None,
member_count,
members: Vec::new(),
Expand Down
24 changes: 24 additions & 0 deletions twilight-model/src/channel/message/kind.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,14 @@ pub enum MessageType {
RoleSubscriptionPurchase,
/// System message denoting a interaction premium upsell.
InteractionPremiumUpsell,
/// System message denoting a stage instance has started.
StageStart,
/// System message denoting a stage instance has ended.
StageEnd,
/// System message for stage instance speakers.
StageSpeaker,
/// System message denoting the topic for a stage instance.
StageTopic,
/// System message denoting a guild application premium subscription.
GuildApplicationPremiumSubscription,
/// Variant value is unknown to the library.
Expand Down Expand Up @@ -99,6 +107,10 @@ impl MessageType {
| Self::AutoModerationAction
| Self::RoleSubscriptionPurchase
| Self::InteractionPremiumUpsell
| Self::StageStart
| Self::StageEnd
| Self::StageSpeaker
| Self::StageTopic
)
}

Expand Down Expand Up @@ -156,6 +168,10 @@ impl From<u8> for MessageType {
24 => Self::AutoModerationAction,
25 => Self::RoleSubscriptionPurchase,
26 => Self::InteractionPremiumUpsell,
27 => Self::StageStart,
28 => Self::StageEnd,
29 => Self::StageSpeaker,
31 => Self::StageTopic,
32 => Self::GuildApplicationPremiumSubscription,
unknown => Self::Unknown(unknown),
}
Expand Down Expand Up @@ -191,6 +207,10 @@ impl From<MessageType> for u8 {
MessageType::AutoModerationAction => 24,
MessageType::RoleSubscriptionPurchase => 25,
MessageType::InteractionPremiumUpsell => 26,
MessageType::StageStart => 27,
MessageType::StageEnd => 28,
MessageType::StageSpeaker => 29,
MessageType::StageTopic => 31,
MessageType::GuildApplicationPremiumSubscription => 32,
MessageType::Unknown(unknown) => unknown,
}
Expand Down Expand Up @@ -256,6 +276,10 @@ mod tests {
(MessageType::AutoModerationAction, 24, true),
(MessageType::RoleSubscriptionPurchase, 25, true),
(MessageType::InteractionPremiumUpsell, 26, true),
(MessageType::StageStart, 27, true),
(MessageType::StageEnd, 28, true),
(MessageType::StageSpeaker, 29, true),
(MessageType::StageTopic, 31, true),
(MessageType::GuildApplicationPremiumSubscription, 32, false),
];

Expand Down
22 changes: 21 additions & 1 deletion twilight-model/src/guild/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ pub struct Guild {
#[serde(skip_serializing_if = "Option::is_none")]
pub max_presences: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_stage_video_channel_users: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_video_channel_users: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub member_count: Option<u64>,
Expand Down Expand Up @@ -176,6 +178,7 @@ impl<'de> Deserialize<'de> for Guild {
Large,
MaxMembers,
MaxPresences,
MaxStageVideoChannelUsers,
MaxVideoChannelUsers,
MemberCount,
Members,
Expand Down Expand Up @@ -237,6 +240,7 @@ impl<'de> Deserialize<'de> for Guild {
let mut large = None;
let mut max_members = None::<Option<_>>;
let mut max_presences = None::<Option<_>>;
let mut max_stage_video_channel_users = None::<Option<_>>;
let mut max_video_channel_users = None::<Option<_>>;
let mut member_count = None::<Option<_>>;
let mut members = None;
Expand Down Expand Up @@ -427,6 +431,15 @@ impl<'de> Deserialize<'de> for Guild {

max_presences = Some(map.next_value()?);
}
Field::MaxStageVideoChannelUsers => {
if max_stage_video_channel_users.is_some() {
return Err(DeError::duplicate_field(
"max_stage_video_channel_users",
));
}

max_stage_video_channel_users = Some(map.next_value()?);
}
Field::MaxVideoChannelUsers => {
if max_video_channel_users.is_some() {
return Err(DeError::duplicate_field("max_video_channel_users"));
Expand Down Expand Up @@ -672,6 +685,8 @@ impl<'de> Deserialize<'de> for Guild {
let joined_at = joined_at.unwrap_or_default();
let max_members = max_members.unwrap_or_default();
let max_presences = max_presences.unwrap_or_default();
let max_stage_video_channel_users =
max_stage_video_channel_users.unwrap_or_default();
let max_video_channel_users = max_video_channel_users.unwrap_or_default();
let member_count = member_count.unwrap_or_default();
let members = members.unwrap_or_default();
Expand Down Expand Up @@ -784,6 +799,7 @@ impl<'de> Deserialize<'de> for Guild {
large,
max_members,
max_presences,
max_stage_video_channel_users,
max_video_channel_users,
member_count,
members,
Expand Down Expand Up @@ -909,6 +925,7 @@ mod tests {
large: true,
max_members: Some(25_000),
max_presences: Some(10_000),
max_stage_video_channel_users: Some(10),
max_video_channel_users: Some(10),
member_count: Some(12_000),
members: Vec::new(),
Expand Down Expand Up @@ -945,7 +962,7 @@ mod tests {
&[
Token::Struct {
name: "Guild",
len: 46,
len: 47,
},
Token::Str("afk_channel_id"),
Token::Some,
Expand Down Expand Up @@ -1004,6 +1021,9 @@ mod tests {
Token::Str("max_presences"),
Token::Some,
Token::U64(10_000),
Token::Str("max_stage_video_channel_users"),
Token::Some,
Token::U64(10),
Token::Str("max_video_channel_users"),
Token::Some,
Token::U64(10),
Expand Down

0 comments on commit 74664a1

Please sign in to comment.