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
@@ -933,10 +933,10 @@ class Messageable(metaclass=abc.ABCMeta):
933
933
async def _get_channel (self ):
934
934
raise NotImplementedError
935
935
936
- async def send (self , content = None , * , tts = False , embed = None , components = None , file = None ,
936
+ async def send (self , content = None , * , tts = False , embed = None , embeds = 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 ), isinstance ( obj , SelectionMenu )] )]).sendable ())
1036
1040
components = _components
1037
1041
1038
1042
if allowed_mentions is not None :
@@ -1056,14 +1060,47 @@ 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
+ followup = kwargs .pop ('followup' , False )
1070
+ if is_interaction_responce is False or None :
1071
+ hidden = None
1072
+ if hidden is not None :
1073
+ embedlist = []
1074
+ if embed :
1075
+ embedlist .append (embed .to_dict ())
1076
+ if embeds :
1077
+ embedlist .extend ([e .to_dict () for e in embeds ])
1078
+ embeds = embedlist
1079
+ if len (embeds ) > 10 :
1080
+ raise InvalidArgument (f'The maximum number of embeds that can be sent with a response is 10, get: { len (embeds )} ' )
1081
+ elif embeds :
1082
+ raise InvalidArgument ('Normal Messages dont support multible Embeds.' )
1059
1083
if file is not None :
1060
1084
if not isinstance (file , File ):
1061
1085
raise InvalidArgument ('file parameter must be File' )
1062
1086
1063
1087
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 )
1088
+ if hidden is not None :
1089
+ data = await state .http .send_interaction_response (use_webhook = use_webhook ,
1090
+ interaction_id = interaction_id ,
1091
+ token = interaction_token ,
1092
+ application_id = application_id ,
1093
+ deferred = deferred ,
1094
+ files = [file ], allowed_mentions = allowed_mentions ,
1095
+ content = content , tts = tts , embeds = embeds ,
1096
+ components = components ,
1097
+ nonce = nonce , message_reference = reference ,
1098
+ flags = 64 if hidden else None ,
1099
+ followup = followup )
1100
+ else :
1101
+ data = await state .http .send_files (channel .id , files = [file ], allowed_mentions = allowed_mentions ,
1102
+ content = content , tts = tts , embed = embed , components = components ,
1103
+ nonce = nonce , message_reference = reference )
1067
1104
finally :
1068
1105
file .close ()
1069
1106
@@ -1074,21 +1111,48 @@ async def send(self, content=None, *, tts=False, embed=None, components=None, fi
1074
1111
raise InvalidArgument ('files parameter must be a list of File' )
1075
1112
1076
1113
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 )
1114
+ if hidden is not None :
1115
+ data = await state .http .send_interaction_response (use_webhook = use_webhook ,
1116
+ interaction_id = interaction_id ,
1117
+ token = interaction_token ,
1118
+ application_id = application_id ,
1119
+ deferred = deferred ,
1120
+ files = file , allowed_mentions = allowed_mentions ,
1121
+ content = content , tts = tts , embeds = embeds ,
1122
+ components = components ,
1123
+ nonce = nonce , message_reference = reference ,
1124
+ flags = 64 if hidden else None ,
1125
+ followup = followup )
1126
+ else :
1127
+ data = await state .http .send_files (channel .id , files = files , content = content , tts = tts ,
1128
+ embeds = embeds , components = components , nonce = nonce ,
1129
+ allowed_mentions = allowed_mentions , message_reference = reference )
1080
1130
finally :
1081
1131
for f in files :
1082
1132
f .close ()
1083
1133
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
1134
+ if hidden is not None :
1135
+ data = await state .http .send_interaction_response (use_webhook = use_webhook ,
1136
+ interaction_id = interaction_id ,
1137
+ token = interaction_token ,
1138
+ application_id = application_id ,
1139
+ deferred = deferred , allowed_mentions = allowed_mentions ,
1140
+ content = content , tts = tts , embeds = embeds ,
1141
+ components = components ,
1142
+ nonce = nonce , message_reference = reference ,
1143
+ flags = 64 if hidden else None ,
1144
+ followup = followup )
1145
+ else :
1146
+ data = await state .http .send_message (channel .id , content , tts = tts , embed = embed , components = components ,
1147
+ nonce = nonce , allowed_mentions = allowed_mentions ,
1148
+ message_reference = reference )
1149
+
1150
+ if not hidden is True and isinstance (data , dict ):
1151
+ ret = state .create_message (channel = channel , data = data )
1152
+ if delete_after is not None and hidden is None :
1153
+ await ret .delete (delay = delete_after )
1154
+ return ret
1155
+ return None
1092
1156
1093
1157
async def trigger_typing (self ):
1094
1158
"""|coro|
0 commit comments