Message

class telegram.Message(message_id, date, chat, from_user=None, reply_to_message=None, edit_date=None, text=None, entities=None, caption_entities=None, audio=None, document=None, game=None, photo=None, sticker=None, video=None, voice=None, video_note=None, new_chat_members=None, caption=None, contact=None, location=None, venue=None, left_chat_member=None, new_chat_title=None, new_chat_photo=None, delete_chat_photo=None, group_chat_created=None, supergroup_chat_created=None, channel_chat_created=None, migrate_to_chat_id=None, migrate_from_chat_id=None, pinned_message=None, invoice=None, successful_payment=None, author_signature=None, media_group_id=None, connected_website=None, animation=None, passport_data=None, poll=None, reply_markup=None, dice=None, via_bot=None, proximity_alert_triggered=None, sender_chat=None, video_chat_started=None, video_chat_ended=None, video_chat_participants_invited=None, message_auto_delete_timer_changed=None, video_chat_scheduled=None, is_automatic_forward=None, has_protected_content=None, web_app_data=None, is_topic_message=None, message_thread_id=None, forum_topic_created=None, forum_topic_closed=None, forum_topic_reopened=None, forum_topic_edited=None, general_forum_topic_hidden=None, general_forum_topic_unhidden=None, write_access_allowed=None, has_media_spoiler=None, chat_shared=None, story=None, giveaway=None, giveaway_completed=None, giveaway_created=None, giveaway_winners=None, users_shared=None, link_preview_options=None, external_reply=None, quote=None, forward_origin=None, reply_to_story=None, boost_added=None, sender_boost_count=None, *, api_kwargs=None)[source]

Bases: telegram.MaybeInaccessibleMessage

This object represents a message.

Objects of this class are comparable in terms of equality. Two objects of this class are considered equal, if their message_id and chat are equal.

Note

In Python from is a reserved word. Use from_user instead.

Changed in version 21.0: Removed deprecated arguments and attributes user_shared, forward_from, forward_from_chat, forward_from_message_id, forward_signature, forward_sender_name and forward_date.

Changed in version 20.8: * This class is now a subclass of telegram.MaybeInaccessibleMessage. * The pinned_message now can be either class:telegram.Message or class:telegram.InaccessibleMessage.

Changed in version 20.0:

Parameters:
message_id[source]

Unique message identifier inside this chat.

Type:

int

from_user[source]

Optional. Sender of the message; empty for messages sent to channels. For backward compatibility, this will contain a fake sender user in non-channel chats, if the message was sent on behalf of a chat.

Type:

telegram.User

sender_chat[source]

Optional. Sender of the message, sent on behalf of a chat. For example, the channel itself for channel posts, the supergroup itself for messages from anonymous group administrators, the linked channel for messages automatically forwarded to the discussion group. For backward compatibility, from_user contains a fake sender user in non-channel chats, if the message was sent on behalf of a chat.

Type:

telegram.Chat

date[source]

Date the message was sent in Unix time. Converted to datetime.datetime.

Changed in version 20.3: The default timezone of the bot is used for localization, which is UTC unless telegram.ext.Defaults.tzinfo is used.

Type:

datetime.datetime

chat[source]

Conversation the message belongs to.

Type:

telegram.Chat

is_automatic_forward[source]

Optional. True, if the message is a channel post that was automatically forwarded to the connected discussion group.

New in version 13.9.

Type:

bool

reply_to_message[source]

Optional. For replies, the original message. Note that the Message object in this field will not contain further reply_to_message fields even if it itself is a reply.

Type:

telegram.Message

edit_date[source]

Optional. Date the message was last edited in Unix time. Converted to datetime.datetime.

Changed in version 20.3: The default timezone of the bot is used for localization, which is UTC unless telegram.ext.Defaults.tzinfo is used.

Type:

datetime.datetime

has_protected_content[source]

Optional. True, if the message can’t be forwarded.

New in version 13.9.

Type:

bool

media_group_id[source]

Optional. The unique identifier of a media message group this message belongs to.

Type:

str

text[source]

Optional. For text messages, the actual UTF-8 text of the message, 0-4096 characters.

Type:

str

entities[source]

Optional. For text messages, special entities like usernames, URLs, bot commands, etc. that appear in the text. See parse_entity and parse_entities methods for how to use properly. This list is empty if the message does not contain entities.

Changed in version 20.0: This attribute is now an immutable tuple.

Type:

Tuple[telegram.MessageEntity]

Optional. Options used for link preview generation for the message, if it is a text message and link preview options were changed.

New in version 20.8.

Type:

telegram.LinkPreviewOptions

caption_entities[source]

Optional. For messages with a Caption. Special entities like usernames, URLs, bot commands, etc. that appear in the caption. See Message.parse_caption_entity and parse_caption_entities methods for how to use properly. This list is empty if the message does not contain caption entities.

Changed in version 20.0: This attribute is now an immutable tuple.

Type:

Tuple[telegram.MessageEntity]

audio[source]

Optional. Message is an audio file, information about the file.

Type:

telegram.Audio

document[source]

Optional. Message is a general file, information about the file.

Type:

telegram.Document

animation[source]

Optional. Message is an animation, information about the animation. For backward compatibility, when this field is set, the document field will also be set.

