Skip to content

Commit f621064

Browse files
authored
1.7.5 pre-release
Pre-release for Version 1.7.5 There are a few Changes
1 parent d4ed1dc commit f621064

23 files changed

+670
-252
lines changed

discord/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
from .role import Role, RoleTags
4242
from .file import File
4343
from .colour import Color, Colour
44-
from .integrations import Integration, IntegrationAccount
44+
from .integrations import Integration, IntegrationAccount, BotIntegration, IntegrationApplication, StreamIntegration
45+
from .interactions import Interaction, ButtonClick, SelectionSelect
4546
from .invite import Invite, PartialInviteChannel, PartialInviteGuild
4647
from .template import Template
4748
from .widget import Widget, WidgetMember, WidgetChannel
@@ -50,7 +51,7 @@
5051
from . import utils, opus, abc
5152
from .enums import *
5253
from .embeds import Embed
53-
from .components import Button, DropdownMenue, ActionRow, ButtonColor, ButtonStyle
54+
from .components import Button, SelectionMenu, ActionRow, ButtonColor, ButtonStyle, select_option
5455
from .mentions import AllowedMentions
5556
from .shard import AutoShardedClient, ShardInfo
5657
from .player import *

discord/abc.py

Lines changed: 67 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
from .role import Role
4141
from .invite import Invite
4242
from .file import File
43-
from .components import Button, DropdownMenue, ActionRow
43+
from .components import Button, SelectionMenu, ActionRow
4444
from .voice_client import VoiceClient, VoiceProtocol
4545
from . import utils
4646

