titanium_model/
channel.rs

1use crate::snowflake::Snowflake;
2use crate::thread::{DefaultReaction, ForumTag, ThreadMember, ThreadMetadata};
3use crate::user::User;
4use crate::TitanString;
5use serde::{Deserialize, Serialize};
6
7/// Discord Channel representation.
8#[derive(Debug, Clone, Deserialize, Serialize)]
9pub struct Channel<'a> {
10    /// Channel ID.
11    pub id: Snowflake,
12    /// Channel type.
13    #[serde(rename = "type")]
14    pub channel_type: u8,
15    /// Guild ID (if in a guild).
16    #[serde(default)]
17    pub guild_id: Option<Snowflake>,
18    /// Sorting position.
19    #[serde(default)]
20    pub position: Option<i32>,
21    /// Permission overwrites.
22    #[serde(default)]
23    pub permission_overwrites: Vec<PermissionOverwrite>,
24    /// Channel name (1-100 characters).
25    #[serde(default)]
26    pub name: Option<TitanString<'a>>,
27    /// Channel topic (0-4096 characters for forum, 0-1024 for others).
28    #[serde(default)]
29    pub topic: Option<TitanString<'a>>,
30    /// Whether NSFW.
31    #[serde(default)]
32    pub nsfw: bool,
33    /// ID of the last message sent.
34    #[serde(default)]
35    pub last_message_id: Option<Snowflake>,
36    /// Bitrate (for voice).
37    #[serde(default)]
38    pub bitrate: Option<u32>,
39    /// User limit (for voice).
40    #[serde(default)]
41    pub user_limit: Option<u32>,
42    /// Rate limit per user in seconds.
43    #[serde(default)]
44    pub rate_limit_per_user: Option<u32>,
45    /// Recipients of the DM.
46    #[serde(default)]
47    pub recipients: Vec<User<'a>>,
48    /// Icon hash (for group DM).
49    #[serde(default)]
50    pub icon: Option<TitanString<'a>>,
51    /// ID of the DM creator.
52    #[serde(default)]
53    pub owner_id: Option<Snowflake>,
54    /// Application ID of the group DM creator if bot-created.
55    #[serde(default)]
56    pub application_id: Option<Snowflake>,
57    /// Whether the channel is managed by an application.
58    #[serde(default)]
59    pub managed: bool,
60    /// Parent category ID.
61    #[serde(default)]
62    pub parent_id: Option<Snowflake>,
63    /// Last pin timestamp.
64    #[serde(default)]
65    pub last_pin_timestamp: Option<TitanString<'a>>,
66    /// Voice region ID.
67    #[serde(default)]
68    pub rtc_region: Option<TitanString<'a>>,
69    /// Video quality mode.
70    #[serde(default)]
71    pub video_quality_mode: Option<u8>,
72    /// Approximate message count (threads).
73    #[serde(default)]
74    pub message_count: Option<u32>,
75    /// Approximate member count (threads).
76    #[serde(default)]
77    pub member_count: Option<u32>,
78    /// Thread metadata.
79    #[serde(default)]
80    pub thread_metadata: Option<ThreadMetadata<'a>>,
81    /// Thread member object for the current user.
82    #[serde(default)]
83    pub member: Option<ThreadMember<'a>>,
84    /// Default auto-archive duration.
85    #[serde(default)]
86    pub default_auto_archive_duration: Option<u32>,
87    /// Computed permissions for the user.
88    #[serde(default)]
89    pub permissions: Option<crate::permissions::Permissions>,
90    /// Channel flags as a bitfield.
91    #[serde(default)]
92    pub flags: Option<u64>,
93    /// Total messages ever sent (threads).
94    #[serde(default)]
95    pub total_message_sent: Option<u32>,
96    /// Tags available in a forum channel.
97    #[serde(default)]
98    pub available_tags: Vec<ForumTag<'a>>,
99    /// IDs of tags applied to a forum thread.
100    #[serde(default)]
101    pub applied_tags: Vec<Snowflake>,
102    /// Default reaction emoji.
103    #[serde(default)]
104    pub default_reaction_emoji: Option<DefaultReaction<'a>>,
105    /// Default slowmode for threads.
106    #[serde(default)]
107    pub default_thread_rate_limit_per_user: Option<u32>,
108    /// Default sort order for forum posts.
109    #[serde(default)]
110    pub default_sort_order: Option<u8>,
111    /// Default forum layout.
112    #[serde(default)]
113    pub default_forum_layout: Option<u8>,
114}
115
116impl<'a> crate::Mention for Channel<'a> {
117    fn mention(&self) -> String {
118        format!("<#{}>", self.id.0)
119    }
120}
121
122/// Permission overwrite for a channel.
123#[derive(Debug, Clone, Deserialize, Serialize)]
124pub struct PermissionOverwrite {
125    /// Role or user ID.
126    pub id: Snowflake,
127    /// Type (0 = role, 1 = member).
128    #[serde(rename = "type")]
129    pub overwrite_type: u8,
130    /// Permission bit set for allowed permissions.
131    pub allow: crate::permissions::Permissions,
132    /// Permission bit set for denied permissions.
133    pub deny: crate::permissions::Permissions,
134}
135
136/// A channel mention.
137#[derive(Debug, Clone, Deserialize, Serialize)]
138pub struct ChannelMention {
139    /// Channel ID.
140    pub id: Snowflake,
141    /// Guild ID.
142    pub guild_id: Snowflake,
143    /// Channel type.
144    #[serde(rename = "type")]
145    pub channel_type: u8,
146    /// Channel name.
147    pub name: String,
148}
149
150/// Channel pins update event.
151#[derive(Debug, Clone, Deserialize, Serialize)]
152pub struct ChannelPinsUpdateEvent {
153    #[serde(default)]
154    pub guild_id: Option<Snowflake>,
155    pub channel_id: Snowflake,
156    #[serde(default)]
157    pub last_pin_timestamp: Option<String>,
158}