spectacles_model/guild/
audit_log.rs1use serde_json::value::RawValue;
2use serde_repr::{Deserialize_repr, Serialize_repr};
3
4use crate::message::Webhook;
5use crate::snowflake::Snowflake;
6use crate::User;
7
8#[derive(Clone, Debug, Deserialize, Serialize)]
10pub struct GuildAuditLog {
11    pub webhooks: Vec<Webhook>,
13    pub users: Vec<User>,
15    #[serde(rename = "audit_log_entries")]
17    pub entries: Vec<GuildAuditLogEntry>,
18}
19
20#[derive(Clone, Debug, Deserialize, Serialize)]
22pub struct GuildAuditLogEntry {
23    pub target_id: Option<String>,
25    #[serde(default)]
27    pub changes: Option<Vec<GuildAuditLogChange>>,
28    pub user_id: Snowflake,
30    pub id: Snowflake,
32    pub action_type: GuildAuditLogEvent,
34    pub options: Option<GuildAuditEntryInfo>,
36    pub reason: Option<String>,
38}
39
40#[derive(Clone, Debug, Deserialize, Serialize)]
41pub struct GuildAuditLogChange {
42    pub new_value: Box<RawValue>,
45    pub old_value: Box<RawValue>,
48    }
51
52#[derive(Clone, Debug, Deserialize, Serialize)]
53pub struct GuildAuditEntryInfo {
54    #[serde(default)]
57    pub delete_member_days: Option<String>,
58    #[serde(default)]
61    pub members_removed: Option<String>,
62    #[serde(default)]
64    pub channel_id: Option<Snowflake>,
65    #[serde(default)]
67    pub count: Option<String>,
68    #[serde(default)]
70    pub id: Option<Snowflake>,
71    #[serde(default, rename = "type")]
73    pub kind: Option<String>,
74    #[serde(default)]
76    pub role_name: Option<String>,
77}
78
79#[derive(Clone, Debug, Deserialize, Serialize)]
81pub enum GuildAuditLogChangeKey {
82    Name(String),
83    IconHash(String),
84    SplashHash(String),
85}
86
87#[derive(Clone, Debug, Deserialize_repr, Serialize_repr)]
88#[repr(u16)]
89pub enum GuildAuditLogEvent {
90    GuildUpdate = 1,
91    ChannelCreate = 10,
92    ChannelUpdate,
93    ChannelDelete,
94    ChannelOverwriteCreate,
95    ChannelOverwriteUpdate,
96    ChannelOverwriteDelete,
97    MemberKick = 20,
98    MemberPrune,
99    MemberBanAdd,
100    MemberBanRemove,
101    MemberUpdate,
102    MemberRoleUpdate,
103    RoleCreate = 30,
104    RoleUpdate,
105    RoleDelete,
106    InviteCreate = 40,
107    InviteUpdate,
108    InviteDelete,
109    WebhookCreate = 50,
110    WebhookUpdate,
111    WebhookDelete,
112    EmojiCreate = 60,
113    EmojiUpdate,
114    EmojiDelete,
115    MessageDelete = 72,
116}
117
118#[derive(Serialize, Debug, Default)]
119pub struct GetAuditLogOptions {
120    #[serde(skip_serializing_if = "Option::is_none")]
121    user_id: Option<Snowflake>,
122    #[serde(skip_serializing_if = "Option::is_none")]
123    action_type: Option<GuildAuditLogEvent>,
124    #[serde(skip_serializing_if = "Option::is_none")]
125    before: Option<Snowflake>,
126    #[serde(skip_serializing_if = "Option::is_none")]
127    limit: Option<i32>,
128}
129
130impl GetAuditLogOptions {
131    pub fn user_id(mut self, id: Snowflake) -> Self {
133        self.user_id = Some(id);
134        self
135    }
136
137    pub fn action_type(mut self, event: GuildAuditLogEvent) -> Self {
139        self.action_type = Some(event);
140        self
141    }
142
143    pub fn before(mut self, id: Snowflake) -> Self {
145        self.before = Some(id);
146        self
147    }
148
149    pub fn limit(mut self, num: i32) -> Self {
151        self.limit = Some(num);
152        self
153    }
154}