Type:

telegram.Animation

game[source]

Optional. Message is a game, information about the game.

Type:

telegram.Game

photo[source]

Optional. Message is a photo, available sizes of the photo. This list is empty if the message does not contain a photo.

Changed in version 20.0: This attribute is now an immutable tuple.

Type:

Tuple[telegram.PhotoSize]

sticker[source]

Optional. Message is a sticker, information about the sticker.

Type:

telegram.Sticker

story[source]

Optional. Message is a forwarded story.

New in version 20.5.

Type:

telegram.Story

video[source]

Optional. Message is a video, information about the video.

Type:

telegram.Video

voice[source]

Optional. Message is a voice message, information about the file.

Type:

telegram.Voice

video_note[source]

Optional. Message is a video note, information about the video message.

Type:

telegram.VideoNote

new_chat_members[source]

Optional. New members that were added to the group or supergroup and information about them (the bot itself may be one of these members). This list is empty if the message does not contain new chat members.

Changed in version 20.0: This attribute is now an immutable tuple.

Type:

Tuple[telegram.User]

caption[source]

Optional. Caption for the animation, audio, document, photo, video or voice, 0-1024 characters.

Type:

str

contact[source]

Optional. Message is a shared contact, information about the contact.

Type:

telegram.Contact

location[source]

Optional. Message is a shared location, information about the location.

Type:

telegram.Location

venue[source]

Optional. Message is a venue, information about the venue. For backward compatibility, when this field is set, the location field will also be set.

Type:

telegram.Venue

left_chat_member[source]

Optional. A member was removed from the group, information about them (this member may be the bot itself).

Type:

telegram.User

new_chat_title[source]

Optional. A chat title was changed to this value.

Type:

str

new_chat_photo[source]

A chat photo was changed to this value. This list is empty if the message does not contain a new chat photo.

Changed in version 20.0: This attribute is now an immutable tuple.

Type:

Tuple[telegram.PhotoSize]

delete_chat_photo[source]

Optional. Service message: The chat photo was deleted.

Type:

bool

group_chat_created[source]

Optional. Service message: The group has been created.

Type:

bool

supergroup_chat_created[source]

Optional. Service message: The supergroup has been created. This field can’t be received in a message coming through updates, because bot can’t be a member of a supergroup when it is created. It can only be found in reply_to_message if someone replies to a very first message in a directly created supergroup.

Type:

bool

channel_chat_created[source]

Optional. Service message: The channel has been created. This field can’t be received in a message coming through updates, because bot can’t be a member of a channel when it is created. It can only be found in reply_to_message if someone replies to a very first message in a channel.

Type:

bool

message_auto_delete_timer_changed[source]

Optional. Service message: auto-delete timer settings changed in the chat.

New in version 13.4.

Type:

telegram.MessageAutoDeleteTimerChanged

migrate_to_chat_id[source]

Optional. The group has been migrated to a supergroup with the specified identifier.

Type:

int

migrate_from_chat_id[source]

Optional. The supergroup has been migrated from a group with the specified identifier.

Type:

int

pinned_message[source]

Optional. Specified message was pinned. Note that the Message object in this field will not contain further reply_to_message fields even if it is itself a reply.

Changed in version 20.8: This attribute now is either class:telegram.Message or class:telegram.InaccessibleMessage.

Type:

telegram.MaybeInaccessibleMessage

invoice[source]

Optional. Message is an invoice for a payment, information about the invoice.

Type:

telegram.Invoice

successful_payment[source]

Optional. Message is a service message about a successful payment, information about the payment.

Type:

telegram.SuccessfulPayment

connected_website[source]

Optional. The domain name of the website on which the user has logged in.

Type:

str

author_signature[source]

Optional. Signature of the post author for messages in channels, or the custom title of an anonymous group administrator.

Type:

str

passport_data[source]

Optional. Telegram Passport data.

Examples

Passport Bot

Type:

telegram.PassportData

poll[source]

Optional. Message is a native poll, information about the poll.

Type:

telegram.Poll

dice[source]

Optional. Message is a dice with random value.

Type:

telegram.Dice

via_bot[source]

Optional. Bot through which message was sent.

Type:

telegram.User

proximity_alert_triggered[source]

Optional. Service message. A user in the chat triggered another user’s proximity alert while sharing Live Location.

Type:

telegram.ProximityAlertTriggered

video_chat_scheduled[source]

Optional. Service message: video chat scheduled.

New in version 20.0.

Type:

telegram.VideoChatScheduled

video_chat_started[source]

Optional. Service message: video chat started.

New in version 20.0.

Type:

telegram.VideoChatStarted

video_chat_ended[source]

Optional. Service message: video chat ended.

New in version 20.0.

Type:

telegram.VideoChatEnded

video_chat_participants_invited[source]

Optional. Service message: new participants invited to a video chat.

New in version 20.0.

Type:

telegram.VideoChatParticipantsInvited

web_app_data[source]

Optional. Service message: data sent by a Web App.

New in version 20.0.

Type:

telegram.WebAppData

reply_markup[source]

Optional. Inline keyboard attached to the message. login_url buttons are represented as ordinary url buttons.

Type:

telegram.InlineKeyboardMarkup

