Documentation Improvements (#3214, #3217, #3218, #3271, #3289, #3292, #3303, #3312, #3306, #3319, #3326, #3314)

Co-authored-by: Harshil <37377066+harshil21@users.noreply.github.com>
Co-authored-by: Simon Fong <44134941+simonfongnt@users.noreply.github.com>
Co-authored-by: Piotr Rogulski <rivinek@gmail.com>
Co-authored-by: poolitzer <25934244+Poolitzer@users.noreply.github.com>
Co-authored-by: Or Bin <or@raftt.io>
Co-authored-by: Sandro <j32g7f67hb@liamekaens.com>
Co-authored-by: Hatim Zahid <63000127+HatimZ@users.noreply.github.com>
Co-authored-by: Robi <53259730+RobiMez@users.noreply.github.com>
Co-authored-by: Dmitry Kolomatskiy <58207913+lemontree210@users.noreply.github.com>
This commit is contained in:
Bibo-Joshi 2022-11-15 09:06:23 +01:00 committed by GitHub
parent 70aa674226
commit 9520c6eeba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
70 changed files with 1104 additions and 2095 deletions

View file

@ -13,7 +13,7 @@ Setting things up
.. code-block:: bash
$ git clone https://github.com/<your username>/python-telegram-bot --recursive
$ git clone https://github.com/<your username>/python-telegram-bot
$ cd python-telegram-bot
3. Add a track to the original repository:

View file

@ -21,6 +21,31 @@ python:
- requirements: docs/requirements-docs.txt
build:
os: ubuntu-20.04
os: ubuntu-22.04
tools:
python: "3" # latest stable cpython version
search:
ranking: # bump up rank of commonly searched pages: (default: 0, values range from -10 to 10)
telegram.bot.html: 7
telegram.message.html: 3
telegram.update.html: 3
telegram.user.html: 2
telegram.chat.html: 2
telegram.ext.application.html: 3
telegram.ext.filters.html: 3
telegram.ext.callbackcontext.html: 2
telegram.ext.inlinekeyboardbutton.html: 1
telegram.passport*.html: -7
ignore:
- changelog.html
- coc.html
- bot_methods.html#
- bot_methods.html
# Defaults
- search.html
- search/index.html
- 404.html
- 404/index.html'

View file

@ -1,5 +1,6 @@
sphinx==5.3.0
sphinx-pypi-upload
furo==2022.9.29
git+https://github.com/harshil21/furo-sphinx-search@be5cfa221a01f6e259bb2bb1f76d6ede7ffc1f11#egg=furo-sphinx-search
sphinx-paramlinks==0.5.4
sphinxcontrib-mermaid==0.7.1

View file

@ -5,7 +5,7 @@ import subprocess
import sys
from enum import Enum
from pathlib import Path
from typing import Tuple
from typing import List, Tuple
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
@ -34,7 +34,7 @@ version = "20.0a4" # telegram.__version__[:3]
release = "20.0a4" # telegram.__version__
# If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = "4.5.0"
needs_sphinx = "5.1.1"
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
@ -46,6 +46,7 @@ extensions = [
"sphinx.ext.linkcode",
"sphinx_paramlinks",
"sphinxcontrib.mermaid",
"sphinx_search.extension",
]
# Use intersphinx to reference the python builtin library docs
@ -215,11 +216,9 @@ html_favicon = "ptb-logo_1024.ico"
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ["_static"]
html_css_files = [
"style_external_link.css",
"style_mermaid_diagrams.css",
]
html_permalinks_icon = "" # Furo's default permalink icon is `#`` which doesn't look great imo.
html_css_files = ["style_external_link.css", "style_mermaid_diagrams.css"]
html_permalinks_icon = "" # Furo's default permalink icon is `#` which doesn't look great imo.
# Output file base name for HTML help builder.
htmlhelp_basename = "python-telegram-bot-doc"
@ -260,6 +259,7 @@ latex_logo = "ptb-logo_1024.png"
# (source start file, name, description, authors, manual section).
man_pages = [(master_doc, "python-telegram-bot", "python-telegram-bot Documentation", [author], 1)]
# rtd_sphinx_search_file_type = "un-minified" # Configuration for furo-sphinx-search
# -- Options for Texinfo output -------------------------------------------
@ -378,12 +378,98 @@ line_numbers = {}
file_root = Path(inspect.getsourcefile(telegram)).parent.parent.resolve()
import telegram.ext # Needed for checking if an object is a BaseFilter
keyword_args = [
":keyword _sphinx_paramlinks_telegram.Bot.{method}.read_timeout: Value to pass to :paramref:`telegram.request.BaseRequest.post.read_timeout`. Defaults to {read_timeout}.",
":kwtype _sphinx_paramlinks_telegram.Bot.{method}.read_timeout: {read_timeout_type}, optional",
":keyword _sphinx_paramlinks_telegram.Bot.{method}.write_timeout: Value to pass to :paramref:`telegram.request.BaseRequest.post.write_timeout`. Defaults to {write_timeout}.",
":kwtype _sphinx_paramlinks_telegram.Bot.{method}.write_timeout: :obj:`float` | :obj:`None`, optional",
":keyword _sphinx_paramlinks_telegram.Bot.{method}.connect_timeout: Value to pass to :paramref:`telegram.request.BaseRequest.post.connect_timeout`. Defaults to :attr:`~telegram.request.BaseRequest.DEFAULT_NONE`.",
":kwtype _sphinx_paramlinks_telegram.Bot.{method}.connect_timeout: :obj:`float` | :obj:`None`, optional",
":keyword _sphinx_paramlinks_telegram.Bot.{method}.pool_timeout: Value to pass to :paramref:`telegram.request.BaseRequest.post.pool_timeout`. Defaults to :attr:`~telegram.request.BaseRequest.DEFAULT_NONE`.",
":kwtype _sphinx_paramlinks_telegram.Bot.{method}.pool_timeout: :obj:`float` | :obj:`None`, optional",
":keyword _sphinx_paramlinks_telegram.Bot.{method}.api_kwargs: Arbitrary keyword arguments to be passed to the Telegram API.",
":kwtype _sphinx_paramlinks_telegram.Bot.{method}.api_kwargs: :obj:`dict`, optional",
"",
]
def autodoc_process_docstring(app: Sphinx, what, name: str, obj: object, options, lines):
"""We misuse this autodoc hook to get the file names & line numbers because we have access
to the actual object here.
write_timeout_sub = [":attr:`~telegram.request.BaseRequest.DEFAULT_NONE`", "``20``"]
read_timeout_sub = [
":attr:`~telegram.request.BaseRequest.DEFAULT_NONE`.",
"``2``. :paramref:`timeout` will be added to this value",
]
read_timeout_type = [":obj:`float` | :obj:`None`", ":obj:`float`"]
def find_insert_pos(lines: List[str]) -> int:
"""Finds the correct position to insert the keyword arguments and returns the index."""
for idx, value in reversed(list(enumerate(lines))): # reversed since :returns: is at the end
if value.startswith(":returns:"):
return idx
else:
return False
def is_write_timeout_20(obj: object) -> int:
"""inspects the default value of write_timeout parameter of the bot method."""
sig = inspect.signature(obj)
return 1 if (sig.parameters["write_timeout"].default == 20) else 0
def check_timeout_and_api_kwargs_presence(obj: object) -> int:
"""Checks if the method has timeout and api_kwargs keyword only parameters."""
sig = inspect.signature(obj)
params_to_check = (
"read_timeout",
"write_timeout",
"connect_timeout",
"pool_timeout",
"api_kwargs",
)
return all(
param in sig.parameters and sig.parameters[param].kind == inspect.Parameter.KEYWORD_ONLY
for param in params_to_check
)
def autodoc_process_docstring(
app: Sphinx, what, name: str, obj: object, options, lines: List[str]
):
"""We do two things:
1) Use this method to automatically insert the Keyword Args for the Bot methods.
2) Misuse this autodoc hook to get the file names & line numbers because we have access
to the actual object here.
"""
# Ce can't properly handle ordinary attributes.
# 1) Insert the Keyword Args for the Bot methods
method_name = name.split(".")[-1]
if (
name.startswith("telegram.Bot.")
and what == "method"
and method_name.islower()
and check_timeout_and_api_kwargs_presence(obj)
):
insert_index = find_insert_pos(lines)
if not insert_index:
raise ValueError(
f"Couldn't find the correct position to insert the keyword args for {obj}."
)
long_write_timeout = is_write_timeout_20(obj)
get_updates_sub = 1 if (method_name == "get_updates") else 0
# The below can be done in 1 line with itertools.chain, but this must be modified in-place
for i in range(insert_index, insert_index + len(keyword_args)):
lines.insert(
i,
keyword_args[i - insert_index].format(
method=method_name,
write_timeout=write_timeout_sub[long_write_timeout],
read_timeout=read_timeout_sub[get_updates_sub],
read_timeout_type=read_timeout_type[get_updates_sub],
),
)
# 2) Get the file names & line numbers
# We can't properly handle ordinary attributes.
# In linkcode_resolve we'll resolve to the `__init__` or module instead
if what == "attribute":
return

View file

@ -0,0 +1,7 @@
.. tip::
When combining ``python-telegram-bot`` with other :mod:`asyncio` based frameworks, using this
method is likely not the best choice, as it blocks the event loop until it receives a stop
signal as described above.
Instead, you can manually call the methods listed below to start and shut down the application
and the :attr:`~telegram.ext.Application.updater`.
Keeping the event loop running and listening for a stop signal is then up to you.

View file

@ -290,6 +290,10 @@
:align: left
:widths: 1 4
* - :attr:`~telegram.Bot.base_file_url`
- Telegram Bot API file URL
* - :attr:`~telegram.Bot.base_url`
- Telegram Bot API service URL
* - :attr:`~telegram.Bot.bot`
- The user instance of the bot as returned by :meth:`~telegram.Bot.get_me`
* - :attr:`~telegram.Bot.can_join_groups`
@ -310,8 +314,12 @@
- The username of the bot, without leading ``@``
* - :attr:`~telegram.Bot.link`
- The t.me link of the bot
* - :attr:`~telegram.Bot.private_key`
- Deserialized private key for decryption of telegram passport data
* - :attr:`~telegram.Bot.supports_inline_queries`
- Whether the bot supports inline queries
* - :attr:`~telegram.Bot.token`
- Bot's unique authentication token
.. raw:: html

View file

@ -0,0 +1,82 @@
Available Types
---------------
.. toctree::
telegram.animation
telegram.audio
telegram.botcommand
telegram.botcommandscope
telegram.botcommandscopeallchatadministrators
telegram.botcommandscopeallgroupchats
telegram.botcommandscopeallprivatechats
telegram.botcommandscopechat
telegram.botcommandscopechatadministrators
telegram.botcommandscopechatmember
telegram.botcommandscopedefault
telegram.callbackquery
telegram.chat
telegram.chatadministratorrights
telegram.chatinvitelink
telegram.chatjoinrequest
telegram.chatlocation
telegram.chatmember
telegram.chatmemberadministrator
telegram.chatmemberbanned
telegram.chatmemberleft
telegram.chatmembermember
telegram.chatmemberowner
telegram.chatmemberrestricted
telegram.chatmemberupdated
telegram.chatpermissions
telegram.chatphoto
telegram.contact
telegram.dice
telegram.document
telegram.file
telegram.forcereply
telegram.inlinekeyboardbutton
telegram.inlinekeyboardmarkup
telegram.inputfile
telegram.inputmedia
telegram.inputmediaanimation
telegram.inputmediaaudio
telegram.inputmediadocument
telegram.inputmediaphoto
telegram.inputmediavideo
telegram.keyboardbutton
telegram.keyboardbuttonpolltype
telegram.location
telegram.loginurl
telegram.menubutton
telegram.menubuttoncommands
telegram.menubuttondefault
telegram.menubuttonwebapp
telegram.message
telegram.messageautodeletetimerchanged
telegram.messageentity
telegram.messageid
telegram.photosize
telegram.poll
telegram.pollanswer
telegram.polloption
telegram.proximityalerttriggered
telegram.replykeyboardmarkup
telegram.replykeyboardremove
telegram.sentwebappmessage
telegram.telegramobject
telegram.update
telegram.user
telegram.userprofilephotos
telegram.venue
telegram.video
telegram.videochatended
telegram.videochatparticipantsinvited
telegram.videochatscheduled
telegram.videochatstarted
telegram.videonote
telegram.voice
telegram.webappdata
telegram.webappinfo
telegram.webhookinfo

View file

@ -2,6 +2,7 @@ telegram.ext package
====================
.. toctree::
:titlesonly:
telegram.ext.application
telegram.ext.applicationbuilder

View file

@ -7,88 +7,14 @@ Version Constants
.. automodule:: telegram
:members: __version__, __version_info__, __bot_api_version__, __bot_api_version_info__
Available Types
---------------
Classes in this package
-----------------------
.. toctree::
:titlesonly:
telegram.animation
telegram.audio
telegram.bot
telegram.botcommand
telegram.botcommandscope
telegram.botcommandscopeallchatadministrators
telegram.botcommandscopeallgroupchats
telegram.botcommandscopeallprivatechats
telegram.botcommandscopechat
telegram.botcommandscopechatadministrators
telegram.botcommandscopechatmember
telegram.botcommandscopedefault
telegram.callbackquery
telegram.chat
telegram.chatadministratorrights
telegram.chatinvitelink
telegram.chatjoinrequest
telegram.chatlocation
telegram.chatmember
telegram.chatmemberadministrator
telegram.chatmemberbanned
telegram.chatmemberleft
telegram.chatmembermember
telegram.chatmemberowner
telegram.chatmemberrestricted
telegram.chatmemberupdated
telegram.chatpermissions
telegram.chatphoto
telegram.contact
telegram.dice
telegram.document
telegram.file
telegram.forcereply
telegram.inlinekeyboardbutton
telegram.inlinekeyboardmarkup
telegram.inputfile
telegram.inputmedia
telegram.inputmediaanimation
telegram.inputmediaaudio
telegram.inputmediadocument
telegram.inputmediaphoto
telegram.inputmediavideo
telegram.keyboardbutton
telegram.keyboardbuttonpolltype
telegram.location
telegram.loginurl
telegram.menubutton
telegram.menubuttoncommands
telegram.menubuttondefault
telegram.menubuttonwebapp
telegram.message
telegram.messageautodeletetimerchanged
telegram.messageentity
telegram.messageid
telegram.photosize
telegram.poll
telegram.pollanswer
telegram.polloption
telegram.proximityalerttriggered
telegram.replykeyboardmarkup
telegram.replykeyboardremove
telegram.sentwebappmessage
telegram.telegramobject
telegram.update
telegram.user
telegram.userprofilephotos
telegram.venue
telegram.video
telegram.videochatended
telegram.videochatparticipantsinvited
telegram.videochatscheduled
telegram.videochatstarted
telegram.videonote
telegram.voice
telegram.webappdata
telegram.webappinfo
telegram.webhookinfo
telegram.at-tree.rst
telegram.stickers-tree.rst
telegram.inline-tree.rst
telegram.payments-tree.rst

View file

@ -4,4 +4,4 @@ telegram.TelegramObject
.. autoclass:: telegram.TelegramObject
:members:
:show-inheritance:
:special-members: __repr__
:special-members: __repr__, __getitem__, __eq__, __hash__, __setstate__, __getstate__, __deepcopy__

View file

@ -21,3 +21,19 @@
.. |toapikwargsarg| replace:: Arbitrary keyword arguments. Can be used to store data for which there are no dedicated attributes. |toapikwargsbase|
.. |toapikwargsattr| replace:: Optional. Arbitrary keyword arguments. Used to store data for which there are no dedicated attributes. |toapikwargsbase|
.. |chat_id_channel| replace:: Unique identifier for the target chat or username of the target channel (in the format ``@channelusername``).
.. |chat_id_group| replace:: Unique identifier for the target chat or username of the target supergroup (in the format ``@supergroupusername``).
.. |parse_mode| replace:: Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message. See the constants in :class:`telegram.constants.ParseMode` for the available modes.
.. |allow_sending_without_reply| replace:: Pass :obj:`True`, if the message should be sent even if the specified replied-to message is not found.
.. |caption_entities| replace:: List of special entities that appear in the caption, which can be specified instead of ``parse_mode``.
.. |protect_content| replace:: Protects the contents of the sent message from forwarding and saving.
.. |disable_notification| replace:: Sends the message silently. Users will receive a notification with no sound.
.. |reply_to_msg_id| replace:: If the message is a reply, ID of the original message.

File diff suppressed because it is too large Load diff

View file

@ -182,12 +182,11 @@ class BotCommandScopeChat(BotCommandScope):
.. versionadded:: 13.7
Args:
chat_id (:obj:`str` | :obj:`int`): Unique identifier for the target chat or username of the
target supergroup (in the format ``@supergroupusername``)
chat_id (:obj:`str` | :obj:`int`): |chat_id_group|
Attributes:
type (:obj:`str`): Scope type :tg-const:`telegram.BotCommandScope.CHAT`.
chat_id (:obj:`str` | :obj:`int`): Unique identifier for the target chat or username of the
target supergroup (in the format ``@supergroupusername``)
chat_id (:obj:`str` | :obj:`int`): |chat_id_group|
"""
__slots__ = ("chat_id",)
@ -210,12 +209,10 @@ class BotCommandScopeChatAdministrators(BotCommandScope):
.. versionadded:: 13.7
Args:
chat_id (:obj:`str` | :obj:`int`): Unique identifier for the target chat or username of the
target supergroup (in the format ``@supergroupusername``)
chat_id (:obj:`str` | :obj:`int`): |chat_id_group|
Attributes:
type (:obj:`str`): Scope type :tg-const:`telegram.BotCommandScope.CHAT_ADMINISTRATORS`.
chat_id (:obj:`str` | :obj:`int`): Unique identifier for the target chat or username of the
target supergroup (in the format ``@supergroupusername``)
chat_id (:obj:`str` | :obj:`int`): |chat_id_group|
"""
__slots__ = ("chat_id",)
@ -238,14 +235,12 @@ class BotCommandScopeChatMember(BotCommandScope):
.. versionadded:: 13.7
Args:
chat_id (:obj:`str` | :obj:`int`): Unique identifier for the target chat or username of the
target supergroup (in the format ``@supergroupusername``)
chat_id (:obj:`str` | :obj:`int`): |chat_id_group|
user_id (:obj:`int`): Unique identifier of the target user.
Attributes:
type (:obj:`str`): Scope type :tg-const:`telegram.BotCommandScope.CHAT_MEMBER`.
chat_id (:obj:`str` | :obj:`int`): Unique identifier for the target chat or username of the
target supergroup (in the format ``@supergroupusername``)
chat_id (:obj:`str` | :obj:`int`): |chat_id_group|
user_id (:obj:`int`): Unique identifier of the target user.
"""

