Returns: MessageId

class aiogram.methods.copy_message.CopyMessage(*, chat_id: int | str, from_chat_id: int | str, message_id: int, message_thread_id: int | None = None, caption: str | None = None, parse_mode: str | ~aiogram.client.default.Default | None = <Default('parse_mode')>, caption_entities: ~typing.List[~aiogram.types.message_entity.MessageEntity] | None = None, disable_notification: bool | None = None, protect_content: bool | ~aiogram.client.default.Default | None = <Default('protect_content')>, reply_parameters: ~aiogram.types.reply_parameters.ReplyParameters | None = None, reply_markup: ~aiogram.types.inline_keyboard_markup.InlineKeyboardMarkup | ~aiogram.types.reply_keyboard_markup.ReplyKeyboardMarkup | ~aiogram.types.reply_keyboard_remove.ReplyKeyboardRemove | ~aiogram.types.force_reply.ForceReply | None = None, allow_sending_without_reply: bool | None = None, reply_to_message_id: int | None = None, **extra_data: ~typing.Any)[source]#

Use this method to copy messages of any kind. Service messages, giveaway messages, giveaway winners messages, and invoice messages can’t be copied. A quiz aiogram.methods.poll.Poll can be copied only if the value of the field correct_option_id is known to the bot. The method is analogous to the method aiogram.methods.forward_message.ForwardMessage, but the copied message doesn’t have a link to the original message. Returns the aiogram.types.message_id.MessageId of the sent message on success.


chat_id: int | str#

Unique identifier for the target chat or username of the target channel (in the format @channelusername)

from_chat_id: int | str#

Unique identifier for the chat where the original message was sent (or channel username in the format @channelusername)

message_id: int#

Message identifier in the chat specified in from_chat_id

message_thread_id: int | None#

Unique identifier for the target message thread (topic) of the forum; for forum supergroups only

caption: str | None#

New caption for media, 0-1024 characters after entities parsing. If not specified, the original caption is kept

parse_mode: str | Default | None#

Mode for parsing entities in the new caption. See formatting options for more details.

caption_entities: List[MessageEntity] | None#

A JSON-serialized list of special entities that appear in the new caption, which can be specified instead of parse_mode

model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}#

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_post_init(_ModelMetaclass__context: Any) None#

We need to both initialize private attributes and call the user-defined model_post_init method.

disable_notification: bool | None#

Sends the message silently. Users will receive a notification with no sound.

protect_content: bool | Default | None#

Protects the contents of the sent message from forwarding and saving

reply_parameters: ReplyParameters | None#

Description of the message to reply to

reply_markup: InlineKeyboardMarkup | ReplyKeyboardMarkup | ReplyKeyboardRemove | ForceReply | None#

Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user

allow_sending_without_reply: bool | None#

Pass True if the message should be sent even if the specified replied-to message is not found

reply_to_message_id: int | None#

If the message is a reply, ID of the original message


As bot method#

result: MessageId = await bot.copy_message(...)

Method as object#


  • from aiogram.methods.copy_message import CopyMessage

  • alias: from aiogram.methods import CopyMessage

With specific bot#

result: MessageId = await bot(CopyMessage(...))

As reply into Webhook in handler#

return CopyMessage(...)

As shortcut from received object#