is_topic_message[source]

Optional. True, if the message is sent to a forum topic.

New in version 20.0.

Type:

bool

message_thread_id[source]

Optional. Unique identifier of a message thread to which the message belongs; for supergroups only.

New in version 20.0.

Type:

int

forum_topic_created[source]

Optional. Service message: forum topic created.

New in version 20.0.

Type:

telegram.ForumTopicCreated

forum_topic_closed[source]

Optional. Service message: forum topic closed.

New in version 20.0.

Type:

telegram.ForumTopicClosed

forum_topic_reopened[source]

Optional. Service message: forum topic reopened.

New in version 20.0.

Type:

telegram.ForumTopicReopened

forum_topic_edited[source]

Optional. Service message: forum topic edited.

New in version 20.0.

Type:

telegram.ForumTopicEdited

general_forum_topic_hidden[source]

Optional. Service message: General forum topic hidden.

New in version 20.0.

Type:

telegram.GeneralForumTopicHidden

general_forum_topic_unhidden[source]

Optional. Service message: General forum topic unhidden.

New in version 20.0.

Type:

telegram.GeneralForumTopicUnhidden

write_access_allowed[source]

Optional. Service message: the user allowed the bot added to the attachment menu to write messages.

New in version 20.0.

Type:

telegram.WriteAccessAllowed

has_media_spoiler[source]

Optional. True, if the message media is covered by a spoiler animation.

New in version 20.0.

Type:

bool

users_shared[source]

Optional. Service message: users were shared with the bot

New in version 20.8.

Type:

telegram.UsersShared

chat_shared[source]

Optional. Service message: a chat was shared with the bot.

New in version 20.1.

Type:

telegram.ChatShared

giveaway_created[source]

Optional. Service message: a scheduled giveaway was created

New in version 20.8.

Type:

telegram.GiveawayCreated

giveaway[source]

Optional. The message is a scheduled giveaway message

New in version 20.8.

Type:

telegram.Giveaway

giveaway_winners[source]

Optional. A giveaway with public winners was completed

New in version 20.8.

Type:

telegram.GiveawayWinners

giveaway_completed[source]

Optional. Service message: a giveaway without public winners was completed

New in version 20.8.

Type:

telegram.GiveawayCompleted

external_reply[source]

Optional. Information about the message that is being replied to, which may come from another chat or forum topic.

New in version 20.8.

Type:

telegram.ExternalReplyInfo

quote[source]

Optional. For replies that quote part of the original message, the quoted part of the message.

New in version 20.8.

Type:

telegram.TextQuote

forward_origin[source]

Optional. Information about the original message for forwarded messages

New in version 20.8.

Type:

telegram.MessageOrigin

reply_to_story[source]

Optional. For replies to a story, the original story.

New in version 21.0.

Type:

telegram.Story

boost_added[source]

Optional. Service message: user boosted the chat.

New in version 21.0.

Type:

telegram.ChatBoostAdded

sender_boost_count[source]

Optional. If the sender of the message boosted the chat, the number of boosts added by the user.

New in version 21.0.

Type:

int

build_reply_arguments(quote=None, quote_index=None, target_chat_id=None, allow_sending_without_reply=None, message_thread_id=None)[source]

Builds a dictionary with the keys chat_id and reply_parameters. This dictionary can be used to reply to a message with the given quote and target chat.

Examples

Usage with telegram.Bot.send_message():

await bot.send_message(
    text="This is a reply",
    **message.build_reply_arguments(quote="Quoted Text")
)

Usage with reply_text(), replying in the same chat:

await message.reply_text(
    "This is a reply",
    do_quote=message.build_reply_arguments(quote="Quoted Text")
)

Usage with reply_text(), replying in a different chat:

await message.reply_text(
    "This is a reply",
    do_quote=message.build_reply_arguments(
        quote="Quoted Text",
        target_chat_id=-100123456789
    )
)

New in version 20.8.

Parameters:
Return type:

dict

property caption_html[source]

Creates an HTML-formatted string from the markup entities found in the message’s caption.

Use this if you want to retrieve the message caption with the caption entities formatted as HTML in the same way the original message was formatted.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients.

Changed in version 13.10: Spoiler entities are now formatted as HTML.

Changed in version 20.3: Custom emoji entities are now supported.

Changed in version 20.8: Blockquote entities are now supported.

Returns:

Message caption with caption entities formatted as HTML.

Return type:

str

property caption_html_urled[source]

Creates an HTML-formatted string from the markup entities found in the message’s caption.

Use this if you want to retrieve the message caption with the caption entities formatted as HTML. This also formats telegram.MessageEntity.URL as a hyperlink.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients.

Changed in version 13.10: Spoiler entities are now formatted as HTML.

Changed in version 20.3: Custom emoji entities are now supported.

Changed in version 20.8: Blockquote entities are now supported.

Returns:

Message caption with caption entities formatted as HTML.

Return type:

str

property caption_markdown[source]

Creates an Markdown-formatted string from the markup entities found in the message’s caption using telegram.constants.ParseMode.MARKDOWN.

