40
40
from .role import Role
41
41
from .invite import Invite
42
42
from .file import File
43
- from .components import Button , DropdownMenue , ActionRow
43
+ from .components import Button , SelectionMenu , ActionRow
44
44
from .voice_client import VoiceClient , VoiceProtocol
45
45
from . import utils
46
46
@@ -936,7 +936,7 @@ async def _get_channel(self):
936
936
async def send (self , content = None , * , tts = False , embed = None , components = None , file = None ,
937
937
files = None , delete_after = None , nonce = None ,
938
938
allowed_mentions = None , reference = None ,
939
- mention_author = None ):
939
+ mention_author = None , hidden = None , ** kwargs ):
940
940
"""|coro|
941
941
942
942
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
997
997
998
998
.. versionadded:: 1.6
999
999
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
+
1000
1004
Raises
1001
1005
--------
1002
1006
~discord.HTTPException
@@ -1027,12 +1031,12 @@ async def send(self, content=None, *, tts=False, embed=None, components=None, fi
1027
1031
for component in ([components ] if not isinstance (components , list ) else components ):
1028
1032
if isinstance (component , Button ):
1029
1033
_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 ())
1032
1036
elif isinstance (component , ActionRow ):
1033
1037
_components .extend (component .sendable ())
1034
1038
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 ())
1036
1040
components = _components
1037
1041
1038
1042
if allowed_mentions is not None :
@@ -1056,14 +1060,34 @@ async def send(self, content=None, *, tts=False, embed=None, components=None, fi
1056
1060
if file is not None and files is not None :
1057
1061
raise InvalidArgument ('cannot pass both file and files parameter to send()' )
1058
1062
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
1059
1071
if file is not None :
1060
1072
if not isinstance (file , File ):
1061
1073
raise InvalidArgument ('file parameter must be File' )
1062
1074
1063
1075
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 )
1067
1091
finally :
1068
1092
file .close ()
1069
1093
@@ -1074,21 +1098,45 @@ async def send(self, content=None, *, tts=False, embed=None, components=None, fi
1074
1098
raise InvalidArgument ('files parameter must be a list of File' )
1075
1099
1076
1100
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 )
1080
1116
finally :
1081
1117
for f in files :
1082
1118
f .close ()
1083
1119
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
1092
1140
1093
1141
async def trigger_typing (self ):
1094
1142
"""|coro|
0 commit comments