View file

@ -149,21 +149,28 @@ class Chat(TelegramObject):
.. versionadded:: 20.0
Attributes:
id (:obj:`int`): Unique identifier for this chat.
type (:obj:`str`): Type of chat.
id (:obj:`int`): Unique identifier for this chat. This number may be greater than 32 bits
and some programming languages may have difficulty/silent defects in interpreting it.
But it is smaller than 52 bits, so a signed 64-bit integer or double-precision float
type are safe for storing this identifier.
type (:obj:`str`): Type of chat, can be either :attr:`PRIVATE`, :attr:`GROUP`,
:attr:`SUPERGROUP` or :attr:`CHANNEL`.
title (:obj:`str`): Optional. Title, for supergroups, channels and group chats.
username (:obj:`str`): Optional. Username.
username (:obj:`str`): Optional. Username, for private chats, supergroups and channels if
available.
first_name (:obj:`str`): Optional. First name of the other party in a private chat.
last_name (:obj:`str`): Optional. Last name of the other party in a private chat.
photo (:class:`telegram.ChatPhoto`): Optional. Chat photo.
Returned only in :meth:`telegram.Bot.get_chat`.
bio (:obj:`str`): Optional. Bio of the other party in a private chat. Returned only in
:meth:`telegram.Bot.get_chat`.
has_private_forwards (:obj:`bool`): Optional. :obj:`True`, if privacy settings of the other
party in the private chat allows to use ``tg://user?id=<user_id>`` links only in chats
with the user.
with the user. Returned only in :meth:`telegram.Bot.get_chat`.
.. versionadded:: 13.9
description (:obj:`str`): Optional. Description, for groups, supergroups and channel chats.
Returned only in :meth:`telegram.Bot.get_chat`.
invite_link (:obj:`str`): Optional. Primary invite link, for groups, supergroups and
channel. Returned only in :meth:`telegram.Bot.get_chat`.
pinned_message (:class:`telegram.Message`): Optional. The most recent pinned message
@ -179,12 +186,13 @@ class Chat(TelegramObject):
.. versionadded:: 13.4
has_protected_content (:obj:`bool`): Optional. :obj:`True`, if messages from the chat can't
be forwarded to other chats.
be forwarded to other chats. Returned only in :meth:`telegram.Bot.get_chat`.
.. versionadded:: 13.9
sticker_set_name (:obj:`str`): Optional. For supergroups, name of Group sticker set.
Returned only in :meth:`telegram.Bot.get_chat`.
can_set_sticker_set (:obj:`bool`): Optional. :obj:`True`, if the bot can change group the
sticker set.
sticker set. Returned only in :meth:`telegram.Bot.get_chat`.
linked_chat_id (:obj:`int`): Optional. Unique identifier for the linked chat, i.e. the
discussion group identifier for a channel and vice versa; for supergroups and channel
chats. Returned only in :meth:`telegram.Bot.get_chat`.

View file

