Skip to main content

revolt_models/v0/
audit_logs.rs

1use crate::v0::{Member, PartialChannel, PartialEmoji, PartialMember, PartialRole, PartialServer, User};
2use revolt_permissions::Override;
3
4auto_derived!(
5    /// Audit log entry
6    pub struct AuditLogEntry {
7        /// Unique ID
8        #[serde(rename = "_id")]
9        pub id: String,
10
11        /// The server the entry happened in
12        pub server: String,
13        /// User provided reason
14        pub reason: Option<String>,
15        /// User who ran the action
16        pub user: String,
17        /// User this action is targetting
18        pub target: Option<String>,
19        /// The action ran
20        pub action: AuditLogEntryAction,
21    }
22
23    /// Indivual action stored on the audit log
24    #[serde(tag = "type")]
25    #[allow(clippy::large_enum_variant)]
26    pub enum AuditLogEntryAction {
27        MessageDelete {
28            author: String,
29            channel: String,
30        },
31        MessageBulkDelete {
32            channel: String,
33            count: usize,
34        },
35        MessagePin {
36            message: String,
37            author: String,
38            channel: String,
39        },
40        MessageUnpin {
41            message: String,
42            author: String,
43            channel: String,
44        },
45        BanCreate {
46            user: String,
47        },
48        BanDelete {
49            user: String,
50        },
51        ChannelCreate {
52            channel: String,
53            name: String,
54        },
55        ChannelEdit {
56            channel: String,
57            before: PartialChannel,
58            after: PartialChannel,
59        },
60        ChannelRolePermissionsEdit {
61            channel: String,
62            role: String,
63            permissions: Override,
64        },
65        ChannelDelete {
66            channel: String,
67            name: String,
68        },
69        MemberEdit {
70            user: String,
71            before: PartialMember,
72            after: PartialMember,
73        },
74        MemberKick {
75            user: String,
76        },
77        ServerEdit {
78            before: PartialServer,
79            after: PartialServer,
80        },
81        RoleEdit {
82            role: String,
83            before: PartialRole,
84            after: PartialRole,
85        },
86        RoleCreate {
87            role: String,
88            name: String,
89        },
90        RoleDelete {
91            role: String,
92            name: String,
93        },
94        RolesReorder {
95            before: Vec<String>,
96            after: Vec<String>,
97        },
98        InviteCreate {
99            invite: String,
100            channel: String,
101        },
102        InviteDelete {
103            invite: String,
104            channel: String,
105        },
106        WebhookCreate {
107            webhook: String,
108            name: String,
109            channel: String,
110        },
111        WebhookDelete {
112            webhook: String,
113            name: String,
114            channel: String,
115        },
116        EmojiCreate {
117            emoji: String,
118            name: String,
119        },
120        EmojiUpdate {
121            emoji: String,
122            before: PartialEmoji,
123            after: PartialEmoji,
124        },
125        EmojiDelete {
126            emoji: String,
127            name: String,
128        },
129    }
130
131    /// Audit log query filters
132    #[cfg_attr(feature = "validator", derive(validator::Validate))]
133    #[cfg_attr(feature = "rocket", derive(rocket::FromForm))]
134    pub struct OptionsAuditLogQuery {
135        /// Filter by who ran the action
136        #[cfg_attr(feature = "validator", validate(length(min = 26, max = 26)))]
137        pub user: Option<String>,
138        /// Filter by who the action is targetting
139        #[cfg_attr(feature = "validator", validate(length(min = 26, max = 26)))]
140        pub target: Option<String>,
141        /// Filter by the action type
142        pub r#type: Option<Vec<String>>,
143        /// Entries before a certain entry id
144        #[cfg_attr(feature = "validator", validate(length(min = 26, max = 26)))]
145        pub before: Option<String>,
146        /// Entries after a certain entry id
147        #[cfg_attr(feature = "validator", validate(length(min = 26, max = 26)))]
148        pub after: Option<String>,
149        /// Maximum number of entries to fetch
150        #[cfg_attr(feature = "validator", validate(range(min = 1, max = 100)))]
151        pub limit: Option<i64>,
152    }
153
154    /// Response containing the audit log entries and the users involved
155    pub struct AuditLogQueryResponse {
156        /// List of audit logs
157        pub audit_logs: Vec<AuditLogEntry>,
158        /// List of users
159        pub users: Vec<User>,
160        /// List of members
161        pub members: Vec<Member>,
162    }
163);