polyphony_types/events/
thread.rs

1use serde::{Deserialize, Serialize};
2use crate::entities::{Channel, GuildMember, ThreadMember};
3use crate::events::WebSocketEvent;
4
5#[derive(Debug, Default, Deserialize, Serialize)]
6/// See https://discord.com/developers/docs/topics/gateway-events#thread-create
7/// Not directly serialized, as the inner payload is a channel object
8pub struct ThreadCreate {
9    pub thread: Channel,
10}
11
12impl WebSocketEvent for ThreadCreate {}
13
14#[derive(Debug, Default, Deserialize, Serialize)]
15/// See https://discord.com/developers/docs/topics/gateway-events#thread-update
16/// Not directly serialized, as the inner payload is a channel object
17pub struct ThreadUpdate {
18    pub thread: Channel,
19}
20
21impl WebSocketEvent for ThreadUpdate {}
22
23#[derive(Debug, Default, Deserialize, Serialize)]
24/// See https://discord.com/developers/docs/topics/gateway-events#thread-delete
25/// Not directly serialized, as the inner payload is a channel object
26pub struct ThreadDelete {
27    pub thread: Channel,
28}
29
30impl WebSocketEvent for ThreadDelete {}
31
32#[derive(Debug, Default, Deserialize, Serialize)]
33/// See https://discord.com/developers/docs/topics/gateway-events#thread-list-sync
34pub struct ThreadListSync {
35    pub guild_id: String,
36    pub channel_ids: Option<Vec<String>>,
37    pub threads: Vec<Channel>,
38    pub members: Vec<ThreadMember>,
39}
40
41impl WebSocketEvent for ThreadListSync {}
42
43#[derive(Debug, Default, Deserialize, Serialize)]
44/// See https://discord.com/developers/docs/topics/gateway-events#thread-member-update
45/// The inner payload is a thread member object with an extra field.
46/// The extra field is a bit painful, because we can't just serialize a thread member object
47pub struct ThreadMemberUpdate {
48    pub id: Option<u64>,
49    pub user_id: Option<u64>,
50    pub join_timestamp: Option<String>,
51    pub flags: Option<u64>,
52    pub member: Option<GuildMember>,
53    pub guild_id: String,
54}
55
56impl ThreadMemberUpdate {
57    /// Convert self to a thread member, losing the added guild_id field
58    pub fn to_thread_member(self) -> ThreadMember {
59        ThreadMember {
60            id: self.id,
61            user_id: self.user_id,
62            join_timestamp: self.join_timestamp.clone(),
63            flags: self.flags,
64            member: self.member,
65        }
66    }
67}
68
69impl WebSocketEvent for ThreadMemberUpdate {}
70
71#[derive(Debug, Default, Deserialize, Serialize)]
72/// See https://discord.com/developers/docs/topics/gateway-events#thread-members-update
73pub struct ThreadMembersUpdate {
74    pub id: String,
75    pub guild_id: String,
76    /// Capped at 50
77    pub member_count: u8,
78    pub added_members: Option<Vec<ThreadMember>>,
79    pub removed_members: Option<Vec<String>>,
80}
81
82impl WebSocketEvent for ThreadMembersUpdate {}