1use crate::v0::{Member, PartialChannel, PartialEmoji, PartialMember, PartialRole, PartialServer, User};
2use revolt_permissions::Override;
3
4auto_derived!(
5 pub struct AuditLogEntry {
7 #[serde(rename = "_id")]
9 pub id: String,
10
11 pub server: String,
13 pub reason: Option<String>,
15 pub user: String,
17 pub target: Option<String>,
19 pub action: AuditLogEntryAction,
21 }
22
23 #[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 #[cfg_attr(feature = "validator", derive(validator::Validate))]
133 #[cfg_attr(feature = "rocket", derive(rocket::FromForm))]
134 pub struct OptionsAuditLogQuery {
135 #[cfg_attr(feature = "validator", validate(length(min = 26, max = 26)))]
137 pub user: Option<String>,
138 #[cfg_attr(feature = "validator", validate(length(min = 26, max = 26)))]
140 pub target: Option<String>,
141 pub r#type: Option<Vec<String>>,
143 #[cfg_attr(feature = "validator", validate(length(min = 26, max = 26)))]
145 pub before: Option<String>,
146 #[cfg_attr(feature = "validator", validate(length(min = 26, max = 26)))]
148 pub after: Option<String>,
149 #[cfg_attr(feature = "validator", validate(range(min = 1, max = 100)))]
151 pub limit: Option<i64>,
152 }
153
154 pub struct AuditLogQueryResponse {
156 pub audit_logs: Vec<AuditLogEntry>,
158 pub users: Vec<User>,
160 pub members: Vec<Member>,
162 }
163);