polyphony_types/entities/
channel.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{
4    entities::{GuildMember, User},
5    utils::Snowflake,
6};
7
8#[derive(Default, Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
9pub struct Channel {
10    pub id: Snowflake,
11    #[serde(rename = "type")]
12    pub channel_type: ChannelType,
13    pub guild_id: Option<String>,
14    pub position: Option<i32>,
15    pub permission_overwrites: Option<Vec<PermissionOverwrite>>,
16    pub name: Option<String>,
17    pub topic: Option<String>,
18    pub nsfw: Option<bool>,
19    pub last_message_id: Option<String>,
20    pub bitrate: Option<i32>,
21    pub user_limit: Option<i32>,
22    pub rate_limit_per_user: Option<i32>,
23    pub recipients: Option<Vec<User>>,
24    pub icon: Option<String>,
25    pub owner_id: Option<String>,
26    pub application_id: Option<String>,
27    pub parent_id: Option<String>,
28    pub last_pin_timestamp: Option<String>,
29    pub rtc_region: Option<String>,
30    pub video_quality_mode: Option<i32>,
31    pub message_count: Option<i32>,
32    pub member_count: Option<i32>,
33    pub thread_metadata: Option<ThreadMetadata>,
34    pub member: Option<ThreadMember>,
35    pub default_auto_archive_duration: Option<i32>,
36    pub permissions: Option<String>,
37    pub flags: Option<i32>,
38    pub total_message_sent: Option<i32>,
39    pub available_tags: Option<Vec<Tag>>,
40    pub applied_tags: Option<Vec<String>>,
41    pub default_reaction_emoji: Option<DefaultReaction>,
42    pub default_thread_rate_limit_per_user: Option<i32>,
43    pub default_sort_order: Option<i32>,
44    pub default_forum_layout: Option<i32>,
45}
46
47#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
48pub struct Tag {
49    pub id: u64,
50    pub name: String,
51    pub moderated: bool,
52    pub emoji_id: Option<u64>,
53    pub emoji_name: Option<String>,
54}
55
56#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
57pub struct PermissionOverwrite {
58    pub id: String,
59    #[serde(rename = "type")]
60    pub overwrite_type: u8,
61    pub allow: String,
62    pub deny: String,
63}
64
65#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
66pub struct ThreadMetadata {
67    pub archived: bool,
68    pub auto_archive_duration: i32,
69    pub archive_timestamp: String,
70    pub locked: bool,
71    pub invitable: Option<bool>,
72    pub create_timestamp: Option<String>,
73}
74
75#[derive(Default, Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
76pub struct ThreadMember {
77    pub id: Option<u64>,
78    pub user_id: Option<u64>,
79    pub join_timestamp: Option<String>,
80    pub flags: Option<u64>,
81    pub member: Option<GuildMember>,
82}
83
84#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
85pub struct DefaultReaction {
86    pub emoji_id: Option<String>,
87    pub emoji_name: Option<String>,
88}
89
90#[derive(Default, Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
91#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
92#[repr(i32)]
93pub enum ChannelType {
94    #[default]
95    GuildText = 0,
96    Dm = 1,
97    GuildVoice = 2,
98    GroupDm = 3,
99    GuildCategory = 4,
100    GuildNews = 5,
101    GuildStore = 6,
102    Encrypted = 7,
103    EncryptedThreads = 8,
104    Transactional = 9,
105    GuildNewsThread = 10,
106    GuildPublicThread = 11,
107    GuildPrivateThread = 12,
108    GuildStageVoice = 13,
109    Directory = 14,
110    GuildForum = 15,
111    TicketTracker = 33,
112    Kanban = 34,
113    VoicelessWhiteboard = 35,
114    CustomStart = 64,
115    Unhandled = 255,
116}