29
29
30
30
from . import enums , utils
31
31
from .asset import Asset
32
+ from .automod import AutoModAction , AutoModTriggerMetadata
32
33
from .colour import Colour
33
34
from .invite import Invite
34
35
from .mixins import Hashable
57
58
from .threads import Thread
58
59
from .types .audit_log import AuditLogChange as AuditLogChangePayload
59
60
from .types .audit_log import AuditLogEntry as AuditLogEntryPayload
61
+ from .types .automod import AutoModAction as AutoModActionPayload
62
+ from .types .automod import AutoModTriggerMetadata as AutoModTriggerMetadataPayload
60
63
from .types .channel import PermissionOverwrite as PermissionOverwritePayload
61
64
from .types .role import Role as RolePayload
62
65
from .types .snowflake import Snowflake
@@ -83,6 +86,22 @@ def _transform_channel(
83
86
return entry .guild .get_channel (int (data )) or Object (id = data )
84
87
85
88
89
+ def _transform_channels (
90
+ entry : AuditLogEntry , data : list [Snowflake ] | None
91
+ ) -> list [abc .GuildChannel | Object ] | None :
92
+ if data is None :
93
+ return None
94
+ return [_transform_channel (entry , channel ) for channel in data ]
95
+
96
+
97
+ def _transform_roles (
98
+ entry : AuditLogEntry , data : list [Snowflake ] | None
99
+ ) -> list [Role | Object ] | None :
100
+ if data is None :
101
+ return None
102
+ return [entry .guild .get_role (int (r )) or Object (id = r ) for r in data ]
103
+
104
+
86
105
def _transform_member_id (
87
106
entry : AuditLogEntry , data : Snowflake | None
88
107
) -> Member | User | None :
@@ -172,6 +191,24 @@ def _transform_type(
172
191
return enums .try_enum (enums .ChannelType , data )
173
192
174
193
194
+ def _transform_actions (
195
+ entry : AuditLogEntry , data : list [AutoModActionPayload ] | None
196
+ ) -> AutoModAction | None :
197
+ if data is None :
198
+ return None
199
+ else :
200
+ return [AutoModAction .from_dict (d ) for d in data ]
201
+
202
+
203
+ def _transform_trigger_metadata (
204
+ entry : AuditLogEntry , data : list [AutoModActionPayload ] | None
205
+ ) -> AutoModAction | None :
206
+ if data is None :
207
+ return None
208
+ else :
209
+ return AutoModTriggerMetadata .from_dict (data )
210
+
211
+
175
212
class AuditLogDiff :
176
213
def __len__ (self ) -> int :
177
214
return len (self .__dict__ )
@@ -240,6 +277,12 @@ class AuditLogChanges:
240
277
),
241
278
"command_id" : ("command_id" , _transform_snowflake ),
242
279
"image_hash" : ("cover" , _transform_scheduled_event_cover ),
280
+ "trigger_type" : (None , _enum_transformer (enums .AutoModTriggerType )),
281
+ "event_type" : (None , _enum_transformer (enums .AutoModEventType )),
282
+ "actions" : (None , _transform_actions ),
283
+ "trigger_metadata" : (None , _transform_trigger_metadata ),
284
+ "exempt_roles" : (None , _transform_roles ),
285
+ "exempt_channels" : (None , _transform_channels ),
243
286
}
244
287
245
288
def __init__ (
@@ -255,13 +298,31 @@ def __init__(
255
298
for elem in sorted (data , key = lambda i : i ["key" ]):
256
299
attr = elem ["key" ]
257
300
258
- # special cases for role add/remove
301
+ # special cases for role/trigger_metadata add/remove
259
302
if attr == "$add" :
260
303
self ._handle_role (self .before , self .after , entry , elem ["new_value" ]) # type: ignore
261
304
continue
262
305
elif attr == "$remove" :
263
306
self ._handle_role (self .after , self .before , entry , elem ["new_value" ]) # type: ignore
264
307
continue
308
+ elif attr in [
309
+ "$add_keyword_filter" ,
310
+ "$add_regex_patterns" ,
311
+ "$add_allow_list" ,
312
+ ]:
313
+ self ._handle_trigger_metadata (
314
+ self .before , self .after , entry , elem ["new_value" ], attr
315
+ )
316
+ continue
317
+ elif attr in [
318
+ "$remove_keyword_filter" ,
319
+ "$remove_regex_patterns" ,
320
+ "$remove_allow_list" ,
321
+ ]:
322
+ self ._handle_trigger_metadata (
323
+ self .after , self .before , entry , elem ["new_value" ], attr
324
+ )
325
+ continue
265
326
266
327
try :
267
328
key , transformer = self .TRANSFORMERS [attr ]
@@ -355,6 +416,23 @@ def _handle_role(
355
416
356
417
setattr (second , "roles" , data )
357
418
419
+ def _handle_trigger_metadata (
420
+ self ,
421
+ first : AuditLogDiff ,
422
+ second : AuditLogDiff ,
423
+ entry : AuditLogEntry ,
424
+ elem : list [AutoModTriggerMetadataPayload ],
425
+ attr : str ,
426
+ ) -> None :
427
+ if not hasattr (first , "trigger_metadata" ):
428
+ setattr (first , "trigger_metadata" , None )
429
+
430
+ key = attr .split ("_" , 1 )[- 1 ]
431
+ data = {key : elem }
432
+ tm = AutoModTriggerMetadata .from_dict (data )
433
+
434
+ setattr (second , "trigger_metadata" , tm )
435
+
358
436
359
437
class _AuditLogProxyMemberPrune :
360
438
delete_member_days : int
0 commit comments