@ -44,7 +44,8 @@ class ChatMember(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`user` and :attr:`status` are equal.
.. seealso:: `Chat Member Example <examples.chatmemberbot.html>`_
Examples:
:any:`Chat Member Bot <examples.chatmemberbot>`
.. versionchanged:: 20.0

View file

@ -44,6 +44,9 @@ class ChatMemberUpdated(TelegramObject):
Note:
In Python :keyword:`from` is a reserved word use :paramref:`from_user` instead.
Examples:
:any:`Chat Member Bot <examples.chatmemberbot>`
Args:
chat (:class:`telegram.Chat`): Chat the user belongs to.
from_user (:class:`telegram.User`): Performer of the action, which resulted in the change.

View file

@ -62,9 +62,11 @@ class InlineKeyboardButton(TelegramObject):
* After Bot API 6.1, only ``HTTPS`` links will be allowed in :paramref:`login_url`.
.. seealso:: `Inline Keyboard Example 1 <examples.inlinekeyboard.html>`_,
`Inline Keyboard Example 2 <examples.inlinekeyboard2.html>`_,
:class:`telegram.InlineKeyboardMarkup`
Examples:
* :any:`Inline Keyboard 1 <examples.inlinekeyboard>`
* :any:`Inline Keyboard 2 <examples.inlinekeyboard2>`
.. seealso:: :class:`telegram.InlineKeyboardMarkup`
.. versionchanged:: 20.0
:attr:`web_app` is considered as well when comparing objects of this type in terms of
@ -90,6 +92,9 @@ class InlineKeyboardButton(TelegramObject):
Tip:
The value entered here will be available in :attr:`telegram.CallbackQuery.data`.
.. seealso:: `Arbitrary callback_data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Arbitrary-callback_data>`_
web_app (:obj:`telegram.WebAppInfo`, optional): Description of the `Web App
<https://core.telegram.org/bots/webapps>`_ that will be launched when the user presses
the button. The Web App will be able to send an arbitrary message on behalf of the user

View file

@ -36,8 +36,9 @@ class InlineKeyboardMarkup(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their size of :attr:`inline_keyboard` and all the buttons are equal.
.. seealso:: `Inline Keyboard Example 1 <examples.inlinekeyboard.html>`_,
`Inline Keyboard Example 2 <examples.inlinekeyboard2.html>`_
Examples:
* :any:`Inline Keyboard 1 <examples.inlinekeyboard>`
* :any:`Inline Keyboard 2 <examples.inlinekeyboard2>`
Args:
inline_keyboard (List[List[:class:`telegram.InlineKeyboardButton`]]): List of button rows,

View file

@ -33,6 +33,9 @@ class InlineQueryResult(TelegramObject):
All URLs passed in inline query results will be available to end users and therefore must
be assumed to be *public*.
Examples:
:any:`Inline Bot <examples.inlinebot>`
Args:
type (:obj:`str`): Type of the result.
id (:obj:`str`): Unique identifier for this result, 1-64 Bytes.

View file

@ -32,7 +32,8 @@ if TYPE_CHECKING:
class InlineQueryResultArticle(InlineQueryResult):
"""This object represents a Telegram InlineQueryResultArticle.
.. seealso:: `Inline Example <examples.inlinebot.html>`_
Examples:
:any:`Inline Bot <examples.inlinebot>`
Args:
id (:obj:`str`): Unique identifier for this result, 1-64 Bytes.

View file

@ -33,7 +33,8 @@ class InputTextMessageContent(InputMessageContent):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`message_text` is equal.
.. seealso:: `Inline Example <examples.inlinebot.html>`_
Examples:
:any:`Inline Bot <examples.inlinebot>`
Args:
message_text (:obj:`str`): Text of the message to be sent,

View file

@ -29,7 +29,8 @@ class KeyboardButtonPollType(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`type` is equal.
.. seealso:: `Pollbot Example <examples.pollbot.html>`_
Examples:
:any:`Poll Bot <examples.pollbot>`
Attributes:
type (:obj:`str`): Optional. If :tg-const:`telegram.Poll.QUIZ` is passed, the user will be

View file

@ -104,7 +104,7 @@ class Message(TelegramObject):
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.
sender_chat (:class:`telegram.Chat`, optional): Sender of the message, sent on behalf of a
chat. For example, the channel itself for channel posts, the supergroup itself for
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,
:attr:`from_user` contains a fake sender user in non-channel chats, if the message was
@ -118,15 +118,17 @@ class Message(TelegramObject):
or from anonymous administrators, information about the original sender chat.
forward_from_message_id (:obj:`int`, optional): For forwarded channel posts, identifier of
the original message in the channel.
forward_sender_name (:obj:`str`, optional): Sender's name for messages forwarded from users
who disallow adding a link to their account in forwarded messages.
forward_sender_name (:obj:`str`, optional): Sender's name for messages forwarded from
users who disallow adding a link to their account in forwarded messages.
forward_date (:class:`datetime.datetime`, optional): For forwarded messages, date the
original message was sent in Unix time. Converted to :class:`datetime.datetime`.
is_automatic_forward (:obj:`bool`, optional): :obj:`True`, if the message is a channel post
that was automatically forwarded to the connected discussion group.
is_automatic_forward (:obj:`bool`, optional): :obj:`True`, if the message is a channel
post that was automatically forwarded to the connected discussion group.
.. versionadded:: 13.9
reply_to_message (:class:`telegram.Message`, 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.
edit_date (:class:`datetime.datetime`, optional): Date the message was last edited in Unix
time. Converted to :class:`datetime.datetime`.
has_protected_content (:obj:`bool`, optional): :obj:`True`, if the message can't be
@ -136,15 +138,16 @@ class Message(TelegramObject):
media_group_id (:obj:`str`, optional): The unique identifier of a media message group this
message belongs to.
text (:obj:`str`, optional): For text messages, the actual UTF-8 text of the message,
0-:tg-const:`telegram.constants.MessageLimit.TEXT_LENGTH`
characters.
0-:tg-const:`telegram.constants.MessageLimit.TEXT_LENGTH` characters.
entities (List[:class:`telegram.MessageEntity`], optional): For text messages, special
entities like usernames, URLs, bot commands, etc. that appear in the text. See
:attr:`parse_entity` and :attr:`parse_entities` methods for how to use properly.
This list is empty if the message does not contain entities.
caption_entities (List[:class:`telegram.MessageEntity`], optional): For messages with a
Caption. Special entities like usernames, URLs, bot commands, etc. that appear in the
caption. See :attr:`Message.parse_caption_entity` and :attr:`parse_caption_entities`
methods for how to use properly.
methods for how to use properly. This list is empty if the message does not contain
caption entities.
audio (:class:`telegram.Audio`, optional): Message is an audio file, information
about the file.
document (:class:`telegram.Document`, optional): Message is a general file, information
@ -153,32 +156,33 @@ class Message(TelegramObject):
about the animation. For backward compatibility, when this field is set, the document
field will also be set.
game (:class:`telegram.Game`, optional): Message is a game, information about the game.
photo (List[:class:`telegram.PhotoSize`], optional): Message is a photo, available
sizes of the photo.
photo (List[:class:`telegram.PhotoSize`], optional): Message is a photo, available sizes
of the photo. This list is empty if the message does not contain a photo.
sticker (:class:`telegram.Sticker`, optional): Message is a sticker, information
about the sticker.
video (:class:`telegram.Video`, optional): Message is a video, information about the video.
video (:class:`telegram.Video`, optional): Message is a video, information about the
video.
voice (:class:`telegram.Voice`, optional): Message is a voice message, information about
the file.
video_note (:class:`telegram.VideoNote`, optional): Message is a video note, information
about the video message.
new_chat_members (List[:class:`telegram.User`], optional): New members that were added to
the group or supergroup and information about them (the bot itself may be one of these
members).
members). This list is empty if the message does not contain new chat members.
caption (:obj:`str`, optional): Caption for the animation, audio, document, photo, video
or voice, 0-:tg-const:`telegram.constants.MessageLimit.CAPTION_LENGTH` characters.
contact (:class:`telegram.Contact`, optional): Message is a shared contact, information
about the contact.
location (:class:`telegram.Location`, optional): Message is a shared location, information
about the location.
venue (:class:`telegram.Venue`, optional): Message is a venue, information about the venue.
For backward compatibility, when this field is set, the location field will also be
set.
venue (:class:`telegram.Venue`, optional): Message is a venue, information about the
venue. For backward compatibility, when this field is set, the location field will
also be set.
left_chat_member (:class:`telegram.User`, optional): A member was removed from the group,
information about them (this member may be the bot itself).
new_chat_title (:obj:`str`, optional): A chat title was changed to this value.
new_chat_photo (List[:class:`telegram.PhotoSize`], optional): A chat photo was changed to
this value.
this value. This list is empty if the message does not contain a new chat photo.
delete_chat_photo (:obj:`bool`, optional): Service message: The chat photo was deleted.
group_chat_created (:obj:`bool`, optional): Service message: The group has been created.
supergroup_chat_created (:obj:`bool`, optional): Service message: The supergroup has been
@ -194,19 +198,13 @@ class Message(TelegramObject):
optional): Service message: auto-delete timer settings changed in the chat.
.. versionadded:: 13.4
migrate_to_chat_id (:obj:`int`, optional): The group has been migrated to a supergroup with
the specified identifier. This number may be greater than 32 bits and some programming
languages may have difficulty/silent defects in interpreting it. But it is smaller than
52 bits, so a signed 64 bit integer or double-precision float type are safe for storing
this identifier.
migrate_to_chat_id (:obj:`int`, optional): The group has been migrated to a supergroup
with the specified identifier.
migrate_from_chat_id (:obj:`int`, optional): The supergroup has been migrated from a group
with the specified identifier. This number may be greater than 32 bits and some
programming languages may have difficulty/silent defects in interpreting it. But it is
smaller than 52 bits, so a signed 64 bit integer or double-precision float type are
safe for storing this identifier.
with the specified identifier.
pinned_message (:class:`telegram.Message`, optional): Specified message was pinned. Note
that the Message object in this field will not contain further :attr:`reply_to_message`
fields even if it is itself a reply.
that the Message object in this field will not contain further
:attr:`reply_to_message` fields even if it is itself a reply.
invoice (:class:`telegram.Invoice`, optional): Message is an invoice for a payment,
information about the invoice.
successful_payment (:class:`telegram.SuccessfulPayment`, optional): Message is a service
@ -215,13 +213,15 @@ class Message(TelegramObject):
has logged in.
forward_signature (:obj:`str`, optional): For messages forwarded from channels, signature
of the post author if present.
author_signature (:obj:`str`, optional): Signature of the post author for messages in
author_signature (:obj:`str`, optional): Signature of the post author for messages in
channels, or the custom title of an anonymous group administrator.
forward_sender_name (:obj:`str`, optional): Sender's name for messages forwarded from
users who disallow adding a link to their account in forwarded messages.
passport_data (:class:`telegram.PassportData`, optional): Telegram Passport data.
poll (:class:`telegram.Poll`, optional): Message is a native poll,
information about the poll.
dice (:class:`telegram.Dice`, optional): Message is a dice with random value from 1 to 6.
via_bot (:class:`telegram.User`, optional): Message was sent through an inline bot.
dice (:class:`telegram.Dice`, optional): Message is a dice with random value.
via_bot (:class:`telegram.User`, optional): Bot through which message was sent.
proximity_alert_triggered (:class:`telegram.ProximityAlertTriggered`, optional): Service
message. A user in the chat triggered another user's proximity alert while sharing
Live Location.
@ -246,7 +246,8 @@ class Message(TelegramObject):
.. versionadded:: 20.0
reply_markup (:class:`telegram.InlineKeyboardMarkup`, optional): Inline keyboard attached
to the message. ``login_url`` buttons are represented as ordinary url buttons.
to the message. :paramref:`~telegram.InlineKeyboardButton.login_url` buttons are
represented as ordinary url buttons.
Attributes:
message_id (:obj:`int`): Unique message identifier inside this chat.
@ -254,94 +255,125 @@ class Message(TelegramObject):
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.
sender_chat (:class:`telegram.Chat`): Optional. Sender of the message, sent on behalf of a
chat. For backward compatibility, :attr:`from_user` contains a fake sender user in
non-channel chats, if the message was sent on behalf of a chat.
date (:class:`datetime.datetime`): Date the message was sent.
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,
:attr:`from_user` contains a fake sender user in non-channel chats, if the message was
sent on behalf of a chat.
date (:class:`datetime.datetime`): Date the message was sent in Unix time. Converted to
:class:`datetime.datetime`.
chat (:class:`telegram.Chat`): Conversation the message belongs to.
forward_from (:class:`telegram.User`): Optional. Sender of the original message.
forward_from (:class:`telegram.User`): Optional. For forwarded messages, sender of the
original message.
forward_from_chat (:class:`telegram.Chat`): Optional. For messages forwarded from channels
or from anonymous administrators, information about the original sender chat.
forward_from_message_id (:obj:`int`): Optional. Identifier of the original message in the
channel.
forward_date (:class:`datetime.datetime`): Optional. Date the original message was sent.
is_automatic_forward (:obj:`bool`): Optional. :obj:`True`, if the message is a channel post
that was automatically forwarded to the connected discussion group.
forward_from_message_id (:obj:`int`): Optional. For forwarded channel posts, identifier of
the original message in the channel.
forward_date (:class:`datetime.datetime`): Optional. For forwarded messages, date the
original message was sent in Unix time. Converted to :class:`datetime.datetime`.
is_automatic_forward (:obj:`bool`): Optional. :obj:`True`, if the message is a channel
post that was automatically forwarded to the connected discussion group.
.. versionadded:: 13.9
reply_to_message (:class:`telegram.Message`): 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.
edit_date (:class:`datetime.datetime`): Optional. Date the message was last edited.
edit_date (:class:`datetime.datetime`): Optional. Date the message was last edited in Unix
time. Converted to :class:`datetime.datetime`.
has_protected_content (:obj:`bool`): Optional. :obj:`True`, if the message can't be
forwarded.
.. versionadded:: 13.9
media_group_id (:obj:`str`): Optional. The unique identifier of a media message group this
message belongs to.
text (:obj:`str`): Optional. The actual UTF-8 text of the message.
entities (List[:class:`telegram.MessageEntity`]): Special entities like
usernames, URLs, bot commands, etc. that appear in the text. See
:attr:`Message.parse_entity` and :attr:`parse_entities` methods for how to use
properly. This list is empty if the message does not contain entities.
caption_entities (List[:class:`telegram.MessageEntity`]): Special entities like
usernames, URLs, bot commands, etc. that appear in the caption. See
:attr:`Message.parse_caption_entity` and :attr:`parse_caption_entities` methods for how
to use properly. This list is empty if the message does not contain caption entities.
audio (:class:`telegram.Audio`): Optional. Information about the file.
document (:class:`telegram.Document`): Optional. Information about the file.
animation (:class:`telegram.Animation`) Optional. Information about the file.
For backward compatibility, when this field is set, the document field will also be
set.
game (:class:`telegram.Game`): Optional. Information about the game.
photo (List[:class:`telegram.PhotoSize`]): Available sizes of the photo.
This list is empty if the message does not contain a photo.
sticker (:class:`telegram.Sticker`): Optional. Information about the sticker.
video (:class:`telegram.Video`): Optional. Information about the video.
voice (:class:`telegram.Voice`): Optional. Information about the file.
video_note (:class:`telegram.VideoNote`): Optional. Information about the video message.
new_chat_members (List[:class:`telegram.User`]): Information about new members to
the chat. The bot itself may be one of these members.
This list is empty if the message does not contain new chat members.
caption (:obj:`str`): Optional. Caption for the document, photo or video,
0-:tg-const:`telegram.constants.MessageLimit.CAPTION_LENGTH`
characters.
contact (:class:`telegram.Contact`): Optional. Information about the contact.
location (:class:`telegram.Location`): Optional. Information about the location.
venue (:class:`telegram.Venue`): Optional. Information about the venue.
left_chat_member (:class:`telegram.User`): Optional. Information about the user that left
the group. (this member may be the bot itself).
text (:obj:`str`): Optional. For text messages, the actual UTF-8 text of the message,
0-:tg-const:`telegram.constants.MessageLimit.TEXT_LENGTH` characters.
entities (List[:class:`telegram.MessageEntity`]): Optional. For text messages, special
entities like usernames, URLs, bot commands, etc. that appear in the text. See
:attr:`parse_entity` and :attr:`parse_entities` methods for how to use properly.
This list is empty if the message does not contain entities.
caption_entities (List[:class:`telegram.MessageEntity`]): Optional. For messages with a
Caption. Special entities like usernames, URLs, bot commands, etc. that appear in the
caption. See :attr:`Message.parse_caption_entity` and :attr:`parse_caption_entities`
methods for how to use properly. This list is empty if the message does not contain
caption entities.
audio (:class:`telegram.Audio`): Optional. Message is an audio file, information
about the file.
document (:class:`telegram.Document`): Optional. Message is a general file, information
about the file.
animation (:class:`telegram.Animation`): Optional. Message is an animation, information
about the animation. For backward compatibility, when this field is set, the document
field will also be set.
game (:class:`telegram.Game`): Optional. Message is a game, information about the game.
photo (List[:class:`telegram.PhotoSize`]): Optional. Message is a photo, available sizes
of the photo. This list is empty if the message does not contain a photo.
sticker (:class:`telegram.Sticker`): Optional. Message is a sticker, information
about the sticker.
video (:class:`telegram.Video`): Optional. Message is a video, information about the
video.
voice (:class:`telegram.Voice`): Optional. Message is a voice message, information about
the file.
video_note (:class:`telegram.VideoNote`): Optional. Message is a video note, information
about the video message.
new_chat_members (List[:class:`telegram.User`]): 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.
caption (:obj:`str`): Optional. Caption for the animation, audio, document, photo, video
or voice, 0-:tg-const:`telegram.constants.MessageLimit.CAPTION_LENGTH` characters.
contact (:class:`telegram.Contact`): Optional. Message is a shared contact, information
about the contact.
location (:class:`telegram.Location`): Optional. Message is a shared location, information
about the location.
venue (:class:`telegram.Venue`): Optional. Message is a venue, information about the
venue. For backward compatibility, when this field is set, the location field will
also be set.
left_chat_member (:class:`telegram.User`): Optional. A member was removed from the group,
information about them (this member may be the bot itself).
new_chat_title (:obj:`str`): Optional. A chat title was changed to this value.
new_chat_photo (List[:class:`telegram.PhotoSize`]): A chat photo was changed to
this value. This list is empty if the message does not contain a new chat photo.
delete_chat_photo (:obj:`bool`): Optional. The chat photo was deleted.
group_chat_created (:obj:`bool`): Optional. The group has been created.
supergroup_chat_created (:obj:`bool`): Optional. The supergroup has been created.
channel_chat_created (:obj:`bool`): Optional. The channel has been created.
delete_chat_photo (:obj:`bool`): Optional. Service message: The chat photo was deleted.
group_chat_created (:obj:`bool`): Optional. Service message: The group has been created.
supergroup_chat_created (:obj:`bool`): 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
:attr:`reply_to_message` if someone replies to a very first message in a directly
created supergroup.
channel_chat_created (:obj:`bool`): 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
:attr:`reply_to_message` if someone replies to a very first message in a channel.
message_auto_delete_timer_changed (:class:`telegram.MessageAutoDeleteTimerChanged`):
Optional. Service message: auto-delete timer settings changed in the chat.
.. versionadded:: 13.4
migrate_to_chat_id (:obj:`int`): Optional. The group has been migrated to a supergroup with
the specified identifier.
migrate_to_chat_id (:obj:`int`): Optional. The group has been migrated to a supergroup
with the specified identifier.
migrate_from_chat_id (:obj:`int`): Optional. The supergroup has been migrated from a group
with the specified identifier.
pinned_message (:class:`telegram.Message`): Optional. Specified message was pinned.
invoice (:class:`telegram.Invoice`): Optional. Information about the invoice.
successful_payment (:class:`telegram.SuccessfulPayment`): Optional. Information about the
payment.
pinned_message (:class:`telegram.Message`): Optional. Specified message was pinned. Note
that the Message object in this field will not contain further
:attr:`reply_to_message` fields even if it is itself a reply.
invoice (:class:`telegram.Invoice`): Optional. Message is an invoice for a payment,
information about the invoice.
successful_payment (:class:`telegram.SuccessfulPayment`): Optional. Message is a service
message about a successful payment, information about the payment.
connected_website (:obj:`str`): Optional. The domain name of the website on which the user
has logged in.
forward_signature (:obj:`str`): Optional. Signature of the post author for messages
forwarded from channels.
forward_sender_name (:obj:`str`): Optional. Sender's name for messages forwarded from users
who disallow adding a link to their account in forwarded messages.
forward_signature (:obj:`str`): Optional. For messages forwarded from channels, signature
of the post author if present.
author_signature (:obj:`str`): Optional. Signature of the post author for messages in
channels, or the custom title of an anonymous group administrator.
forward_sender_name (:obj:`str`): Optional. Sender's name for messages forwarded from
users who disallow adding a link to their account in forwarded messages.
passport_data (:class:`telegram.PassportData`): Optional. Telegram Passport data.
Examples:
:any:`Passport Bot <examples.passportbot>`
poll (:class:`telegram.Poll`): Optional. Message is a native poll,
information about the poll.
dice (:class:`telegram.Dice`): Optional. Message is a dice.
via_bot (:class:`telegram.User`): Optional. Bot through which the message was sent.
dice (:class:`telegram.Dice`): Optional. Message is a dice with random value.
via_bot (:class:`telegram.User`): Optional. Bot through which message was sent.
proximity_alert_triggered (:class:`telegram.ProximityAlertTriggered`): Optional. Service
message. A user in the chat triggered another user's proximity alert while sharing
Live Location.
@ -366,7 +398,8 @@ class Message(TelegramObject):
.. versionadded:: 20.0
reply_markup (:class:`telegram.InlineKeyboardMarkup`): Optional. Inline keyboard attached
to the message.
to the message. :paramref:`~telegram.InlineKeyboardButton.login_url` buttons are
represented as ordinary url buttons.
.. |custom_emoji_formatting_note| replace:: Custom emoji entities will currently be ignored
by this function. Instead, the supplied replacement for the emoji will be used.
@ -700,7 +733,7 @@ class Message(TelegramObject):
* :class:`telegram.VideoNote`
* :class:`telegram.Voice`
Otherwise :obj:`None` is returned.
Otherwise :obj:`None` is returned.
.. versionchanged:: 20.0
:attr:`dice`, :attr:`passport_data` and :attr:`poll` are now also considered to be an
@ -3086,10 +3119,11 @@ class Message(TelegramObject):
in the same way the original message was formatted.
Note:
:tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
Telegram for backward compatibility. You should use :meth:`text_markdown_v2` instead.
* :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
Telegram for backward compatibility. You should use
:meth:`text_markdown_v2` instead.
|custom_emoji_formatting_note|
* |custom_emoji_formatting_note|
Returns:
:obj:`str`: Message text with entities formatted as Markdown.
@ -3129,11 +3163,11 @@ class Message(TelegramObject):
This also formats :attr:`telegram.MessageEntity.URL` as a hyperlink.
Note:
:tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
Telegram for backward compatibility. You should use :meth:`text_markdown_v2_urled`
instead.
* :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
Telegram for backward compatibility. You should use :meth:`text_markdown_v2_urled`
instead.
|custom_emoji_formatting_note|
* |custom_emoji_formatting_note|
Returns:
:obj:`str`: Message text with entities formatted as Markdown.
@ -3173,11 +3207,11 @@ class Message(TelegramObject):
Markdown in the same way the original message was formatted.
Note:
:tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
Telegram for backward compatibility. You should use :meth:`caption_markdown_v2`
instead.
* :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
Telegram for backward compatibility. You should use :meth:`caption_markdown_v2`
instead.
|custom_emoji_formatting_note|
* |custom_emoji_formatting_note|
Returns:
:obj:`str`: Message caption with caption entities formatted as Markdown.
@ -3219,11 +3253,11 @@ class Message(TelegramObject):
Markdown. This also formats :attr:`telegram.MessageEntity.URL` as a hyperlink.
Note:
:tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
Telegram for backward compatibility. You should use :meth:`caption_markdown_v2_urled`
instead.
* :tg-const:`telegram.constants.ParseMode.MARKDOWN` is a legacy mode, retained by
Telegram for backward compatibility. You should use
:meth:`caption_markdown_v2_urled` instead.
|custom_emoji_formatting_note|
* |custom_emoji_formatting_note|
Returns:
:obj:`str`: Message caption with caption entities formatted as Markdown.

View file

@ -63,13 +63,26 @@ class MessageEntity(TelegramObject):
.. versionadded:: 20.0
Attributes:
type (:obj:`str`): Type of the entity.
type (:obj:`str`): Type of the entity. Can be :attr:`MENTION` (@username),
:attr:`HASHTAG`, :attr:`BOT_COMMAND`,
:attr:`URL`, :attr:`EMAIL`, :attr:`PHONE_NUMBER`, :attr:`BOLD` (bold text),
:attr:`ITALIC` (italic text), :attr:`STRIKETHROUGH`, :attr:`SPOILER` (spoiler message),
:attr:`CODE` (monowidth string), :attr:`PRE` (monowidth block), :attr:`TEXT_LINK` (for
clickable text URLs), :attr:`TEXT_MENTION` (for users without usernames),
:attr:`CUSTOM_EMOJI` (for inline custom emoji stickers).
.. versionadded:: 20.0
Added inline custom emoji
offset (:obj:`int`): Offset in UTF-16 code units to the start of the entity.
length (:obj:`int`): Length of the entity in UTF-16 code units.
url (:obj:`str`): Optional. Url that will be opened after user taps on the text.
url (:obj:`str`): Optional. For :attr:`TEXT_LINK` only, url that will be opened after
user taps on the text.
user (:class:`telegram.User`): Optional. The mentioned user.
language (:obj:`str`): Optional. Programming language of the entity text.
custom_emoji_id (:obj:`str`): Optional. Unique identifier of the custom emoji.
language (:obj:`str`): Optional. For :attr:`PRE` only, The programming language of
the entity text.
custom_emoji_id (:obj:`str`): Optional. For :attr:`CUSTOM_EMOJI` only, unique identifier
of the custom emoji. Use :meth:`telegram.Bot.get_custom_emoji_stickers` to get full
information about the sticker.
.. versionadded:: 20.0

View file

@ -28,7 +28,8 @@ class LabeledPrice(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`label` and :attr:`amount` are equal.
.. seealso:: `Paymentbot Example <examples.paymentbot.html>`_
Examples:
:any:`Payment Bot <examples.paymentbot>`
Args:
label (:obj:`str`): Portion label.

View file

@ -33,7 +33,8 @@ class ShippingOption(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`id` is equal.
.. seealso:: `Paymentbot Example <examples.paymentbot.html>`_
Examples:
:any:`Payment Bot <examples.paymentbot>`
Args:
id (:obj:`str`): Shipping option identifier.

View file

@ -116,7 +116,8 @@ class Poll(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`id` is equal.
.. seealso:: `Pollbot Example <examples.pollbot.html>`_
Examples:
:any:`Poll Bot <examples.pollbot>`
Args:
id (:obj:`str`): Unique poll identifier.
@ -126,13 +127,17 @@ class Poll(TelegramObject):
is_anonymous (:obj:`bool`): :obj:`True`, if the poll is anonymous.
type (:obj:`str`): Poll type, currently can be :attr:`REGULAR` or :attr:`QUIZ`.
allows_multiple_answers (:obj:`bool`): :obj:`True`, if the poll allows multiple answers.
correct_option_id (:obj:`int`, optional): 0-based identifier of the correct answer option.
Available only for polls in the quiz mode, which are closed, or was sent (not
forwarded) by the bot or to the private chat with the bot.
correct_option_id (:obj:`int`, optional): A zero based identifier of the correct answer
option. Available only for closed polls in the quiz mode, which were sent
(not forwarded), by the bot or to a private chat with the bot.
explanation (:obj:`str`, optional): Text that is shown when a user chooses an incorrect
answer or taps on the lamp icon in a quiz-style poll, 0-200 characters.
explanation_entities (List[:class:`telegram.MessageEntity`], optional): Special entities
like usernames, URLs, bot commands, etc. that appear in the :attr:`explanation`.
This list is empty if the message does not contain explanation entities.
.. versionchanged:: 20.0
This attribute is now always a (possibly empty) list and never :obj:`None`.
open_period (:obj:`int`, optional): Amount of time in seconds the poll will be active
after creation.
close_date (:obj:`datetime.datetime`, optional): Point in time (Unix timestamp) when the
@ -147,9 +152,11 @@ class Poll(TelegramObject):
is_anonymous (:obj:`bool`): :obj:`True`, if the poll is anonymous.
type (:obj:`str`): Poll type, currently can be :attr:`REGULAR` or :attr:`QUIZ`.
allows_multiple_answers (:obj:`bool`): :obj:`True`, if the poll allows multiple answers.
correct_option_id (:obj:`int`): Optional. Identifier of the correct answer option.
correct_option_id (:obj:`int`, optional): A zero based identifier of the correct answer
option. Available only for closed polls in the quiz mode, which were sent
(not forwarded), by the bot or to a private chat with the bot.
explanation (:obj:`str`): Optional. Text that is shown when a user chooses an incorrect
answer or taps on the lamp icon in a quiz-style poll.
answer or taps on the lamp icon in a quiz-style poll, 0-200 characters.
explanation_entities (List[:class:`telegram.MessageEntity`]): Special entities
like usernames, URLs, bot commands, etc. that appear in the :attr:`explanation`.
This list is empty if the message does not contain explanation entities.

View file

@ -32,9 +32,12 @@ class ReplyKeyboardMarkup(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their size of :attr:`keyboard` and all the buttons are equal.
Example:
A user requests to change the bot's language, bot replies to the request with a keyboard
to select the new language. Other users in the group don't see the keyboard.
Examples:
* Example usage: A user requests to change the bot's language, bot replies to the request
with a keyboard to select the new language. Other users in the group don't see
the keyboard.
* :any:`Conversation Bot <examples.conversationbot>`
* :any:`Conversation Bot 2 <examples.conversationbot2>`
Args:
keyboard (List[List[:obj:`str` | :class:`telegram.KeyboardButton`]]): Array of button rows,

View file

@ -29,15 +29,17 @@ class ReplyKeyboardRemove(TelegramObject):
until a new keyboard is sent by a bot. An exception is made for one-time keyboards that are
hidden immediately after the user presses a button (see :class:`telegram.ReplyKeyboardMarkup`).
Example:
A user votes in a poll, bot returns confirmation message in reply to the vote and removes
the keyboard for that user, while still showing the keyboard with poll options to users who
haven't voted yet.
Note:
User will not be able to summon this keyboard; if you want to hide the keyboard from
sight but keep it accessible, use :attr:`telegram.ReplyKeyboardMarkup.one_time_keyboard`.
Examples:
* Example usage: A user votes in a poll, bot returns confirmation message in reply to
the vote and removes the keyboard for that user, while still showing the keyboard with
poll options to users who haven't voted yet.
* :any:`Conversation Bot <examples.conversationbot>`
* :any:`Conversation Bot 2 <examples.conversationbot2>`
Args:
selective (:obj:`bool`, optional): Use this parameter if you want to remove the keyboard
for specific users only. Targets:

View file

@ -37,20 +37,12 @@ Tele_co = TypeVar("Tele_co", bound="TelegramObject", covariant=True)
class TelegramObject:
"""Base class for most Telegram objects.
Objects of this type are subscriptable with strings, where ``telegram_object[attribute_name]``
is equivalent to ``telegram_object.attribute_name``. If the object does not have an attribute
with the appropriate name, a :exc:`KeyError` will be raised.
When objects of this type are pickled, the :class:`~telegram.Bot` attribute associated with the
object will be removed. However, when copying the object via :func:`copy.deepcopy`, the copy
will have the *same* bot instance associated with it, i.e::
assert telegram_object.get_bot() is copy.deepcopy(telegram_object).get_bot()
Objects of this type are subscriptable with strings. See :meth:`__getitem__` for more details.
The :mod:`pickle` and :func:`~copy.deepcopy` behavior of objects of this type are defined by
:meth:`__getstate__`, :meth:`__setstate__` and :meth:`__deepcopy__`.
.. versionchanged:: 20.0
* ``telegram_object['from']`` will look up the key ``from_user``. This is to account for
special cases like :attr:`Message.from_user` that deviate from the official Bot API.
* Removed argument and attribute ``bot`` for several subclasses. Use
:meth:`set_bot` and :meth:`get_bot` instead.
* Removed the possibility to pass arbitrary keyword arguments for several subclasses.
@ -108,7 +100,7 @@ class TelegramObject:
def __repr__(self) -> str:
"""Gives a string representation of this object in the form
``ClassName(attr_1=value_1, attr_2=value_2, ...)``, where attributes are omitted if they
have the value :obj:`None` or empty instances of :class:`collections.abc.Sized` (e.g.
have the value :obj:`None` or are empty instances of :class:`collections.abc.Sized` (e.g.
:class:`list`, :class:`dict`, :class:`set`, :class:`str`, etc.).
As this class doesn't implement :meth:`object.__str__`, the default implementation
@ -141,6 +133,30 @@ class TelegramObject:
return f"{self.__class__.__name__}({contents})"
def __getitem__(self, item: str) -> object:
"""
Objects of this type are subscriptable with strings, where
``telegram_object["attribute_name"]`` is equivalent to ``telegram_object.attribute_name``.
Tip:
This is useful for dynamic attribute lookup, i.e. ``telegram_object[arg]`` where the
value of ``arg`` is determined at runtime.
In all other cases, it's recommended to use the dot notation instead, i.e.
``telegram_object.attribute_name``.
.. versionchanged:: 20.0
``telegram_object['from']`` will look up the key ``from_user``. This is to account for
special cases like :attr:`Message.from_user` that deviate from the official Bot API.
Args:
item (:obj:`str`): The name of the attribute to look up.
Returns:
:obj:`object`
Raises:
:exc:`KeyError`: If the object does not have an attribute with the appropriate name.
"""
if item == "from":
item = "from_user"
try:
@ -153,15 +169,28 @@ class TelegramObject:
def __getstate__(self) -> Dict[str, Union[str, object]]:
"""
This method is used for pickling. We remove the bot attribute of the object since those
are not pickable.
Overrides :meth:`object.__getstate__` to customize the pickling process of objects of this
type.
The returned state does `not` contain the :class:`telegram.Bot` instance set with
:meth:`set_bot` (if any), as it can't be pickled.
Returns:
state (Dict[:obj:`str`, :obj:`object`]): The state of the object.
"""
return self._get_attrs(include_private=True, recursive=False, remove_bot=True)
def __setstate__(self, state: dict) -> None:
"""
This method is used for unpickling. The data, which is in the form a dictionary, is
converted back into a class. Should be modified in place.
Overrides :meth:`object.__setstate__` to customize the unpickling process of objects of
this type. Modifies the object in-place.
If any data was stored in the :attr:`api_kwargs` of the pickled object, this method checks
if the class now has dedicated attributes for those keys and moves the values from
:attr:`api_kwargs` to the dedicated attributes.
This can happen, if serialized data is loaded with a new version of this library, where
the new version was updated to account for updates of the Telegram Bot API.
Args:
state (:obj:`dict`): The data to set as attributes of this object.
"""
# Make sure that we have a `_bot` attribute. This is necessary, since __getstate__ omits
# this as Bots are not pickable.
@ -172,7 +201,20 @@ class TelegramObject:
self._apply_api_kwargs()
def __deepcopy__(self: Tele_co, memodict: dict) -> Tele_co:
"""This method deepcopies the object and sets the bot on the newly created copy."""
"""
Customizes how :func:`copy.deepcopy` processes objects of this type.
The only difference to the default implementation is that the :class:`telegram.Bot`
instance set via :meth:`set_bot` (if any) is not copied, but shared between the original
and the copy, i.e.::
assert telegram_object.get_bot() is copy.deepcopy(telegram_object).get_bot()
Args:
memodict (:obj:`dict`): A dictionary that maps objects to their copies.
Returns:
:obj:`telegram.TelegramObject`: The copied object.
"""
bot = self._bot # Save bot so we can set it after copying
self.set_bot(None) # set to None so it is not deepcopied
cls = self.__class__
@ -387,6 +429,26 @@ class TelegramObject:
self._bot = bot
def __eq__(self, other: object) -> bool:
"""Compares this object with :paramref:`other` in terms of equality.
If this object and :paramref:`other` are `not` objects of the same class,
this comparison will fall back to Python's default implementation of :meth:`object.__eq__`.
Otherwise, both objects may be compared in terms of equality, if the corresponding
subclass of :class:`TelegramObject` has defined a set of attributes to compare and
the objects are considered to be equal, if all of these attributes are equal.
If the subclass has not defined a set of attributes to compare, a warning will be issued.
Tip:
If instances of a class in the :mod:`telegram` module are comparable in terms of
equality, the documentation of the class will state the attributes that will be used
for this comparison.
Args:
other (:obj:`object`): The object to compare with.
Returns:
:obj:`bool`
"""
if isinstance(other, self.__class__):
if not self._id_attrs:
warn(
@ -404,6 +466,12 @@ class TelegramObject:
return super().__eq__(other)
def __hash__(self) -> int:
"""Builds a hash value for this object such that the hash of two objects is equal if and
only if the objects are equal in terms of :meth:`__eq__`.
Returns:
:obj:`int`
"""
if self._id_attrs:
return hash((self.__class__, self._id_attrs))
return super().__hash__()

View file

@ -46,6 +46,9 @@ class Update(TelegramObject):
Note:
At most one of the optional parameters can be present in any given update.
.. seealso:: `Your First Bot <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Extensions--Your-first-Bot>`_
Args:
update_id (:obj:`int`): The update's unique identifier. Update identifiers start from a
certain positive number and increase sequentially. This ID becomes especially handy if
@ -104,6 +107,9 @@ class Update(TelegramObject):
chosen_inline_result (:class:`telegram.ChosenInlineResult`): Optional. The result of an
inline query that was chosen by a user.
callback_query (:class:`telegram.CallbackQuery`): Optional. New incoming callback query.
Examples:
:any:`Arbitrary Callback Data Bot <examples.arbitrarycallbackdatabot>`
shipping_query (:class:`telegram.ShippingQuery`): Optional. New incoming shipping query.
pre_checkout_query (:class:`telegram.PreCheckoutQuery`): Optional. New incoming
pre-checkout query.

View file

@ -28,7 +28,8 @@ class WebAppData(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`data` and :attr:`button_text` are equal.
.. seealso:: `Webappbot Example <examples.webappbot.html>`_
Examples:
:any:`Webapp Bot <examples.webappbot>`
.. versionadded:: 20.0
@ -45,8 +46,7 @@ class WebAppData(TelegramObject):
button, from which the Web App was opened.
Warning:
Be aware that a bad client can send
arbitrary data in this field.
Be aware that a bad client can send arbitrary data in this field.
"""
__slots__ = ("data", "button_text")

View file

@ -29,7 +29,8 @@ class WebAppInfo(TelegramObject):
Objects of this class are comparable in terms of equality. Two objects of this class are
considered equal, if their :attr:`url` are equal.
.. seealso:: `Webappbot Example <examples.webappbot.html>`_
Examples:
:any:`Webapp Bot <examples.webappbot>`
.. versionadded:: 20.0

View file

@ -62,14 +62,17 @@ class WebhookInfo(TelegramObject):
.. versionadded:: 20.0
Attributes:
url (:obj:`str`): Webhook URL.
has_custom_certificate (:obj:`bool`): If a custom certificate was provided for webhook.
url (:obj:`str`): Webhook URL, may be empty if webhook is not set up.
has_custom_certificate (:obj:`bool`): :obj:`True`, if a custom certificate was provided for
webhook certificate checks.
pending_update_count (:obj:`int`): Number of updates awaiting delivery.
ip_address (:obj:`str`): Optional. Currently used webhook IP address.
last_error_date (:obj:`int`): Optional. Unix time for the most recent error that happened.
last_error_message (:obj:`str`): Optional. Error message in human-readable format.
last_error_date (:obj:`int`): Optional. Unix time for the most recent error that happened
when trying to deliver an update via webhook.
last_error_message (:obj:`str`): Optional. Error message in human-readable format for the
most recent error that happened when trying to deliver an update via webhook.
max_connections (:obj:`int`): Optional. Maximum allowed number of simultaneous HTTPS
connections.
connections to the webhook for update delivery.
allowed_updates (List[:obj:`str`]): Optional. A list of update types the bot is subscribed
to. Defaults to all update types, except :attr:`telegram.Update.chat_member`.
last_synchronization_error_date (:obj:`int`): Optional. Unix time of the most recent error

View file

@ -56,7 +56,12 @@ def _lstrip_str(in_s: str, lstr: str) -> str:
class TelegramError(Exception):
"""Base class for Telegram errors."""
"""
Base class for Telegram errors.
.. seealso:: `Exceptions, Warnings and Logging <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Exceptions%2C-Warnings-and-Logging>`_
"""
__slots__ = ("message",)
@ -84,6 +89,9 @@ class TelegramError(Exception):
class Forbidden(TelegramError):
"""Raised when the bot has not enough rights to perform the requested action.
Examples:
:any:`Raw API Bot <examples.rawapibot>`
.. versionchanged:: 20.0
This class was previously named ``Unauthorized``.
"""
@ -107,7 +115,11 @@ class InvalidToken(TelegramError):
class NetworkError(TelegramError):
"""Base class for exceptions due to networking errors."""
"""Base class for exceptions due to networking errors.
Examples:
:any:`Raw API Bot <examples.rawapibot>`
"""
__slots__ = ()
@ -137,6 +149,10 @@ class ChatMigrated(TelegramError):
"""
Raised when the requested group chat migrated to supergroup and has a new chat id.
.. seealso:: `Storing Bot, User and Chat Related Data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Storing-bot%2C-user-and-\
chat-related-data>`_,
Args:
new_chat_id (:obj:`int`): The new chat id of the group.

View file

@ -51,7 +51,7 @@ else:
class AIORateLimiter(BaseRateLimiter[int]):
"""
Implementation of :class:`~telegram.ext.BaseRateLimiter` using the library
`aiolimiter <https://aiolimiter.readthedocs.io/>`_.
`aiolimiter <https://aiolimiter.readthedocs.io/en/stable>`_.
Important:
If you want to use this class, you must install PTB with the optional requirement
@ -90,6 +90,9 @@ class AIORateLimiter(BaseRateLimiter[int]):
welcome you to implement your own subclass of :class:`~telegram.ext.BaseRateLimiter`.
Feel free to check out the source code of this class for inspiration.
.. seealso:: `Avoiding Flood Limits <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Avoiding-flood-limits>`_
.. versionadded:: 20.0
Args:

View file

@ -133,6 +133,14 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
finally:
await application.shutdown()
Examples:
:any:`Echo Bot <examples.echobot>`
.. seealso:: `Your First Bot <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Extensions--Your-first-Bot>`_,
`Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_
.. versionchanged:: 20.0
* Initialization is now done through the :class:`telegram.ext.ApplicationBuilder`.
@ -146,19 +154,27 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
job_queue (:class:`telegram.ext.JobQueue`): Optional. The :class:`telegram.ext.JobQueue`
instance to pass onto handler callbacks.
chat_data (:obj:`types.MappingProxyType`): A dictionary handlers can use to store data for
the chat.
the chat. For each integer chat id, the corresponding value of this mapping is
available as :attr:`telegram.ext.CallbackContext.chat_data` in handler callbacks for
updates from that chat.
.. versionchanged:: 20.0
:attr:`chat_data` is now read-only
:attr:`chat_data` is now read-only. Note that the values of the mapping are still
mutable, i.e. editing ``context.chat_data`` within a handler callback is possible
(and encouraged), but editing the mapping ``application.chat_data`` itself is not.
.. tip::
Manually modifying :attr:`chat_data` is almost never needed and unadvisable.
user_data (:obj:`types.MappingProxyType`): A dictionary handlers can use to store data for
the user.
the user. For each integer user id, the corresponding value of this mapping is
available as :attr:`telegram.ext.CallbackContext.user_data` in handler callbacks for
updates from that user.
.. versionchanged:: 20.0
:attr:`user_data` is now read-only
:attr:`user_data` is now read-only. Note that the values of the mapping are still
mutable, i.e. editing ``context.user_data`` within a handler callback is possible
(and encouraged), but editing the mapping ``application.user_data`` itself is not.
.. tip::
Manually modifying :attr:`user_data` is almost never needed and unadvisable.
@ -315,6 +331,9 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
def concurrent_updates(self) -> int:
""":obj:`int`: The number of concurrent updates that will be processed in parallel. A
value of ``0`` indicates updates are *not* being processed concurrently.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
"""
return self._concurrent_updates
@ -584,9 +603,12 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
If :attr:`post_shutdown` is set, it will be called after both :meth:`shutdown`
and :meth:`telegram.ext.Updater.shutdown`.
.. include:: inclusions/application_run_tip.rst
.. seealso::
:meth:`initialize`, :meth:`start`, :meth:`stop`, :meth:`shutdown`
:meth:`telegram.ext.Updater.start_polling`, :meth:`run_webhook`
:meth:`telegram.ext.Updater.start_polling`, :meth:`telegram.ext.Updater.stop`,
:meth:`run_webhook`
Args:
poll_interval (:obj:`float`, optional): Time to wait between polling updates from
@ -677,7 +699,7 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
secret_token: str = None,
) -> None:
"""Convenience method that takes care of initializing and starting the app,
polling updates from Telegram using :meth:`telegram.ext.Updater.start_webhook` and
listening for updates from Telegram using :meth:`telegram.ext.Updater.start_webhook` and
a graceful shutdown of the app on exit.
The app will shut down when :exc:`KeyboardInterrupt` or :exc:`SystemExit` is raised.
@ -705,9 +727,13 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
pip install python-telegram-bot[webhooks]
.. include:: inclusions/application_run_tip.rst
.. seealso::
:meth:`initialize`, :meth:`start`, :meth:`stop`, :meth:`shutdown`
:meth:`telegram.ext.Updater.start_webhook`, :meth:`run_polling`
:meth:`telegram.ext.Updater.start_webhook`, :meth:`telegram.ext.Updater.stop`,
:meth:`run_polling`,
`Webhooks <https://github.com/python-telegram-bot/python-telegram-bot/wiki/Webhooks>`_
Args:
listen (:obj:`str`, optional): IP-Address to listen on. Defaults to
@ -852,6 +878,9 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
* If the application is currently running, tasks created by this method will be
awaited with :meth:`stop`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Args:
coroutine (:term:`coroutine function`): The coroutine to run as task.
update (:obj:`object`, optional): If set, will be passed to :meth:`process_error`
@ -968,6 +997,9 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
"""Processes a single update and marks the update to be updated by the persistence later.
Exceptions raised by handler callbacks will be processed by :meth:`process_update`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
.. versionchanged:: 20.0
Persistence is now updated in an interval set by
:attr:`telegram.ext.BasePersistence.update_interval`.
@ -1207,6 +1239,10 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
to the asynchronous nature of these features. Please make sure that your program can
avoid or handle such situations.
.. seealso:: `Storing Bot, User and Chat Related Data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Storing-bot%2C-user-and-\
chat-related-data>`_,
Args:
message (:class:`telegram.Message`, optional): A message with either
:attr:`~telegram.Message.migrate_from_chat_id` or
@ -1423,7 +1459,11 @@ class Application(Generic[BT, CCT, UD, CD, BD, JQ], AbstractAsyncContextManager)
Note:
Attempts to add the same callback multiple times will be ignored.
.. seealso:: `Errorhandler Example <examples.errorhandlerbot.py>`_
Examples:
:any:`Errorhandler Bot <examples.errorhandlerbot>`
.. seealso:: `Exceptions, Warnings and Logging <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Exceptions%2C-Warnings-and-Logging>`_
Args:
callback (:term:`coroutine function`): The callback function for this error handler.

View file

@ -112,6 +112,11 @@ class ApplicationBuilder(Generic[BT, CCT, UD, CD, BD, JQ]):
* Unless a custom :class:`telegram.Bot` instance is set via :meth:`bot`, :meth:`build` will
use :class:`telegram.ext.ExtBot` for the bot.
.. seealso:: `Your First Bot <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Extensions--Your-first-Bot>`_,
`Builder Pattern for Application <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Builder-Pattern>`_
.. _`builder pattern`: https://en.wikipedia.org/wiki/Builder_pattern
"""
@ -729,8 +734,8 @@ class ApplicationBuilder(Generic[BT, CCT, UD, CD, BD, JQ]):
pip install python-telegram-bot[callback-data]
.. seealso:: `Arbitrary callback_data <https://github.com/python-telegram-bot\
/python-telegram-bot/wiki/Arbitrary-callback_data>`_,
.. seealso:: `Arbitrary callback_data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Arbitrary-callback_data>`_,
:any:`examples.arbitrarycallbackdatabot`
Args:

View file

@ -111,6 +111,11 @@ class BasePersistence(Generic[UD, CD, BD], ABC):
type of the argument of :meth:`refresh_bot_data` and the return value of
:meth:`get_bot_data`.
.. seealso:: `Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_,
`Making Your Bot Persistent <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Making-your-bot-persistent>`_
.. versionchanged:: 20.0
* The parameters and attributes ``store_*_data`` were replaced by :attr:`store_data`.

View file

@ -37,6 +37,11 @@ class BaseRateLimiter(ABC, Generic[RLARGS]):
Hint:
Requests to :meth:`~telegram.Bot.get_updates` are never rate limited.
.. seealso:: `Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_,
`Avoiding Flood Limits <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Avoiding-flood-limits>`_
.. versionadded:: 20.0
"""

View file

@ -66,7 +66,13 @@ class CallbackContext(Generic[BT, UD, CD, BD]):
3. The type of :attr:`chat_data` (if :attr:`chat_data` is not :obj:`None`).
4. The type of :attr:`bot_data` (if :attr:`bot_data` is not :obj:`None`).
.. seealso:: :attr:`telegram.ext.ContextTypes.DEFAULT_TYPE`
Examples:
* :any:`Context Types Bot <examples.contexttypesbot>`
* :any:`Custom Webhook Bot <examples.customwebhookbot>`
.. seealso:: :attr:`telegram.ext.ContextTypes.DEFAULT_TYPE`,
`Job Queue <https://github.com/python-telegram-bot/
python-telegram-bot/wiki/Extensions-%E2%80%93-JobQueue>`_
Args:
application (:class:`telegram.ext.Application`): The application associated with this
@ -138,6 +144,10 @@ class CallbackContext(Generic[BT, UD, CD, BD]):
def bot_data(self) -> BD:
""":obj:`ContextTypes.bot_data`: Optional. An object that can be used to keep any data in.
For each update it will be the same :attr:`ContextTypes.bot_data`. Defaults to :obj:`dict`.
.. seealso:: `Storing Bot, User and Chat Related Data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Storing-bot%2C-user-and-\
chat-related-data>`_,
"""
return self.application.bot_data
@ -159,6 +169,10 @@ class CallbackContext(Generic[BT, UD, CD, BD]):
<https://github.com/python-telegram-bot/python-telegram-bot/wiki/
Storing-bot,-user-and-chat-related-data#chat-migration>`_.
.. seealso:: `Storing Bot, User and Chat Related Data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Storing-bot%2C-user-and-\
chat-related-data>`_,
.. versionchanged:: 20.0
The chat data is now also present in error handlers if the error is caused by a job.
"""
@ -178,6 +192,10 @@ class CallbackContext(Generic[BT, UD, CD, BD]):
For each update from the same user it will be the same :obj:`ContextTypes.user_data`.
Defaults to :obj:`dict`.
.. seealso:: `Storing Bot, User and Chat Related Data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Storing-bot%2C-user-and\
-chat-related-data>`_,
.. versionchanged:: 20.0
The user data is now also present in error handlers if the error is caused by a job.
"""
@ -225,6 +243,9 @@ class CallbackContext(Generic[BT, UD, CD, BD]):
Will *not* raise exceptions in case the data is not found in the cache.
*Will* raise :exc:`KeyError` in case the callback query can not be found in the cache.
.. seealso:: `Arbitrary callback_data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Arbitrary-callback_data>`_
Args:
callback_query (:class:`telegram.CallbackQuery`): The callback query.
@ -365,6 +386,8 @@ class CallbackContext(Generic[BT, UD, CD, BD]):
:class:`telegram.ext.JobQueue`: The :class:`JobQueue` used by the
:class:`telegram.ext.Application`.
.. seealso:: `Job Queue <https://github.com/python-telegram-bot/
python-telegram-bot/wiki/Extensions-%E2%80%93-JobQueue>`_
"""
return self._application.job_queue

View file

@ -44,6 +44,12 @@ class InvalidCallbackData(TelegramError):
"""
Raised when the received callback data has been tempered with or deleted from cache.
Examples:
:any:`Arbitrary Callback Data Bot <examples.arbitrarycallbackdatabot>`
.. seealso:: `Arbitrary callback_data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Arbitrary-callback_data>`_
.. versionadded:: 13.6
Args:
@ -93,8 +99,8 @@ class CallbackDataCache:
"""A custom cache for storing the callback data of a :class:`telegram.ext.ExtBot`. Internally,
it keeps two mappings with fixed maximum size:
* One for mapping the data received in callback queries to the cached objects
* One for mapping the IDs of received callback queries to the cached objects
* One for mapping the data received in callback queries to the cached objects
* One for mapping the IDs of received callback queries to the cached objects
The second mapping allows to manually drop data that has been cached for keyboards of messages
sent via inline mode.
@ -108,10 +114,14 @@ class CallbackDataCache:
pip install python-telegram-bot[callback-data]
Examples:
:any:`Arbitrary Callback Data Bot <examples.arbitrarycallbackdatabot>`
.. seealso:: :attr:`telegram.ext.ExtBot.callback_data_cache`,
`Arbitrary callback_data <https://github.com/python-telegram-bot/
python-telegram-bot/wiki/Arbitrary-callback_data>`_,
Arbitrary Callback Data Example <examples.arbitrarycallbackdatabot.html>
`Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_,
`Arbitrary callback_data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Arbitrary-callback_data>`_
.. versionadded:: 13.6

View file

@ -81,12 +81,18 @@ class CallbackQueryHandler(BaseHandler[Update, CCT]):
If :attr:`telegram.CallbackQuery.data` is :obj:`None`, the
:class:`telegram.CallbackQuery` update will not be handled.
.. seealso:: `Arbitrary callback_data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Arbitrary-callback_data>`_
.. versionchanged:: 13.6
Added support for arbitrary callback data.
block (:obj:`bool`, optional): Determines whether the return value of the callback should
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
callback (:term:`coroutine function`): The callback function for this handler.
pattern (:func:`re.Pattern <re.compile>` | :obj:`callable` | :obj:`type`): Optional.

View file

@ -66,6 +66,9 @@ class ChatJoinRequestHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
callback (:term:`coroutine function`): The callback function for this handler.
block (:obj:`bool`): Determines whether the callback will run in a blocking way..

View file

@ -35,7 +35,8 @@ class ChatMemberHandler(BaseHandler[Update, CCT]):
When setting :paramref:`block` to :obj:`False`, you cannot rely on adding custom
attributes to :class:`telegram.ext.CallbackContext`. See its docs for more info.
.. seealso:: `Chat Member Example <examples.chatmemberbot.html>`_
Examples:
:any:`Chat Member Bot <examples.chatmemberbot>`
.. versionadded:: 13.4
@ -56,6 +57,9 @@ class ChatMemberHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
callback (:term:`coroutine function`): The callback function for this handler.
chat_member_types (:obj:`int`, optional): Specifies if this handler should handle

View file

@ -52,6 +52,9 @@ class ChosenInlineResultHandler(BaseHandler[Update, CCT]):
block (:obj:`bool`, optional): Determines whether the return value of the callback should
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
pattern (:obj:`str` | :func:`re.Pattern <re.compile>`, optional): Regex pattern. If not
:obj:`None`, :func:`re.match`
is used on :attr:`telegram.ChosenInlineResult.result_id` to determine if an update

View file

@ -57,6 +57,10 @@ class CommandHandler(BaseHandler[Update, CCT]):
When setting :paramref:`block` to :obj:`False`, you cannot rely on adding custom
attributes to :class:`telegram.ext.CallbackContext`. See its docs for more info.
Examples:
* :any:`Timer Bot <examples.timerbot>`
* :any:`Error Handler Bot <examples.errorhandlerbot>`
.. versionchanged:: 20.0
* Renamed the attribute ``command`` to :attr:`commands`, which now is always a
@ -83,6 +87,9 @@ class CommandHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Raises:
:exc:`ValueError`: When the command is too long or has illegal chars.

View file

@ -33,7 +33,13 @@ class ContextTypes(Generic[CCT, UD, CD, BD]):
Convenience class to gather customizable types of the :class:`telegram.ext.CallbackContext`
interface.
.. seealso:: `ContextTypes Example <examples.contexttypesbot.html>`_
Examples:
:any:`ContextTypes Bot <examples.contexttypesbot>`
.. seealso:: `Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_,
`Storing Bot, User and Chat Related Data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Storing-bot%2C-user-and-chat-related-data>`_
.. versionadded:: 13.6

View file

@ -185,10 +185,11 @@ class ConversationHandler(BaseHandler[Update, CCT]):
conversation. For an example on nested :class:`ConversationHandler` s, see
:any:`examples.nestedconversationbot`.
.. seealso:: `Conversation Example <examples.conversationbot.html>`_,
`Conversation Example 2 <examples.conversationbot2.html>`_,
`Nested Conversation Example <examples.nestedconversationbot.html>`_,
`Persistent Conversation Example <examples.persistentconversationbot.html>`_
Examples:
* :any:`Conversation Bot <examples.conversationbot>`
* :any:`Conversation Bot 2 <examples.conversationbot2>`
* :any:`Nested Conversation Bot <examples.nestedconversationbot>`
* :any:`Persistent Conversation Bot <examples.persistentconversationbot>`
Args:
entry_points (List[:class:`telegram.ext.BaseHandler`]): A list of :obj:`BaseHandler`
@ -248,6 +249,9 @@ class ConversationHandler(BaseHandler[Update, CCT]):
2. the value passed to this parameter (if any)
3. :attr:`telegram.ext.Defaults.block` (if defaults are used)
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
.. versionchanged:: 20.0
No longer overrides the handlers settings. Resolution order was changed.

View file

@ -26,6 +26,11 @@ from telegram._utils.datetime import UTC
class Defaults:
"""Convenience Class to gather all parameters with a (user defined) default value
.. seealso:: `Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_,
`Adding Defaults to Your Bot <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Adding-defaults-to-your-bot>`_
.. versionchanged:: 20.0
Removed the argument and attribute ``timeout``. Specify default timeout behavior for the
networking backend directly via :class:`telegram.ext.ApplicationBuilder` instead.

View file

@ -43,6 +43,9 @@ class DictPersistence(BasePersistence):
* This implementation of :class:`BasePersistence` does not handle data that cannot be
serialized by :func:`json.dumps`.
.. seealso:: `Making Your Bot Persistent <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Making-your-bot-persistent>`_
.. versionchanged:: 20.0
The parameters and attributes ``store_*_data`` were replaced by :attr:`store_data`.

View file

@ -118,9 +118,11 @@ class ExtBot(Bot, Generic[RLARGS]):
* The method :meth:`~telegram.Bot.get_updates` is the only method that does not have the
additional argument, as this method will never be rate limited.
.. seealso:: `Arbitrary Callback Example <examples.arbitrarycallbackdatabot.html>`_,
`Arbitrary callback_data <https://github.com/python-telegram-bot/
python-telegram-bot/wiki/Arbitrary-callback_data>`_
Examples:
:any:`Arbitrary Callback Data Bot <examples.arbitrarycallbackdatabot>`
.. seealso:: `Arbitrary callback_data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Arbitrary-callback_data>`_
.. versionadded:: 13.6
@ -134,9 +136,11 @@ class ExtBot(Bot, Generic[RLARGS]):
be used if not set explicitly in the bot methods.
arbitrary_callback_data (:obj:`bool` | :obj:`int`, optional): Whether to
allow arbitrary objects as callback data for :class:`telegram.InlineKeyboardButton`.
Pass an integer to specify the maximum number of objects cached in memory. For more
details, please see our `wiki <https://github.com/python-telegram-bot\
/python-telegram-bot/wiki/Arbitrary-callback_data>`_. Defaults to :obj:`False`.
Pass an integer to specify the maximum number of objects cached in memory.
Defaults to :obj:`False`.
.. seealso:: `Arbitrary callback_data <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Arbitrary-callback_data>`_
rate_limiter (:class:`telegram.ext.BaseRateLimiter`, optional): A rate limiter to use for
limiting the number of requests made by the bot per time interval.
@ -226,6 +230,9 @@ class ExtBot(Bot, Generic[RLARGS]):
""":class:`telegram.ext.CallbackDataCache`: Optional. The cache for
objects passed as callback data for :class:`telegram.InlineKeyboardButton`.
Examples:
:any:`Arbitrary Callback Data Bot <examples.arbitrarycallbackdatabot>`
.. versionchanged:: 20.0
* This property is now read-only.
* This property is now optional and can be :obj:`None` if

View file

@ -54,6 +54,9 @@ class BaseHandler(Generic[UT, CCT], ABC):
also used for the mentioned method arguments. That way, a type checker can check whether
this handler fits the definition of the :class:`~Application`.
.. seealso:: `Types of Handlers <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Types-of-Handlers>`_
.. versionchanged:: 20.0
* The attribute ``run_async`` is now :paramref:`block`.
@ -72,6 +75,9 @@ class BaseHandler(Generic[UT, CCT], ABC):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
callback (:term:`coroutine function`): The callback function for this handler.
block (:obj:`bool`): Determines whether the callback will run in a blocking way..

View file

@ -46,7 +46,9 @@ class InlineQueryHandler(BaseHandler[Update, CCT]):
chats and may not be set for inline queries coming from third-party clients. These
updates won't be handled, if :attr:`chat_types` is passed.
.. seealso:: `Inlinebot Example <examples.inlinebot.html>`_
Examples:
:any:`Inline Bot <examples.inlinebot>`
Args:
callback (:term:`coroutine function`): The callback function for this handler. Will be
@ -63,6 +65,9 @@ class InlineQueryHandler(BaseHandler[Update, CCT]):
block (:obj:`bool`, optional): Determines whether the return value of the callback should
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
chat_types (List[:obj:`str`], optional): List of allowed chat types. If passed, will only
handle inline queries with the appropriate :attr:`telegram.InlineQuery.chat_type`.

View file

@ -53,9 +53,13 @@ class JobQueue:
pip install python-telegram-bot[job-queue]
Examples:
:any:`Timer Bot <examples.timerbot>`
.. seealso:: :attr:`telegram.ext.Application.job_queue`,
:attr:`telegram.ext.CallbackContext.job_queue`,
`Timerbot Example <examples.timerbot.html>`_,
`Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_,
`Job Queue <https://github.com/python-telegram-bot/
python-telegram-bot/wiki/Extensions-%E2%80%93-JobQueue>`_
@ -639,6 +643,9 @@ class Job:
This class should not be instantiated manually.
Use the methods of :class:`telegram.ext.JobQueue` to schedule jobs.
.. seealso:: `Job Queue <https://github.com/python-telegram-bot/
python-telegram-bot/wiki/Extensions-%E2%80%93-JobQueue>`_
.. versionchanged:: 20.0
* Removed argument and attribute ``job_queue``.

View file

@ -49,6 +49,9 @@ class MessageHandler(BaseHandler[Update, CCT]):
:attr:`telegram.Update.channel_post` and :attr:`telegram.Update.edited_channel_post`.
If you don't want or need any of those pass ``~filters.UpdateType.*`` in the filter
argument.
.. seealso:: `Advanced Filters <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Extensions--Advanced-Filters>`_
callback (:term:`coroutine function`): The callback function for this handler. Will be
called when :meth:`check_update` has determined that an update should be processed by
this handler. Callback signature::
@ -61,6 +64,9 @@ class MessageHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
filters (:class:`telegram.ext.filters.BaseFilter`): Only allow updates with these Filters.
See :mod:`telegram.ext.filters` for a full list of all available filters.

View file

@ -130,6 +130,12 @@ class PicklePersistence(BasePersistence[UD, CD, BD]):
:attr:`~BasePersistence.bot` will be replaced by a placeholder before pickling and
:attr:`~BasePersistence.bot` will be inserted back when loading the data.
Examples:
:any:`Persistent Conversation Bot <examples.persistentconversationbot>`
.. seealso:: `Making Your Bot Persistent <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Making-your-bot-persistent>`_
.. versionchanged:: 20.0
* The parameters and attributes ``store_*_data`` were replaced by :attr:`store_data`.

View file

@ -32,7 +32,8 @@ class PollAnswerHandler(BaseHandler[Update, CCT]):
When setting :paramref:`block` to :obj:`False`, you cannot rely on adding custom
attributes to :class:`telegram.ext.CallbackContext`. See its docs for more info.
.. seealso:: `Pollbot EXample <examples.pollbot.html>`_
Examples:
:any:`Poll Bot <examples.pollbot>`
Args:
callback (:term:`coroutine function`): The callback function for this handler. Will be
@ -47,6 +48,9 @@ class PollAnswerHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
callback (:term:`coroutine function`): The callback function for this handler.
block (:obj:`bool`): Determines whether the callback will run in a blocking way..

View file

@ -32,7 +32,8 @@ class PollHandler(BaseHandler[Update, CCT]):
When setting :paramref:`block` to :obj:`False`, you cannot rely on adding custom
attributes to :class:`telegram.ext.CallbackContext`. See its docs for more info.
.. seealso:: `Pollbot Example <examples.pollbot.html>`_
Examples:
:any:`Poll Bot <examples.pollbot>`
Args:
callback (:term:`coroutine function`): The callback function for this handler. Will be
@ -47,6 +48,9 @@ class PollHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
callback (:term:`coroutine function`): The callback function for this handler.
block (:obj:`bool`): Determines whether the callback will run in a blocking way..

View file

@ -31,7 +31,8 @@ class PreCheckoutQueryHandler(BaseHandler[Update, CCT]):
When setting :paramref:`block` to :obj:`False`, you cannot rely on adding custom
attributes to :class:`telegram.ext.CallbackContext`. See its docs for more info.
.. seealso:: `Paymentbot Example <examples.paymentbot.html>`_
Examples:
:any:`Payment Bot <examples.paymentbot>`
Args:
callback (:term:`coroutine function`): The callback function for this handler. Will be
@ -46,6 +47,9 @@ class PreCheckoutQueryHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
callback (:term:`coroutine function`): The callback function for this handler.
block (:obj:`bool`): Determines whether the callback will run in a blocking way..

View file

@ -105,6 +105,9 @@ class PrefixHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
commands (FrozenSet[:obj:`str`]): The commands that this handler will listen for, i.e. the
combinations of :paramref:`prefix` and :paramref:`command`.

View file

@ -31,7 +31,8 @@ class ShippingQueryHandler(BaseHandler[Update, CCT]):
When setting :paramref:`block` to :obj:`False`, you cannot rely on adding custom
attributes to :class:`telegram.ext.CallbackContext`. See its docs for more info.
.. seealso:: `Paymentbot Example <examples.paymentbot.html>`_
Examples:
:any:`Payment Bot <examples.paymentbot>`
Args:
callback (:term:`coroutine function`): The callback function for this handler. Will be
@ -46,6 +47,9 @@ class ShippingQueryHandler(BaseHandler[Update, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
callback (:term:`coroutine function`): The callback function for this handler.
block (:obj:`bool`): Determines whether the callback will run in a blocking way..

View file

@ -57,6 +57,9 @@ class StringCommandHandler(BaseHandler[str, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
command (:obj:`str`): The command this handler should listen for.
callback (:term:`coroutine function`): The callback function for this handler.

View file

@ -60,6 +60,9 @@ class StringRegexHandler(BaseHandler[str, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
pattern (:obj:`str` | :func:`re.Pattern <re.compile>`): The regex pattern.
callback (:term:`coroutine function`): The callback function for this handler.

View file

@ -53,6 +53,9 @@ class TypeHandler(BaseHandler[UT, CCT]):
be awaited before processing the next handler in
:meth:`telegram.ext.Application.process_update`. Defaults to :obj:`True`.
.. seealso:: `Concurrency <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Concurrency>`_
Attributes:
type (:external:class:`type`): The :external:class:`type` of updates this handler should
process.

View file

@ -65,6 +65,11 @@ class Updater(AbstractAsyncContextManager):
finally:
await updater.shutdown()
.. seealso:: `Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_,
`Builder Pattern <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Builder-Pattern>`_
.. versionchanged:: 20.0
* Removed argument and attribute ``user_sig_handler``
@ -392,6 +397,9 @@ class Updater(AbstractAsyncContextManager):
pip install python-telegram-bot[webhooks]
.. seealso:: `Webhooks <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Webhooks>`_
.. versionchanged:: 13.4
:meth:`start_webhook` now *always* calls :meth:`telegram.Bot.set_webhook`, so pass
``webhook_url`` instead of calling ``updater.bot.set_webhook(webhook_url)`` manually.

View file

@ -28,11 +28,11 @@ This module contains filters for use with :class:`telegram.ext.MessageHandler`,
:mod:`~telegram.ext.filters` module.
#. The names of all filters has been updated:
* Filter classes which are ready for use, e.g ``Filters.all`` are now capitalized, e.g
``filters.ALL``.
* Filters which need to be initialized are now in CamelCase. E.g. ``filters.User(...)``.
* Filters which do both (like ``Filters.text``) are now split as ready-to-use version
``filters.TEXT`` and class version ``filters.Text(...)``.
* Filter classes which are ready for use, e.g ``Filters.all`` are now capitalized, e.g
``filters.ALL``.
* Filters which need to be initialized are now in CamelCase. E.g. ``filters.User(...)``.
* Filters which do both (like ``Filters.text``) are now split as ready-to-use version
``filters.TEXT`` and class version ``filters.Text(...)``.
"""
@ -231,6 +231,9 @@ class MessageFilter(BaseFilter):
Please see :class:`BaseFilter` for details on how to create custom filters.
.. seealso:: `Advanced Filters <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Extensions--Advanced-Filters>`_
Attributes:
name (:obj:`str`): Name for this filter. Defaults to the type of filter.
data_filter (:obj:`bool`): Whether this filter is a data filter. A data filter should
@ -1527,6 +1530,9 @@ class Regex(MessageFilter):
With a :attr:`telegram.Message.text` of `x`, will only ever return the matches for the
first filter, since the second one is never evaluated.
.. seealso:: `Types of Handlers <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Types-of-Handlers>`_
Args:
pattern (:obj:`str` | :func:`re.Pattern <re.compile>`): The regex pattern.
"""

View file

@ -72,6 +72,8 @@ def escape_markdown(text: str, version: int = 1, entity_type: str = None) -> str
def mention_html(user_id: Union[int, str], name: str) -> str:
"""
Helper function to create a user mention as HTML tag.
Args:
user_id (:obj:`int`): The user's id which you want to mention.
name (:obj:`str`): The name the mention is showing.
@ -84,6 +86,8 @@ def mention_html(user_id: Union[int, str], name: str) -> str:
def mention_markdown(user_id: Union[int, str], name: str, version: int = 1) -> str:
"""
Helper function to create a user mention in Markdown syntax.
Args:
user_id (:obj:`int`): The user's id which you want to mention.
name (:obj:`str`): The name the mention is showing.
@ -110,7 +114,7 @@ def effective_message_type(entity: Union["Message", "Update"]) -> Optional[str]:
Returns:
:obj:`str` | :obj:`None`: One of :class:`telegram.constants.MessageType` if the entity
contains a message that matches one of those types. :obj:`None` otherwise.
contains a message that matches one of those types. :obj:`None` otherwise.
"""
# Importing on file-level yields cyclic Import Errors
@ -146,19 +150,18 @@ def create_deep_linked_url(bot_username: str, payload: str = None, group: bool =
``CommandHandler("start", callback, filters=filters.Regex('payload'))``
Examples:
``create_deep_linked_url(bot.get_me().username, "some-params")``
.. seealso:: `Deeplinking Example <examples.deeplinking.html>`_
* ``create_deep_linked_url(bot.get_me().username, "some-params")``
* :any:`Deep Linking <examples.deeplinking>`
Args:
bot_username (:obj:`str`): The username to link to
payload (:obj:`str`, optional): Parameters to encode in the created URL
bot_username (:obj:`str`): The username to link to.
payload (:obj:`str`, optional): Parameters to encode in the created URL.
group (:obj:`bool`, optional): If :obj:`True` the user is prompted to select a group to
add the bot to. If :obj:`False`, opens a one-on-one conversation with the bot.
Defaults to :obj:`False`.
Returns:
:obj:`str`: An URL to start the bot with specific parameters
:obj:`str`: An URL to start the bot with specific parameters.
"""
if bot_username is None or len(bot_username) <= 3:
raise ValueError("You must provide a valid bot_username.")

View file

@ -73,6 +73,11 @@ class BaseRequest(
To use a custom library for this, you can override :meth:`parse_json_payload` and implement
custom logic to encode the keys of :attr:`telegram.request.RequestData.parameters`.
.. seealso:: `Architecture Overview <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Architecture>`_,
`Builder Pattern <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Builder-Pattern>`_
.. versionadded:: 20.0
"""

View file

@ -28,6 +28,9 @@ class PTBUserWarning(UserWarning):
"""
Custom user warning class used for warnings in this library.
.. seealso:: `Exceptions, Warnings and Logging <https://github.com/\
python-telegram-bot/python-telegram-bot/wiki/Exceptions%2C-Warnings-and-Logging>`_
.. versionadded:: 20.0
"""