Use this if you want to retrieve the message caption with the caption entities formatted as Markdown in the same way the original message was formatted.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients. Moreover, markdown formatting is inherently less expressive than HTML, so some edge cases may not be coverable at all. For example, markdown formatting can not specify two consecutive block quotes without a blank line in between, but HTML can.

Note

'Markdown' is a legacy mode, retained by Telegram for backward compatibility. You should use caption_markdown_v2()

Changed in version 20.5: Since custom emoji entities are not supported by MARKDOWN, this method now raises a ValueError when encountering a custom emoji.

Changed in version 20.8: Since block quotation entities are not supported by MARKDOWN, this method now raises a ValueError when encountering a block quotation.

Returns:

Message caption with caption entities formatted as Markdown.

Return type:

str

Raises:

ValueError – If the message contains underline, strikethrough, spoiler, blockquote or nested entities.

property caption_markdown_urled[source]

Creates an Markdown-formatted string from the markup entities found in the message’s caption using telegram.constants.ParseMode.MARKDOWN.

Use this if you want to retrieve the message caption with the caption entities formatted as Markdown. This also formats telegram.MessageEntity.URL as a hyperlink.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients. Moreover, markdown formatting is inherently less expressive than HTML, so some edge cases may not be coverable at all. For example, markdown formatting can not specify two consecutive block quotes without a blank line in between, but HTML can.

Note

'Markdown' is a legacy mode, retained by Telegram for backward compatibility. You should use caption_markdown_v2_urled() instead.

Changed in version 20.5: Since custom emoji entities are not supported by MARKDOWN, this method now raises a ValueError when encountering a custom emoji.

Changed in version 20.8: Since block quotation entities are not supported by MARKDOWN, this method now raises a ValueError when encountering a block quotation.

Returns:

Message caption with caption entities formatted as Markdown.

Return type:

str

Raises:

ValueError – If the message contains underline, strikethrough, spoiler, blockquote or nested entities.

property caption_markdown_v2[source]

Creates an Markdown-formatted string from the markup entities found in the message’s caption using telegram.constants.ParseMode.MARKDOWN_V2.

Use this if you want to retrieve the message caption with the caption entities formatted as Markdown in the same way the original message was formatted.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients. Moreover, markdown formatting is inherently less expressive than HTML, so some edge cases may not be coverable at all. For example, markdown formatting can not specify two consecutive block quotes without a blank line in between, but HTML can.

Changed in version 13.10: Spoiler entities are now formatted as Markdown V2.

Changed in version 20.3: Custom emoji entities are now supported.

Changed in version 20.8: Blockquote entities are now supported.

Returns:

Message caption with caption entities formatted as Markdown.

Return type:

str

property caption_markdown_v2_urled[source]

Creates an Markdown-formatted string from the markup entities found in the message’s caption using telegram.constants.ParseMode.MARKDOWN_V2.

Use this if you want to retrieve the message caption with the caption entities formatted as Markdown. This also formats telegram.MessageEntity.URL as a hyperlink.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients. Moreover, markdown formatting is inherently less expressive than HTML, so some edge cases may not be coverable at all. For example, markdown formatting can not specify two consecutive block quotes without a blank line in between, but HTML can.

Changed in version 13.10: Spoiler entities are now formatted as Markdown V2.

Changed in version 20.3: Custom emoji entities are now supported.

Changed in version 20.8: Blockquote entities are now supported.

Returns:

Message caption with caption entities formatted as Markdown.

Return type:

str

property chat_id[source]

Shortcut for telegram.Chat.id for chat.

Type:

int

