diff --git a/discord/message.py b/discord/message.py index 9db351d54a80..198d00708665 100644 --- a/discord/message.py +++ b/discord/message.py @@ -3053,3 +3053,30 @@ async def remove_attachments(self, *attachments: Attachment) -> Message: The newly edited message. """ return await self.edit(attachments=[a for a in self.attachments if a not in attachments]) + + def is_forwardable(self) -> bool: + """:class:`bool`: Whether the message can be forwarded using :meth:`Message.forward`. + + A message is forwardable only if it is a basic message type and does not + contain a poll, call, or activity, and is not a system message. + + .. versionadded:: 2.7 + """ + if self.type not in ( + MessageType.default, + MessageType.reply, + MessageType.chat_input_command, + MessageType.context_menu_command, + ): + return False + + if getattr(self, 'poll', None) is not None: + return False + + if getattr(self, 'call', None) is not None: + return False + + if getattr(self, 'activity', None) is not None: + return False + + return True