@@ -936,7 +936,7 @@ async def _get_channel(self):
936936
async def send(self, content=None, *, tts=False, embed=None, components=None, file=None,
937937
files=None, delete_after=None, nonce=None,
938938
allowed_mentions=None, reference=None,
939-
mention_author=None):
939+
mention_author=None, hidden=None, **kwargs):
940940
"""|coro|
941941
942942
Sends a message to the destination with the content given.
@@ -997,6 +997,10 @@ async def send(self, content=None, *, tts=False, embed=None, components=None, fi
997997
998998
.. versionadded:: 1.6
999999
1000+
hidden: Optional[:class:`bool`]
1001+
If :bool:`True` the message will be only bee visible for the performer of the interaction.
1002+
If this isnt called within an :class:`RawInteractionCreateEvent` it will be ignored
1003+
10001004
Raises
10011005
--------
10021006
~discord.HTTPException
@@ -1027,12 +1031,12 @@ async def send(self, content=None, *, tts=False, embed=None, components=None, fi
10271031
for component in ([components] if not isinstance(components, list) else components):
10281032
if isinstance(component, Button):
10291033
_components.extend(ActionRow(component).sendable())
1030-
elif isinstance(component, DropdownMenue):
1031-
_components.append(component.to_dict())
1034+
elif isinstance(component, SelectionMenu):
1035+
_components.extend(ActionRow(component).sendable())
10321036
elif isinstance(component, ActionRow):
10331037
_components.extend(component.sendable())
10341038
elif isinstance(component, list):
1035-
_components.extend(ActionRow(*[obj for obj in component if isinstance(obj, Button)]).sendable())
1039+
_components.extend(ActionRow(*[obj for obj in component if any(isinstance(obj, Button) or isinstance(obj, SelectionMenu))]).sendable())
10361040
components = _components
10371041

10381042
if allowed_mentions is not None:
@@ -1056,14 +1060,34 @@ async def send(self, content=None, *, tts=False, embed=None, components=None, fi
10561060
if file is not None and files is not None:
10571061
raise InvalidArgument('cannot pass both file and files parameter to send()')
10581062

1063+
is_interaction_responce = kwargs.pop('__is_interaction_responce', None)
1064+
deferred = kwargs.pop('__deferred', False)
1065+
use_webhook = kwargs.pop('__use_webhook', False)
1066+
interaction_id = kwargs.pop('__interaction_id', None)
1067+
interaction_token = kwargs.pop('__interaction_token', None)
1068+
application_id = kwargs.pop('__application_id', None)
1069+
if is_interaction_responce == False or None:
1070+
hidden = None
10591071
if file is not None:
10601072
if not isinstance(file, File):
10611073
raise InvalidArgument('file parameter must be File')
10621074

10631075
try:
1064-
data = await state.http.send_files(channel.id, files=[file], allowed_mentions=allowed_mentions,
1065-
content=content, tts=tts, embed=embed, components=components,
1066-
nonce=nonce, message_reference=reference)
1076+
if hidden is not None:
1077+
data = await state.http.send_interaction_response(use_webhook=use_webhook,
1078+
interaction_id=interaction_id,
1079+
token=interaction_token,
1080+
application_id=application_id,
1081+
deferred=deferred,
1082+
files=[file], allowed_mentions=allowed_mentions,
1083+
content=content, tts=tts, embed=embed,
1084+
components=components,
1085+
nonce=nonce, message_reference=reference,
1086+
flags=64 if hidden else None)
1087+
else:
1088+
data = await state.http.send_files(channel.id, files=[file], allowed_mentions=allowed_mentions,
1089+
content=content, tts=tts, embed=embed, components=components,
1090+
nonce=nonce, message_reference=reference)
10671091
finally:
10681092
file.close()
10691093

@@ -1074,21 +1098,45 @@ async def send(self, content=None, *, tts=False, embed=None, components=None, fi
10741098
raise InvalidArgument('files parameter must be a list of File')
10751099

10761100
try:
1077-
data = await state.http.send_files(channel.id, files=files, content=content, tts=tts,
1078-
embed=embed, components=components, nonce=nonce,
1079-
allowed_mentions=allowed_mentions, message_reference=reference)
1101+
if hidden is not None:
1102+
data = await state.http.send_interaction_response(use_webhook=use_webhook,
1103+
interaction_id=interaction_id,
1104+
token=interaction_token,
1105+
application_id=application_id,
1106+
deferred=deferred,
1107+
files=file, allowed_mentions=allowed_mentions,
1108+
content=content, tts=tts, embed=embed,
1109+
components=components,
1110+
nonce=nonce, message_reference=reference,
1111+
flags=64 if hidden else None)
1112+
else:
1113+
data = await state.http.send_files(channel.id, files=files, content=content, tts=tts,
1114+
embed=embed, components=components, nonce=nonce,
1115+
allowed_mentions=allowed_mentions, message_reference=reference)
10801116
finally:
10811117
for f in files:
10821118
f.close()
10831119
else:
1084-
data = await state.http.send_message(channel.id, content, tts=tts, embed=embed, components=components,
1085-
nonce=nonce, allowed_mentions=allowed_mentions,
1086-
message_reference=reference)
1087-
1088-
ret = state.create_message(channel=channel, data=data)
1089-
if delete_after is not None:
1090-
await ret.delete(delay=delete_after)
1091-
return ret
1120+
if hidden is not None:
1121+
data = await state.http.send_interaction_response(use_webhook=use_webhook,
1122+
interaction_id=interaction_id,
1123+
token=interaction_token,
1124+
application_id=application_id,
1125+
deferred=deferred, allowed_mentions=allowed_mentions,
1126+
content=content, tts=tts, embed=embed,
1127+
components=components,
1128+
nonce=nonce, message_reference=reference,
1129+
flags=64 if hidden else None)
1130+
else:
1131+
data = await state.http.send_message(channel.id, content, tts=tts, embed=embed, components=components,
1132+
nonce=nonce, allowed_mentions=allowed_mentions,
1133+
message_reference=reference)
1134+
if not hidden is True:
1135+
ret = state.create_message(channel=channel, data=data)
1136+
if delete_after is not None and hidden is None:
1137+
await ret.delete(delay=delete_after)
1138+
return ret
1139+
return None
10921140

10931141
async def trigger_typing(self):
10941142
"""|coro|

discord/client.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -972,12 +972,18 @@ def check(reaction, user):
972972
"""
973973

974974
future = self.loop.create_future()
975-
if check is None:
975+
if event.lower().lstrip('raw_') in ('button_click', 'selection_select'):
976+
ck = check
976977
def _check(*args):
977-
return True
978+
return ck(*args) if check else True and args[0].component.component_type == {'button_click': 2, 'selection_select': 3}.get(event.lower().lstrip('raw_'))
978979
check = _check
979-
980-
ev = event.lower()
980+
ev = event.lower()
981+
else:
982+
if check is None:
983+
def _check(*args):
984+
return True
985+
check = _check
986+
ev = event.lower()
981987
try:
982988
listeners = self._listeners[ev]
983989
except KeyError:

0 commit comments

Comments
 (0)