@@ -135,6 +135,7 @@ class Interaction:
135
135
"token" ,
136
136
"version" ,
137
137
"custom_id" ,
138
+ "_message_data" ,
138
139
"_permissions" ,
139
140
"_state" ,
140
141
"_session" ,
@@ -165,9 +166,13 @@ def _from_data(self, data: InteractionPayload):
165
166
166
167
self .message : Optional [Message ]
167
168
try :
168
- self . message = Message ( state = self . _state , channel = self . channel , data = data ["message" ]) # type: ignore
169
+ message_data = data ["message" ]
169
170
except KeyError :
170
171
self .message = None
172
+ self ._message_data = None
173
+ else :
174
+ self .message = Message (state = self ._state , channel = self .channel , data = message_data ) # type: ignore
175
+ self ._message_data = message_data
171
176
172
177
self .user : Optional [Union [User , Member ]] = None
173
178
self ._permissions : int = 0
@@ -425,6 +430,42 @@ async def delete_original_message(self, *, delay: Optional[float] = None) -> Non
425
430
else :
426
431
await func
427
432
433
+ def to_dict (self ) -> Dict [str , Any ]:
434
+ """Converts this interaction object into a dict."""
435
+
436
+ data = {
437
+ "id" : self .id ,
438
+ "application_id" : self .application_id ,
439
+ "type" : self .type .value ,
440
+ "token" : self .token ,
441
+ "version" : self .version ,
442
+ }
443
+
444
+ if self .data is not None :
445
+ data ["data" ] = self .data
446
+ if (resolved := self .data .get ("resolved" )) and self .user is not None :
447
+ if (users := resolved .get ("users" )) and (user := users .get (self .user .id )):
448
+ data ["user" ] = user
449
+ if (members := resolved .get ("members" )) and (member := members .get (self .user .id )):
450
+ data ["member" ] = member
451
+
452
+ if self .guild_id is not None :
453
+ data ["guild_id" ] = self .guild_id
454
+
455
+ if self .channel_id is not None :
456
+ data ["channel_id" ] = self .channel_id
457
+
458
+ if self .locale :
459
+ data ["locale" ] = self .locale
460
+
461
+ if self .guild_locale :
462
+ data ["guild_locale" ] = self .guild_locale
463
+
464
+ if self ._message_data :
465
+ data ["message" ] = self ._message_data
466
+
467
+ return data
468
+
428
469
429
470
class InteractionResponse :
430
471
"""Represents a Discord interaction response.
0 commit comments