Bound method *forward* of :obj:`Message <pyrogram.Message>`.

        Use as a shortcut for:

        .. code-block:: python

            client.forward_messages(
                chat_id=chat_id,
                from_chat_id=message.chat.id,
                message_ids=message.message_id
            )

        Example:
            .. code-block:: python

                message.forward(chat_id)

        Args:
            chat_id (``int`` | ``str``):
                Unique identifier (int) or username (str) of the target chat.
                For your personal cloud (Saved Messages) you can simply use "me" or "self".
                For a contact that exists in your Telegram address book you can use his phone number (str).

            disable_notification (``bool``, *optional*):
                Sends the message silently.
                Users will receive a notification with no sound.

            as_copy (``bool``, *optional*):
                Pass True to forward messages without the forward header (i.e.: send a copy of the message content).
                Defaults to False.

            remove_caption (``bool``, *optional*):
                If set to True and *as_copy* is enabled as well, media captions are not preserved when copying the
                message. Has no effect if *as_copy* is not enabled.
                Defaults to False.

        Returns:
            On success, the forwarded Message is returned.

        Raises:
            :class:`RPCError <pyrogram.RPCError>`

def forward(
        self,
        chat_id: int or str,
        disable_notification: bool = None,
        as_copy: bool = False,
        remove_caption: bool = False
    ) -> "Message":
        """Bound method *forward* of :obj:`Message <pyrogram.Message>`.

        Use as a shortcut for:

        .. code-block:: python

            client.forward_messages(
                chat_id=chat_id,
                from_chat_id=message.chat.id,
                message_ids=message.message_id
            )

        Example:
            .. code-block:: python

                message.forward(chat_id)

        Args:
            chat_id (``int`` | ``str``):
                Unique identifier (int) or username (str) of the target chat.
                For your personal cloud (Saved Messages) you can simply use "me" or "self".
                For a contact that exists in your Telegram address book you can use his phone number (str).

            disable_notification (``bool``, *optional*):
                Sends the message silently.
                Users will receive a notification with no sound.

            as_copy (``bool``, *optional*):
                Pass True to forward messages without the forward header (i.e.: send a copy of the message content).
                Defaults to False.

            remove_caption (``bool``, *optional*):
                If set to True and *as_copy* is enabled as well, media captions are not preserved when copying the
                message. Has no effect if *as_copy* is not enabled.
                Defaults to False.

        Returns:
            On success, the forwarded Message is returned.

        Raises:
            :class:`RPCError <pyrogram.RPCError>`
        """
        if as_copy:
            if self.service:
                raise ValueError("Unable to copy service messages")

            if self.game and not self._client.is_bot:
                raise ValueError("Users cannot send messages with Game media type")

            # TODO: Improve markdown parser. Currently html appears to be more stable, thus we use it here because users
            #       can"t choose.

            if self.text:
                return self._client.send_message(
                    chat_id,
                    text=self.text.html,
                    parse_mode="html",
                    disable_web_page_preview=not self.web_page,
                    disable_notification=disable_notification
                )
            elif self.media:
                caption = self.caption.html if self.caption and not remove_caption else None

                send_media = partial(
                    self._client.send_cached_media,
                    chat_id=chat_id,
                    disable_notification=disable_notification
                )

                if self.photo:
                    file_id = self.photo.sizes[-1].file_id
                elif self.audio:
                    file_id = self.audio.file_id
                elif self.document:
                    file_id = self.document.file_id
                elif self.video:
                    file_id = self.video.file_id
                elif self.animation:
                    file_id = self.animation.file_id
                elif self.voice:
                    file_id = self.voice.file_id
                elif self.sticker:
                    file_id = self.sticker.file_id
                elif self.video_note:
                    file_id = self.video_note.file_id
                elif self.contact:
                    return self._client.send_contact(
                        chat_id,
                        phone_number=self.contact.phone_number,
                        first_name=self.contact.first_name,
                        last_name=self.contact.last_name,
                        vcard=self.contact.vcard,
                        disable_notification=disable_notification
                    )
                elif self.location:
                    return self._client.send_location(
                        chat_id,
                        latitude=self.location.latitude,
                        longitude=self.location.longitude,
                        disable_notification=disable_notification
                    )
                elif self.venue:
                    return self._client.send_venue(
                        chat_id,
                        latitude=self.venue.location.latitude,
                        longitude=self.venue.location.longitude,
                        title=self.venue.title,
                        address=self.venue.address,
                        foursquare_id=self.venue.foursquare_id,
                        foursquare_type=self.venue.foursquare_type,
                        disable_notification=disable_notification
                    )
                elif self.poll:
                    return self._client.send_poll(
                        chat_id,
                        question=self.poll.question,
                        options=[opt.text for opt in self.poll.options],
                        disable_notification=disable_notification
                    )
                elif self.game:
                    return self._client.send_game(
                        chat_id,
                        game_short_name=self.game.short_name,
                        disable_notification=disable_notification
                    )
                else:
                    raise ValueError("Unknown media type")

                if self.sticker or self.video_note:  # Sticker and VideoNote should have no caption
                    return send_media(file_id=file_id)
                else:
                    return send_media(file_id=file_id, caption=caption, parse_mode=ParseMode.HTML)
            else:
                raise ValueError("Can't copy this message")
        else:
            return self._client.forward_messages(
                chat_id=chat_id,
                from_chat_id=self.chat.id,
                message_ids=self.message_id,
                disable_notification=disable_notification
            )