Skip to content

Commit 711576a

Browse files
authored
Implement Interaction.to_dict (#1274)
1 parent 6228d50 commit 711576a

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

discord/interactions.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ class Interaction:
135135
"token",
136136
"version",
137137
"custom_id",
138+
"_message_data",
138139
"_permissions",
139140
"_state",
140141
"_session",
@@ -165,9 +166,13 @@ def _from_data(self, data: InteractionPayload):
165166

166167
self.message: Optional[Message]
167168
try:
168-
self.message = Message(state=self._state, channel=self.channel, data=data["message"]) # type: ignore
169+
message_data = data["message"]
169170
except KeyError:
170171
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
171176

172177
self.user: Optional[Union[User, Member]] = None
173178
self._permissions: int = 0
@@ -425,6 +430,42 @@ async def delete_original_message(self, *, delay: Optional[float] = None) -> Non
425430
else:
426431
await func
427432

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+
428469

429470
class InteractionResponse:
430471
"""Represents a Discord interaction response.

0 commit comments

Comments
 (0)