Skip to content
This repository was archived by the owner on Mar 8, 2022. It is now read-only.

Commit 534c26c

Browse files
committed
fixed dm issue
1 parent bd5fa4a commit 534c26c

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

discord_ui/client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ async def _on_slash_response(self, msg):
169169
return
170170

171171
user = discord.Member(data=data["member"], guild=self._discord._connection._get_guild(int(data["guild_id"])), state=self._discord._connection) if data.get("member") is not None else discord.User(state=self._discord._connection, data=data["user"])
172+
if user.dm_channel is None:
173+
await user.create_dm()
172174

173175
interaction = Interaction(self._discord._connection, data, user)
174176
if self.auto_defer[0] is True:
@@ -1320,6 +1322,8 @@ async def _on_component_response(self, msg):
13201322
return
13211323

13221324
user = discord.Member(data=data["member"], guild=self._discord._connection._get_guild(int(data["guild_id"])), state=self._discord._connection) if data.get("member") is not None else discord.User(state=self._discord._connection, data=data["user"])
1325+
if user.dm_channel is None:
1326+
await user.create_dm()
13231327
msg = await getMessage(self._discord._connection, data=data, response=True)
13241328

13251329
interaction = Interaction(self._discord._connection, data, user, msg)

discord_ui/receive.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def channel(self) -> Union[discord.TextChannel, discord.DMChannel]:
6868
6969
:type: :class:`discord.TextChannel` | :class:`discord.DMChannel`
7070
"""
71-
return self._state.get_channel(self.channel_id)
71+
return self._state.get_channel(self.channel_id) or self._state.get_channel(self.author.id)
7272

7373
async def defer(self, hidden=False):
7474
"""
@@ -376,15 +376,17 @@ async def getMessage(state: ConnectionState, data, response = True):
376376
:class:`~Message` | :class:`~EphemeralMessage`
377377
The sent message
378378
"""
379-
channel = state.get_channel(int(data["channel_id"])) or state._get_private_channel_by_user(data["author"]["id"])
379+
msg_base = data.get("message", data)
380+
381+
channel = state.get_channel(int(data["channel_id"])) or state.get_channel(int(msg_base["author"]["id"]))
380382
if response:
381-
if data.get("message") is not None and data.get("message", data)["flags"] == 64:
383+
if data.get("message") is not None and msg_base["flags"] == 64:
382384
return EphemeralResponseMessage(state=state, channel=channel, data=data.get("message", data))
383-
return Message(state=state, channel=channel, data=data.get("message", data))
385+
return Message(state=state, channel=channel, data=msg_base)
384386

385-
if data.get("message") is not None and data["message"]["flags"] == 64:
386-
return EphemeralMessage(state=state, channel=channel, data=data.get("message", data))
387-
return Message(state=state, channel=channel, data=data.get("message", data))
387+
if data.get("message") is not None and msg_base["flags"] == 64:
388+
return EphemeralMessage(state=state, channel=channel, data=msg_base)
389+
return Message(state=state, channel=channel, data=msg_base)
388390

389391
class Message(discord.Message):
390392
"""A fixed :class:`discord.Message` optimized for components"""

discord_ui/slash/tools.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def resolve(data, _state):
5252
resolved["messages"] = {}
5353
for message_id in data["data"]["resolved"]["messages"]:
5454
message_data = data["data"]["resolved"]["messages"][message_id]
55-
resolved["messages"][message_id] = discord.Message(data=message_data, channel=_state._get_channel(data["channel_id"]), state=_state)
55+
resolved["messages"][message_id] = discord.Message(data=message_data, channel=_state.get_channel(data["channel_id"]), state=_state)
5656
elif x == "channels":
5757
resolved["channels"] = {}
5858
for channel_id in data["data"]["resolved"]["channels"]:
@@ -123,7 +123,7 @@ def cache_data(value, typ, data, _state):
123123
elif typ == OptionType.MEMBER:
124124
return _state._get_guild(int(data["guild_id"])).get_member(int(value))
125125
elif typ == OptionType.CHANNEL:
126-
return _state._get_channel(int(value))
126+
return _state.get_channel(int(value))
127127
elif typ == OptionType.ROLE:
128128
return _state._get_guild(int(data["guild_id"])).get_role(int(value))
129129
elif typ == AdditionalType.MESSAGE:

0 commit comments

Comments
 (0)