async close_forum_topic(*, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.close_forum_topic(
   chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
   **kwargs
)

For the documentation of the arguments, please see telegram.Bot.close_forum_topic().

New in version 20.0.

Returns:

On success, True is returned.

Return type:

bool

compute_quote_position_and_entities(quote, index=None)[source]

Use this function to compute position and entities of a quote in the message text or caption. Useful for filling the parameters quote_position and quote_entities of telegram.ReplyParameters when replying to a message.

Example

Given a message with the text "Hello, world! Hello, world!", the following code will return the position and entities of the second occurrence of "Hello, world!".

message.compute_quote_position_and_entities("Hello, world!", 1)

New in version 20.8.

Parameters:
  • quote (str) – Part of the message which is to be quoted. This is expected to have plain text without formatting entities.

  • index (int, optional) – 0-based index of the occurrence of the quote in the message. If not specified, the first occurrence is used.

Returns:

On success, a tuple containing information about quote position and entities is returned.

Return type:

Tuple[int, None | Tuple[MessageEntity, …]]

Raises:
async copy(chat_id, caption=None, parse_mode=None, caption_entities=None, disable_notification=None, reply_markup=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.copy_message(
    chat_id=chat_id,
    from_chat_id=update.effective_message.chat_id,
    message_id=update.effective_message.message_id,
    *args,
    **kwargs
)

For the documentation of the arguments, please see telegram.Bot.copy_message().

Returns:

On success, returns the MessageId of the sent message.

Return type:

telegram.MessageId

classmethod de_json(data, bot)[source]

See telegram.TelegramObject.de_json().

async delete(*, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.delete_message(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.delete_message().

Returns:

On success, True is returned.

Return type:

bool

async delete_forum_topic(*, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.delete_forum_topic(
   chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
   **kwargs
)

For the documentation of the arguments, please see telegram.Bot.delete_forum_topic().

New in version 20.0.

Returns:

On success, True is returned.

Return type:

bool

async edit_caption(caption=None, reply_markup=None, parse_mode=None, caption_entities=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.edit_message_caption(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.edit_message_caption().

Note

You can only edit messages that the bot sent itself (i.e. of the bot.send_* family of methods) or channel posts, if the bot is an admin in that channel. However, this behaviour is undocumented and might be changed by Telegram.

Returns:

On success, if edited message is sent by the bot, the edited Message is returned, otherwise True is returned.

Return type:

telegram.Message

async edit_forum_topic(name=None, icon_custom_emoji_id=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.edit_forum_topic(
   chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
   **kwargs
)

For the documentation of the arguments, please see telegram.Bot.edit_forum_topic().

New in version 20.0.

Returns:

On success, True is returned.

Return type:

bool

async edit_live_location(latitude=None, longitude=None, reply_markup=None, horizontal_accuracy=None, heading=None, proximity_alert_radius=None, *, location=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.edit_message_live_location(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.edit_message_live_location().

Note

You can only edit messages that the bot sent itself (i.e. of the bot.send_* family of methods) or channel posts, if the bot is an admin in that channel. However, this behaviour is undocumented and might be changed by Telegram.

Returns:

On success, if edited message is sent by the bot, the edited Message is returned, otherwise True is returned.

Return type:

telegram.Message

async edit_media(media, reply_markup=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.edit_message_media(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.edit_message_media().

Note

You can only edit messages that the bot sent itself(i.e. of the bot.send_* family of methods) or channel posts, if the bot is an admin in that channel. However, this behaviour is undocumented and might be changed by Telegram.

Returns:

On success, if edited message is not an inline message, the edited Message is returned, otherwise True is returned.

Return type:

telegram.Message

async edit_reply_markup(reply_markup=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.edit_message_reply_markup(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.edit_message_reply_markup().

Note

You can only edit messages that the bot sent itself (i.e. of the bot.send_* family of methods) or channel posts, if the bot is an admin in that channel. However, this behaviour is undocumented and might be changed by Telegram.

Returns:

On success, if edited message is sent by the bot, the edited Message is returned, otherwise True is returned.

Return type:

telegram.Message

async edit_text(text, parse_mode=None, reply_markup=None, entities=None, link_preview_options=None, *, disable_web_page_preview=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.edit_message_text(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.edit_message_text().

Note

You can only edit messages that the bot sent itself (i.e. of the bot.send_* family of methods) or channel posts, if the bot is an admin in that channel. However, this behaviour is undocumented and might be changed by Telegram.

Returns:

On success, if edited message is sent by the bot, the edited Message is returned, otherwise True is returned.

Return type:

telegram.Message

property effective_attachment[source]

If this message is neither a plain text message nor a status update, this gives the attachment that this message was sent with. This may be one of

Otherwise None is returned.

Changed in version 20.0: dice, passport_data and poll are now also considered to be an attachment.

async forward(chat_id, disable_notification=None, protect_content=None, message_thread_id=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.forward_message(
    from_chat_id=update.effective_message.chat_id,
    message_id=update.effective_message.message_id,
    *args,
    **kwargs
)

For the documentation of the arguments, please see telegram.Bot.forward_message().

Note

Since the release of Bot API 5.5 it can be impossible to forward messages from some chats. Use the attributes telegram.Message.has_protected_content and telegram.Chat.has_protected_content to check this.

As a workaround, it is still possible to use copy(). However, this behaviour is undocumented and might be changed by Telegram.

Returns:

On success, instance representing the message forwarded.

Return type:

telegram.Message

async get_game_high_scores(user_id, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.get_game_high_scores(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.get_game_high_scores().

Note

You can only edit messages that the bot sent itself (i.e. of the bot.send_* family of methods) or channel posts, if the bot is an admin in that channel. However, this behaviour is undocumented and might be changed by Telegram.

Returns:

Tuple[telegram.GameHighScore]

property id[source]

Shortcut for message_id.

New in version 20.0.

Type:

int

Convenience property. If the chat of the message is not a private chat or normal group, returns a t.me link of the message.

Changed in version 20.3: For messages that are replies or part of a forum topic, the link now points to the corresponding thread view.

Type:

str

parse_caption_entities(types=None)[source]

Returns a dict that maps telegram.MessageEntity to str. It contains entities from this message’s caption filtered by their telegram.MessageEntity.type attribute as the key, and the text that each entity belongs to as the value of the dict.

Note

This method should always be used instead of the caption_entities attribute, since it calculates the correct substring from the message text based on UTF-16 codepoints. See parse_entity for more info.

Parameters:

types (List[str], optional) – List of telegram.MessageEntity types as strings. If the type attribute of an entity is contained in this list, it will be returned. Defaults to a list of all types. All types can be found as constants in telegram.MessageEntity.

Returns:

A dictionary of entities mapped to the text that belongs to them, calculated based on UTF-16 codepoints.

Return type:

Dict[telegram.MessageEntity, str]

parse_caption_entity(entity)[source]

Returns the text from a given telegram.MessageEntity.

Note

This method is present because Telegram calculates the offset and length in UTF-16 codepoint pairs, which some versions of Python don’t handle automatically. (That is, you can’t just slice Message.caption with the offset and length.)

Parameters:

entity (telegram.MessageEntity) – The entity to extract the text from. It must be an entity that belongs to this message.

Returns:

The text of the given entity.

Return type:

str

Raises:

RuntimeError – If the message has no caption.

parse_entities(types=None)[source]

Returns a dict that maps telegram.MessageEntity to str. It contains entities from this message filtered by their telegram.MessageEntity.type attribute as the key, and the text that each entity belongs to as the value of the dict.

Note

This method should always be used instead of the entities attribute, since it calculates the correct substring from the message text based on UTF-16 codepoints. See parse_entity for more info.

Parameters:

types (List[str], optional) – List of telegram.MessageEntity types as strings. If the type attribute of an entity is contained in this list, it will be returned. Defaults to a list of all types. All types can be found as constants in telegram.MessageEntity.

Returns:

A dictionary of entities mapped to the text that belongs to them, calculated based on UTF-16 codepoints.

Return type:

Dict[telegram.MessageEntity, str]

parse_entity(entity)[source]

Returns the text from a given telegram.MessageEntity.

Note

This method is present because Telegram calculates the offset and length in UTF-16 codepoint pairs, which some versions of Python don’t handle automatically. (That is, you can’t just slice Message.text with the offset and length.)

Parameters:

entity (telegram.MessageEntity) – The entity to extract the text from. It must be an entity that belongs to this message.

Returns:

The text of the given entity.

Return type:

str

Raises:

RuntimeError – If the message has no text.

async pin(disable_notification=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.pin_chat_message(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.pin_chat_message().

Returns:

On success, True is returned.

Return type:

bool

async reopen_forum_topic(*, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.reopen_forum_topic(
    chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
    **kwargs
 )

For the documentation of the arguments, please see telegram.Bot.reopen_forum_topic().

New in version 20.0.

Returns:

On success, True is returned.

Return type:

bool

async reply_animation(animation, duration=None, width=None, height=None, caption=None, parse_mode=None, disable_notification=None, reply_markup=None, caption_entities=None, protect_content=None, message_thread_id=None, has_spoiler=None, thumbnail=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, filename=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_animation(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_animation().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_audio(audio, duration=None, performer=None, title=None, caption=None, disable_notification=None, reply_markup=None, parse_mode=None, caption_entities=None, protect_content=None, message_thread_id=None, thumbnail=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, filename=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_audio(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_audio().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_chat_action(action, message_thread_id=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_chat_action(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_chat_action().

New in version 13.2.

Returns:

On success, True is returned.

Return type:

bool

async reply_contact(phone_number=None, first_name=None, last_name=None, disable_notification=None, reply_markup=None, vcard=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, contact=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_contact(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_contact().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_copy(from_chat_id, message_id, caption=None, parse_mode=None, caption_entities=None, disable_notification=None, reply_markup=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.copy_message(
    chat_id=message.chat.id,
    message_id=message_id,
    *args,
    **kwargs
)

For the documentation of the arguments, please see telegram.Bot.copy_message().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    New in version 13.1.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, returns the MessageId of the sent message.

Return type:

telegram.MessageId

async reply_dice(disable_notification=None, reply_markup=None, emoji=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_dice(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_dice().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_document(document, caption=None, disable_notification=None, reply_markup=None, parse_mode=None, disable_content_type_detection=None, caption_entities=None, protect_content=None, message_thread_id=None, thumbnail=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, filename=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_document(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_document().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_game(game_short_name, disable_notification=None, reply_markup=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_game(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_game().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

New in version 13.2.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_html(text, disable_notification=None, reply_markup=None, entities=None, protect_content=None, message_thread_id=None, link_preview_options=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, disable_web_page_preview=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_message(
    update.effective_message.chat_id,
    parse_mode=ParseMode.HTML,
    *args,
    **kwargs,
)

Sends a message with HTML formatting.

For the documentation of the arguments, please see telegram.Bot.send_message().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_invoice(title, description, payload, provider_token, currency, prices, start_parameter=None, photo_url=None, photo_size=None, photo_width=None, photo_height=None, need_name=None, need_phone_number=None, need_email=None, need_shipping_address=None, is_flexible=None, disable_notification=None, reply_markup=None, provider_data=None, send_phone_number_to_provider=None, send_email_to_provider=None, max_tip_amount=None, suggested_tip_amounts=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_invoice(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_invoice().

Warning

As of API 5.2 start_parameter is an optional argument and therefore the order of the arguments had to be changed. Use keyword arguments to make sure that the arguments are passed correctly.

New in version 13.2.

Changed in version 13.5: As of Bot API 5.2, the parameter start_parameter is optional.

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_location(latitude=None, longitude=None, disable_notification=None, reply_markup=None, live_period=None, horizontal_accuracy=None, heading=None, proximity_alert_radius=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, location=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_location(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_location().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_markdown(text, disable_notification=None, reply_markup=None, entities=None, protect_content=None, message_thread_id=None, link_preview_options=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, disable_web_page_preview=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_message(
    update.effective_message.chat_id,
    parse_mode=ParseMode.MARKDOWN,
    *args,
    **kwargs,
)

Sends a message with Markdown version 1 formatting.

For the documentation of the arguments, please see telegram.Bot.send_message().

Note

'Markdown' is a legacy mode, retained by Telegram for backward compatibility. You should use reply_markdown_v2() instead.

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_markdown_v2(text, disable_notification=None, reply_markup=None, entities=None, protect_content=None, message_thread_id=None, link_preview_options=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, disable_web_page_preview=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_message(
    update.effective_message.chat_id,
    parse_mode=ParseMode.MARKDOWN_V2,
    *args,
    **kwargs,
)

Sends a message with markdown version 2 formatting.

For the documentation of the arguments, please see telegram.Bot.send_message().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_media_group(media, disable_notification=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None, caption=None, parse_mode=None, caption_entities=None)[source]

Shortcut for:

await bot.send_media_group(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_media_group().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

An array of the sent Messages.

Return type:

Tuple[telegram.Message]

Raises:

telegram.error.TelegramError

async reply_photo(photo, caption=None, disable_notification=None, reply_markup=None, parse_mode=None, caption_entities=None, protect_content=None, message_thread_id=None, has_spoiler=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, filename=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_photo(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_photo().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_poll(question, options, is_anonymous=None, type=None, allows_multiple_answers=None, correct_option_id=None, is_closed=None, disable_notification=None, reply_markup=None, explanation=None, explanation_parse_mode=None, open_period=None, close_date=None, explanation_entities=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_poll(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_poll().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_sticker(sticker, disable_notification=None, reply_markup=None, protect_content=None, message_thread_id=None, emoji=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_sticker(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_sticker().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_text(text, parse_mode=None, disable_notification=None, reply_markup=None, entities=None, protect_content=None, message_thread_id=None, link_preview_options=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, disable_web_page_preview=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_message(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_message().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_venue(latitude=None, longitude=None, title=None, address=None, foursquare_id=None, disable_notification=None, reply_markup=None, foursquare_type=None, google_place_id=None, google_place_type=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, venue=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_venue(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_venue().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_video(video, duration=None, caption=None, disable_notification=None, reply_markup=None, width=None, height=None, parse_mode=None, supports_streaming=None, caption_entities=None, protect_content=None, message_thread_id=None, has_spoiler=None, thumbnail=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, filename=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_video(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_video().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_video_note(video_note, duration=None, length=None, disable_notification=None, reply_markup=None, protect_content=None, message_thread_id=None, thumbnail=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, filename=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_video_note(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_video_note().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async reply_voice(voice, duration=None, caption=None, disable_notification=None, reply_markup=None, parse_mode=None, caption_entities=None, protect_content=None, message_thread_id=None, reply_parameters=None, *, reply_to_message_id=None, allow_sending_without_reply=None, filename=None, quote=None, do_quote=None, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.send_voice(update.effective_message.chat_id, *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.send_voice().

Keyword Arguments:
  • quote (bool, optional) –

    If set to True, the reply is sent as an actual reply to this message. If reply_to_message_id is passed, this parameter will be ignored. Default: True in group chats and False in private chats.

    Deprecated since version 20.8: This argument is deprecated in favor of do_quote

  • do_quote (bool | dict, optional) –

    If set to True, the replied message is quoted. For a dict, it must be the output of build_reply_arguments() to specify exact reply_parameters. If reply_to_message_id or reply_parameters are passed, this parameter will be ignored. Default: True in group chats and False in private chats. Mutually exclusive with quote.

    New in version 20.8.

Returns:

On success, instance representing the message posted.

Return type:

telegram.Message

async set_game_score(user_id, score, force=None, disable_edit_message=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.set_game_score(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.set_game_score().

Note

You can only edit messages that the bot sent itself (i.e. of the bot.send_* family of methods) or channel posts, if the bot is an admin in that channel. However, this behaviour is undocumented and might be changed by Telegram.

Returns:

On success, if edited message is sent by the bot, the edited Message is returned, otherwise True is returned.

Return type:

telegram.Message

async set_reaction(reaction=None, is_big=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.set_message_reaction(chat_id=message.chat_id, message_id=message.message_id,
   *args, **kwargs)

For the documentation of the arguments, please see telegram.Bot.set_message_reaction().

New in version 20.8.

Returns:

bool On success, True is returned.

async stop_live_location(reply_markup=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.stop_message_live_location(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.stop_message_live_location().

Note

You can only edit messages that the bot sent itself (i.e. of the bot.send_* family of methods) or channel posts, if the bot is an admin in that channel. However, this behaviour is undocumented and might be changed by Telegram.

Returns:

On success, if edited message is sent by the bot, the edited Message is returned, otherwise True is returned.

Return type:

telegram.Message

async stop_poll(reply_markup=None, *, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.stop_poll(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.stop_poll().

Returns:

On success, the stopped Poll with the final results is returned.

Return type:

telegram.Poll

property text_html[source]

Creates an HTML-formatted string from the markup entities found in the message.

Use this if you want to retrieve the message text with the entities formatted as HTML in the same way the original message was formatted.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients.

Changed in version 13.10: Spoiler entities are now formatted as HTML.

Changed in version 20.3: Custom emoji entities are now supported.

Changed in version 20.8: Blockquote entities are now supported.

Returns:

Message text with entities formatted as HTML.

Return type:

str

property text_html_urled[source]

Creates an HTML-formatted string from the markup entities found in the message.

Use this if you want to retrieve the message text with the entities formatted as HTML. This also formats telegram.MessageEntity.URL as a hyperlink.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients.

Changed in version 13.10: Spoiler entities are now formatted as HTML.

Changed in version 20.3: Custom emoji entities are now supported.

Changed in version 20.8: Blockquote entities are now supported.

Returns:

Message text with entities formatted as HTML.

Return type:

str

property text_markdown[source]

Creates an Markdown-formatted string from the markup entities found in the message using telegram.constants.ParseMode.MARKDOWN.

Use this if you want to retrieve the message text with the entities formatted as Markdown in the same way the original message was formatted.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients. Moreover, markdown formatting is inherently less expressive than HTML, so some edge cases may not be coverable at all. For example, markdown formatting can not specify two consecutive block quotes without a blank line in between, but HTML can.

Note

'Markdown' is a legacy mode, retained by Telegram for backward compatibility. You should use text_markdown_v2() instead.

Changed in version 20.5: Since custom emoji entities are not supported by MARKDOWN, this method now raises a ValueError when encountering a custom emoji.

Changed in version 20.8: Since block quotation entities are not supported by MARKDOWN, this method now raises a ValueError when encountering a block quotation.

Returns:

Message text with entities formatted as Markdown.

Return type:

str

Raises:

ValueError – If the message contains underline, strikethrough, spoiler, blockquote or nested entities.

property text_markdown_urled[source]

Creates an Markdown-formatted string from the markup entities found in the message using telegram.constants.ParseMode.MARKDOWN.

Use this if you want to retrieve the message text with the entities formatted as Markdown. This also formats telegram.MessageEntity.URL as a hyperlink.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients. Moreover, markdown formatting is inherently less expressive than HTML, so some edge cases may not be coverable at all. For example, markdown formatting can not specify two consecutive block quotes without a blank line in between, but HTML can.

Note

'Markdown' is a legacy mode, retained by Telegram for backward compatibility. You should use text_markdown_v2_urled() instead.

Changed in version 20.5: Since custom emoji entities are not supported by MARKDOWN, this method now raises a ValueError when encountering a custom emoji.

Changed in version 20.8: Since block quotation entities are not supported by MARKDOWN, this method now raises a ValueError when encountering a block quotation.

Returns:

Message text with entities formatted as Markdown.

Return type:

str

Raises:

ValueError – If the message contains underline, strikethrough, spoiler, blockquote or nested entities.

property text_markdown_v2[source]

Creates an Markdown-formatted string from the markup entities found in the message using telegram.constants.ParseMode.MARKDOWN_V2.

Use this if you want to retrieve the message text with the entities formatted as Markdown in the same way the original message was formatted.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients. Moreover, markdown formatting is inherently less expressive than HTML, so some edge cases may not be coverable at all. For example, markdown formatting can not specify two consecutive block quotes without a blank line in between, but HTML can.

Changed in version 13.10: Spoiler entities are now formatted as Markdown V2.

Changed in version 20.3: Custom emoji entities are now supported.

Changed in version 20.8: Blockquote entities are now supported.

Returns:

Message text with entities formatted as Markdown.

Return type:

str

property text_markdown_v2_urled[source]

Creates an Markdown-formatted string from the markup entities found in the message using telegram.constants.ParseMode.MARKDOWN_V2.

Use this if you want to retrieve the message text with the entities formatted as Markdown. This also formats telegram.MessageEntity.URL as a hyperlink.

Warning

The return value of this property is a best-effort approach. Unfortunately, it can not be guaranteed that sending a message with the returned string will render in the same way as the original message produces the same entities/caption_entities as the original message. For example, Telegram recommends that entities of type BLOCKQUOTE and PRE should start and end on a new line, but does not enforce this and leaves rendering decisions up to the clients. Moreover, markdown formatting is inherently less expressive than HTML, so some edge cases may not be coverable at all. For example, markdown formatting can not specify two consecutive block quotes without a blank line in between, but HTML can.

Changed in version 13.10: Spoiler entities are now formatted as Markdown V2.

Changed in version 20.3: Custom emoji entities are now supported.

Changed in version 20.8: Blockquote entities are now supported.

Returns:

Message text with entities formatted as Markdown.

Return type:

str

async unpin(*, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.unpin_chat_message(
    chat_id=message.chat_id, message_id=message.message_id, *args, **kwargs
)

For the documentation of the arguments, please see telegram.Bot.unpin_chat_message().

Returns:

On success, True is returned.

Return type:

bool

async unpin_all_forum_topic_messages(*, read_timeout=None, write_timeout=None, connect_timeout=None, pool_timeout=None, api_kwargs=None)[source]

Shortcut for:

await bot.unpin_all_forum_topic_messages(
   chat_id=message.chat_id, message_thread_id=message.message_thread_id, *args,
   **kwargs
)

For the documentation of the arguments, please see telegram.Bot.unpin_all_forum_topic_messages().

New in version 20.0.

Returns:

On success, True is returned.

Return type:

bool