polyphony_types/entities/
channel.rs1use 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}