@@ -828,6 +828,14 @@ class MessageInteractionMetadata(Hashable):
828828 The ID of the message that containes the interactive components, if applicable.
829829 modal_interaction: Optional[:class:`.MessageInteractionMetadata`]
830830 The metadata of the modal submit interaction that triggered this interaction, if applicable.
831+ target_user: Optional[:class:`User`]
832+ The user the command was run on, only applicable to user context menus.
833+
834+ .. versionadded:: 2.5
835+ target_message_id: Optional[:class:`int`]
836+ The ID of the message the command was run on, only applicable to message context menus.
837+
838+ .. versionadded:: 2.5
831839 """
832840
833841 __slots__ : Tuple [str , ...] = (
@@ -837,6 +845,8 @@ class MessageInteractionMetadata(Hashable):
837845 'original_response_message_id' ,
838846 'interacted_message_id' ,
839847 'modal_interaction' ,
848+ 'target_user' ,
849+ 'target_message_id' ,
840850 '_integration_owners' ,
841851 '_state' ,
842852 '_guild' ,
@@ -848,31 +858,43 @@ def __init__(self, *, state: ConnectionState, guild: Optional[Guild], data: Mess
848858
849859 self .id : int = int (data ['id' ])
850860 self .type : InteractionType = try_enum (InteractionType , data ['type' ])
851- self .user = state .create_user (data ['user' ])
861+ self .user : User = state .create_user (data ['user' ])
852862 self ._integration_owners : Dict [int , int ] = {
853863 int (key ): int (value ) for key , value in data .get ('authorizing_integration_owners' , {}).items ()
854864 }
855865
856866 self .original_response_message_id : Optional [int ] = None
857867 try :
858- self .original_response_message_id = int (data ['original_response_message_id' ])
868+ self .original_response_message_id = int (data ['original_response_message_id' ]) # type: ignore # EAFP
859869 except KeyError :
860870 pass
861871
862872 self .interacted_message_id : Optional [int ] = None
863873 try :
864- self .interacted_message_id = int (data ['interacted_message_id' ])
874+ self .interacted_message_id = int (data ['interacted_message_id' ]) # type: ignore # EAFP
865875 except KeyError :
866876 pass
867877
868878 self .modal_interaction : Optional [MessageInteractionMetadata ] = None
869879 try :
870880 self .modal_interaction = MessageInteractionMetadata (
871- state = state , guild = guild , data = data ['triggering_interaction_metadata' ]
881+ state = state , guild = guild , data = data ['triggering_interaction_metadata' ] # type: ignore # EAFP
872882 )
873883 except KeyError :
874884 pass
875885
886+ self .target_user : Optional [User ] = None
887+ try :
888+ self .target_user = state .create_user (data ['target_user' ]) # type: ignore # EAFP
889+ except KeyError :
890+ pass
891+
892+ self .target_message_id : Optional [int ] = None
893+ try :
894+ self .target_message_id = int (data ['target_message_id' ]) # type: ignore # EAFP
895+ except KeyError :
896+ pass
897+
876898 def __repr__ (self ) -> str :
877899 return f'<MessageInteraction id={ self .id } type={ self .type !r} user={ self .user !r} >'
878900
@@ -899,6 +921,16 @@ def interacted_message(self) -> Optional[Message]:
899921 return self ._state ._get_message (self .interacted_message_id )
900922 return None
901923
924+ @property
925+ def target_message (self ) -> Optional [Message ]:
926+ """Optional[:class:`~discord.Message`]: The target message, if applicable and is found in cache.
927+
928+ .. versionadded:: 2.5
929+ """
930+ if self .target_message_id :
931+ return self ._state ._get_message (self .target_message_id )
932+ return None
933+
902934 def is_guild_integration (self ) -> bool :
903935 """:class:`bool`: Returns ``True`` if the interaction is a guild integration."""
904936 if self ._guild :
0 commit comments