twilight_model/guild/audit_log/
event_type.rs

1use serde::{Deserialize, Serialize};
2
3/// Action to cause an [`AuditLogEntry`].
4///
5/// [`AuditLogEntry`]: super::AuditLogEntry
6#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
7#[serde(from = "u16", into = "u16")]
8pub enum AuditLogEventType {
9    /// [Guild] was updated.
10    ///
11    /// [Guild]: crate::guild::Guild
12    GuildUpdate,
13    /// [Channel] was created.
14    ///
15    /// [Channel]: crate::channel::Channel
16    ChannelCreate,
17    /// [Channel] was updated.
18    ///
19    /// [Channel]: crate::channel::Channel
20    ChannelUpdate,
21    /// [Channel] was deleted.
22    ///
23    /// [Channel]: crate::channel::Channel
24    ChannelDelete,
25    /// [Permission overwrite] for a [channel] was created.
26    ///
27    /// [channel]: crate::channel::Channel
28    /// [Permission overwrite]: crate::channel::permission_overwrite::PermissionOverwrite
29    ChannelOverwriteCreate,
30    /// [Permission overwrite] for a [channel] was updated.
31    ///
32    /// [channel]: crate::channel::Channel
33    /// [Permission overwrite]: crate::channel::permission_overwrite::PermissionOverwrite
34    ChannelOverwriteUpdate,
35    /// [Permission overwrite] for a [channel] was deleted.
36    ///
37    /// [channel]: crate::channel::Channel
38    /// [Permission overwrite]: crate::channel::permission_overwrite::PermissionOverwrite
39    ChannelOverwriteDelete,
40    /// [Member] was kicked.
41    ///
42    /// [Member]: crate::guild::Member
43    MemberKick,
44    /// [Member] prune began.
45    ///
46    /// [Member]: crate::guild::Member
47    MemberPrune,
48    /// [Member] was banned.
49    ///
50    /// [Member]: crate::guild::Member
51    MemberBanAdd,
52    /// [Member]'s [ban] was removed.
53    ///
54    /// [ban]: crate::guild::Ban
55    /// [Member]: crate::guild::Member
56    MemberBanRemove,
57    /// [Member] was updated.
58    ///
59    /// [Member]: crate::guild::Member
60    MemberUpdate,
61    /// [Member] either had a [role] attached or removed.
62    ///
63    /// [Member]: crate::guild::Member
64    /// [role]: crate::guild::Role
65    MemberRoleUpdate,
66    /// [Member] was moved between voice [channel]s.
67    ///
68    /// [Member]: crate::guild::Member
69    /// [channel]: crate::channel::Channel
70    MemberMove,
71    /// [Member] was disconnected from a voice [channel].
72    ///
73    /// [Member]: crate::guild::Member
74    /// [channel]: crate::channel::Channel
75    MemberDisconnect,
76    /// [Bot user] was added to a [guild].
77    ///
78    /// [Bot user]: crate::user::User::bot
79    /// [guild]: crate::guild::Guild
80    BotAdd,
81    /// [Role] was created.
82    ///
83    /// [Role]: crate::guild::Role
84    RoleCreate,
85    /// [Role] was updated.
86    ///
87    /// [Role]: crate::guild::Role
88    RoleUpdate,
89    /// [Role] was deleted.
90    ///
91    /// [Role]: crate::guild::Role
92    RoleDelete,
93    /// [Invite] was created.
94    ///
95    /// [Invite]: crate::guild::invite::Invite
96    InviteCreate,
97    /// [Invite] was updated.
98    ///
99    /// [Invite]: crate::guild::invite::Invite
100    InviteUpdate,
101    /// [Invite] was deleted.
102    ///
103    /// [Invite]: crate::guild::invite::Invite
104    InviteDelete,
105    /// [Webhook] was created.
106    ///
107    /// [Webhook]: crate::channel::webhook::Webhook
108    WebhookCreate,
109    /// [Webhook] was updated.
110    ///
111    /// [Webhook]: crate::channel::webhook::Webhook
112    WebhookUpdate,
113    /// [Webhook] was deleted.
114    ///
115    /// [Webhook]: crate::channel::webhook::Webhook
116    WebhookDelete,
117    /// [Emoji] was created.
118    ///
119    /// [Emoji]: crate::guild::Emoji
120    EmojiCreate,
121    /// [Emoji] was updated.
122    ///
123    /// [Emoji]: crate::guild::Emoji
124    EmojiUpdate,
125    /// [Emoji] was deleted.
126    ///
127    /// [Emoji]: crate::guild::Emoji
128    EmojiDelete,
129    /// [Message] was deleted.
130    ///
131    /// [Message]: crate::channel::message::Message
132    MessageDelete,
133    /// Multiple [messages] were deleted.
134    ///
135    /// [messages]: crate::channel::message::Message
136    MessageBulkDelete,
137    /// [Message] was pinned to a [channel].
138    ///
139    /// [Message]: crate::channel::message::Message
140    /// [channel]: crate::channel::Channel
141    MessagePin,
142    /// [Message] was unpinned from a [channel].
143    ///
144    /// [Message]: crate::channel::message::Message
145    /// [channel]: crate::channel::Channel
146    MessageUnpin,
147    /// [Integration] was created.
148    ///
149    /// [Integration]: crate::guild::GuildIntegration
150    IntegrationCreate,
151    /// [Integration] was updated.
152    ///
153    /// [Integration]: crate::guild::GuildIntegration
154    IntegrationUpdate,
155    /// [Integration] was deleted.
156    ///
157    /// [Integration]: crate::guild::GuildIntegration
158    IntegrationDelete,
159    /// [Stage instance] was created.
160    ///
161    /// [Stage instance]: crate::channel::stage_instance::StageInstance
162    StageInstanceCreate,
163    /// [Stage instance] was updated.
164    ///
165    /// [Stage instance]: crate::channel::stage_instance::StageInstance
166    StageInstanceUpdate,
167    /// [Stage instance] was deleted.
168    ///
169    /// [Stage instance]: crate::channel::stage_instance::StageInstance
170    StageInstanceDelete,
171    /// [Sticker] was created.
172    ///
173    /// [Sticker]: crate::channel::message::sticker::Sticker
174    StickerCreate,
175    /// [Sticker] was updated.
176    ///
177    /// [Sticker]: crate::channel::message::sticker::Sticker
178    StickerUpdate,
179    /// [Sticker] was deleted.
180    ///
181    /// [Sticker]: crate::channel::message::sticker::Sticker
182    StickerDelete,
183    /// [`GuildScheduledEvent`] was created.
184    ///
185    /// [`GuildScheduledEvent`]: crate::guild::scheduled_event::GuildScheduledEvent
186    GuildScheduledEventCreate,
187    /// [`GuildScheduledEvent`] was updated.
188    ///
189    /// [`GuildScheduledEvent`]: crate::guild::scheduled_event::GuildScheduledEvent
190    GuildScheduledEventUpdate,
191    /// [`GuildScheduledEvent`] was deleted.
192    ///
193    /// [`GuildScheduledEvent`]: crate::guild::scheduled_event::GuildScheduledEvent
194    GuildScheduledEventDelete,
195    /// Thread [channel] was created.
196    ///
197    /// [channel]: crate::channel::Channel
198    ThreadCreate,
199    /// Thread [channel] was updated.
200    ///
201    /// [channel]: crate::channel::Channel
202    ThreadUpdate,
203    /// Thread [channel] was deleted.
204    ///
205    /// [channel]: crate::channel::Channel
206    ThreadDelete,
207    /// A [`GuildCommandPermissions`] was updated.
208    ///
209    /// [`GuildCommandPermissions`]: crate::application::command::permissions::GuildCommandPermissions
210    ApplicationCommandPermissionUpdate,
211    /// [`AutoModerationRule`] has been created.
212    ///
213    /// [`AutoModerationRule`]: crate::guild::auto_moderation::AutoModerationRule
214    AutoModerationRuleCreate,
215    /// [`AutoModerationRule`] has been updated.
216    ///
217    /// [`AutoModerationRule`]: crate::guild::auto_moderation::AutoModerationRule
218    AutoModerationRuleUpdate,
219    /// [`AutoModerationRule`] has been deleted.
220    ///
221    /// [`AutoModerationRule`]: crate::guild::auto_moderation::AutoModerationRule
222    AutoModerationRuleDelete,
223    /// Message has been blocked by AutoMod.
224    AutoModerationBlockMessage,
225    /// Message has been flagged by AutoMod.
226    AutoModerationFlagToChannel,
227    /// A member has been timed out by AutoMod.
228    AutoModerationUserCommunicationDisabled,
229    /// Creator monetization request was created.
230    CreatorMonetizationRequestCreated,
231    /// Creator monetization terms were accepted.
232    CreatorMonetizationTermsAccepted,
233    /// Variant value is unknown to the library.
234    Unknown(u16),
235}
236
237impl From<u16> for AuditLogEventType {
238    fn from(value: u16) -> Self {
239        match value {
240            1 => AuditLogEventType::GuildUpdate,
241            10 => AuditLogEventType::ChannelCreate,
242            11 => AuditLogEventType::ChannelUpdate,
243            12 => AuditLogEventType::ChannelDelete,
244            13 => AuditLogEventType::ChannelOverwriteCreate,
245            14 => AuditLogEventType::ChannelOverwriteUpdate,
246            15 => AuditLogEventType::ChannelOverwriteDelete,
247            20 => AuditLogEventType::MemberKick,
248            21 => AuditLogEventType::MemberPrune,
249            22 => AuditLogEventType::MemberBanAdd,
250            23 => AuditLogEventType::MemberBanRemove,
251            24 => AuditLogEventType::MemberUpdate,
252            25 => AuditLogEventType::MemberRoleUpdate,
253            26 => AuditLogEventType::MemberMove,
254            17 => AuditLogEventType::MemberDisconnect,
255            28 => AuditLogEventType::BotAdd,
256            30 => AuditLogEventType::RoleCreate,
257            31 => AuditLogEventType::RoleUpdate,
258            32 => AuditLogEventType::RoleDelete,
259            40 => AuditLogEventType::InviteCreate,
260            41 => AuditLogEventType::InviteUpdate,
261            42 => AuditLogEventType::InviteDelete,
262            50 => AuditLogEventType::WebhookCreate,
263            51 => AuditLogEventType::WebhookUpdate,
264            52 => AuditLogEventType::WebhookDelete,
265            60 => AuditLogEventType::EmojiCreate,
266            61 => AuditLogEventType::EmojiUpdate,
267            62 => AuditLogEventType::EmojiDelete,
268            72 => AuditLogEventType::MessageDelete,
269            73 => AuditLogEventType::MessageBulkDelete,
270            74 => AuditLogEventType::MessagePin,
271            75 => AuditLogEventType::MessageUnpin,
272            80 => AuditLogEventType::IntegrationCreate,
273            81 => AuditLogEventType::IntegrationUpdate,
274            82 => AuditLogEventType::IntegrationDelete,
275            83 => AuditLogEventType::StageInstanceCreate,
276            84 => AuditLogEventType::StageInstanceUpdate,
277            85 => AuditLogEventType::StageInstanceDelete,
278            90 => AuditLogEventType::StickerCreate,
279            91 => AuditLogEventType::StickerUpdate,
280            92 => AuditLogEventType::StickerDelete,
281            100 => AuditLogEventType::GuildScheduledEventCreate,
282            101 => AuditLogEventType::GuildScheduledEventUpdate,
283            102 => AuditLogEventType::GuildScheduledEventDelete,
284            110 => AuditLogEventType::ThreadCreate,
285            111 => AuditLogEventType::ThreadUpdate,
286            112 => AuditLogEventType::ThreadDelete,
287            121 => AuditLogEventType::ApplicationCommandPermissionUpdate,
288            140 => AuditLogEventType::AutoModerationRuleCreate,
289            141 => AuditLogEventType::AutoModerationRuleUpdate,
290            142 => AuditLogEventType::AutoModerationRuleDelete,
291            143 => AuditLogEventType::AutoModerationBlockMessage,
292            144 => AuditLogEventType::AutoModerationFlagToChannel,
293            145 => AuditLogEventType::AutoModerationUserCommunicationDisabled,
294            150 => AuditLogEventType::CreatorMonetizationRequestCreated,
295            151 => AuditLogEventType::CreatorMonetizationTermsAccepted,
296            unknown => AuditLogEventType::Unknown(unknown),
297        }
298    }
299}
300
301impl From<AuditLogEventType> for u16 {
302    fn from(value: AuditLogEventType) -> Self {
303        match value {
304            AuditLogEventType::GuildUpdate => 1,
305            AuditLogEventType::ChannelCreate => 10,
306            AuditLogEventType::ChannelUpdate => 11,
307            AuditLogEventType::ChannelDelete => 12,
308            AuditLogEventType::ChannelOverwriteCreate => 13,
309            AuditLogEventType::ChannelOverwriteUpdate => 14,
310            AuditLogEventType::ChannelOverwriteDelete => 15,
311            AuditLogEventType::MemberKick => 20,
312            AuditLogEventType::MemberPrune => 21,
313            AuditLogEventType::MemberBanAdd => 22,
314            AuditLogEventType::MemberBanRemove => 23,
315            AuditLogEventType::MemberUpdate => 24,
316            AuditLogEventType::MemberRoleUpdate => 25,
317            AuditLogEventType::MemberMove => 26,
318            AuditLogEventType::MemberDisconnect => 27,
319            AuditLogEventType::BotAdd => 28,
320            AuditLogEventType::RoleCreate => 30,
321            AuditLogEventType::RoleUpdate => 31,
322            AuditLogEventType::RoleDelete => 32,
323            AuditLogEventType::InviteCreate => 40,
324            AuditLogEventType::InviteUpdate => 41,
325            AuditLogEventType::InviteDelete => 42,
326            AuditLogEventType::WebhookCreate => 50,
327            AuditLogEventType::WebhookUpdate => 51,
328            AuditLogEventType::WebhookDelete => 52,
329            AuditLogEventType::EmojiCreate => 60,
330            AuditLogEventType::EmojiUpdate => 61,
331            AuditLogEventType::EmojiDelete => 62,
332            AuditLogEventType::MessageDelete => 72,
333            AuditLogEventType::MessageBulkDelete => 73,
334            AuditLogEventType::MessagePin => 74,
335            AuditLogEventType::MessageUnpin => 75,
336            AuditLogEventType::IntegrationCreate => 80,
337            AuditLogEventType::IntegrationUpdate => 81,
338            AuditLogEventType::IntegrationDelete => 82,
339            AuditLogEventType::StageInstanceCreate => 83,
340            AuditLogEventType::StageInstanceUpdate => 84,
341            AuditLogEventType::StageInstanceDelete => 85,
342            AuditLogEventType::StickerCreate => 90,
343            AuditLogEventType::StickerUpdate => 91,
344            AuditLogEventType::StickerDelete => 92,
345            AuditLogEventType::GuildScheduledEventCreate => 100,
346            AuditLogEventType::GuildScheduledEventUpdate => 101,
347            AuditLogEventType::GuildScheduledEventDelete => 102,
348            AuditLogEventType::ThreadCreate => 110,
349            AuditLogEventType::ThreadUpdate => 111,
350            AuditLogEventType::ThreadDelete => 112,
351            AuditLogEventType::ApplicationCommandPermissionUpdate => 121,
352            AuditLogEventType::AutoModerationRuleCreate => 140,
353            AuditLogEventType::AutoModerationRuleUpdate => 141,
354            AuditLogEventType::AutoModerationRuleDelete => 142,
355            AuditLogEventType::AutoModerationBlockMessage => 143,
356            AuditLogEventType::AutoModerationFlagToChannel => 144,
357            AuditLogEventType::AutoModerationUserCommunicationDisabled => 145,
358            AuditLogEventType::CreatorMonetizationRequestCreated => 150,
359            AuditLogEventType::CreatorMonetizationTermsAccepted => 151,
360            AuditLogEventType::Unknown(unknown) => unknown,
361        }
362    }
363}
364
365#[cfg(test)]
366mod tests {
367    use super::AuditLogEventType;
368    use serde::{Deserialize, Serialize};
369    use static_assertions::assert_impl_all;
370    use std::{fmt::Debug, hash::Hash};
371
372    assert_impl_all!(
373        AuditLogEventType: Clone,
374        Copy,
375        Debug,
376        Deserialize<'static>,
377        Eq,
378        Hash,
379        PartialEq,
380        Send,
381        Serialize,
382        Sync,
383    );
384
385    #[test]
386    fn test_values() {
387        assert_eq!(1, u16::from(AuditLogEventType::GuildUpdate));
388        assert_eq!(10, u16::from(AuditLogEventType::ChannelCreate));
389        assert_eq!(11, u16::from(AuditLogEventType::ChannelUpdate));
390        assert_eq!(12, u16::from(AuditLogEventType::ChannelDelete));
391        assert_eq!(13, u16::from(AuditLogEventType::ChannelOverwriteCreate));
392        assert_eq!(14, u16::from(AuditLogEventType::ChannelOverwriteUpdate));
393        assert_eq!(15, u16::from(AuditLogEventType::ChannelOverwriteDelete));
394        assert_eq!(20, u16::from(AuditLogEventType::MemberKick));
395        assert_eq!(21, u16::from(AuditLogEventType::MemberPrune));
396        assert_eq!(22, u16::from(AuditLogEventType::MemberBanAdd));
397        assert_eq!(23, u16::from(AuditLogEventType::MemberBanRemove));
398        assert_eq!(24, u16::from(AuditLogEventType::MemberUpdate));
399        assert_eq!(25, u16::from(AuditLogEventType::MemberRoleUpdate));
400        assert_eq!(26, u16::from(AuditLogEventType::MemberMove));
401        assert_eq!(27, u16::from(AuditLogEventType::MemberDisconnect));
402        assert_eq!(28, u16::from(AuditLogEventType::BotAdd));
403        assert_eq!(30, u16::from(AuditLogEventType::RoleCreate));
404        assert_eq!(31, u16::from(AuditLogEventType::RoleUpdate));
405        assert_eq!(32, u16::from(AuditLogEventType::RoleDelete));
406        assert_eq!(40, u16::from(AuditLogEventType::InviteCreate));
407        assert_eq!(41, u16::from(AuditLogEventType::InviteUpdate));
408        assert_eq!(42, u16::from(AuditLogEventType::InviteDelete));
409        assert_eq!(50, u16::from(AuditLogEventType::WebhookCreate));
410        assert_eq!(51, u16::from(AuditLogEventType::WebhookUpdate));
411        assert_eq!(52, u16::from(AuditLogEventType::WebhookDelete));
412        assert_eq!(60, u16::from(AuditLogEventType::EmojiCreate));
413        assert_eq!(61, u16::from(AuditLogEventType::EmojiUpdate));
414        assert_eq!(62, u16::from(AuditLogEventType::EmojiDelete));
415        assert_eq!(72, u16::from(AuditLogEventType::MessageDelete));
416        assert_eq!(73, u16::from(AuditLogEventType::MessageBulkDelete));
417        assert_eq!(74, u16::from(AuditLogEventType::MessagePin));
418        assert_eq!(75, u16::from(AuditLogEventType::MessageUnpin));
419        assert_eq!(80, u16::from(AuditLogEventType::IntegrationCreate));
420        assert_eq!(81, u16::from(AuditLogEventType::IntegrationUpdate));
421        assert_eq!(82, u16::from(AuditLogEventType::IntegrationDelete));
422        assert_eq!(83, u16::from(AuditLogEventType::StageInstanceCreate));
423        assert_eq!(84, u16::from(AuditLogEventType::StageInstanceUpdate));
424        assert_eq!(90, u16::from(AuditLogEventType::StickerCreate));
425        assert_eq!(91, u16::from(AuditLogEventType::StickerUpdate));
426        assert_eq!(92, u16::from(AuditLogEventType::StickerDelete));
427        assert_eq!(100, u16::from(AuditLogEventType::GuildScheduledEventCreate));
428        assert_eq!(101, u16::from(AuditLogEventType::GuildScheduledEventUpdate));
429        assert_eq!(102, u16::from(AuditLogEventType::GuildScheduledEventDelete));
430        assert_eq!(110, u16::from(AuditLogEventType::ThreadCreate));
431        assert_eq!(111, u16::from(AuditLogEventType::ThreadUpdate));
432        assert_eq!(112, u16::from(AuditLogEventType::ThreadDelete));
433        assert_eq!(
434            121,
435            u16::from(AuditLogEventType::ApplicationCommandPermissionUpdate)
436        );
437        assert_eq!(140, u16::from(AuditLogEventType::AutoModerationRuleCreate));
438        assert_eq!(141, u16::from(AuditLogEventType::AutoModerationRuleUpdate));
439        assert_eq!(142, u16::from(AuditLogEventType::AutoModerationRuleDelete));
440        assert_eq!(
441            143,
442            u16::from(AuditLogEventType::AutoModerationBlockMessage)
443        );
444        assert_eq!(
445            144,
446            u16::from(AuditLogEventType::AutoModerationFlagToChannel)
447        );
448        assert_eq!(
449            145,
450            u16::from(AuditLogEventType::AutoModerationUserCommunicationDisabled)
451        );
452        assert_eq!(
453            150,
454            u16::from(AuditLogEventType::CreatorMonetizationRequestCreated)
455        );
456        assert_eq!(
457            151,
458            u16::from(AuditLogEventType::CreatorMonetizationTermsAccepted)
459        );
460        assert_eq!(250, u16::from(AuditLogEventType::Unknown(250)));
461    }
462}