Merge branch 'dev-3.x'

This commit is contained in:
JRoot Junior 2026-04-04 01:55:12 +03:00
commit 288b95fd74
No known key found for this signature in database
GPG key ID: 738964250D5FF6E2
114 changed files with 3142 additions and 339 deletions

View file

@ -1 +1 @@
9.5 9.6

View file

@ -49,3 +49,4 @@ extract:
- reply_to_checklist_task_id - reply_to_checklist_task_id
- suggested_post_info - suggested_post_info
- is_paid_post - is_paid_post
- reply_to_poll_option_id

View file

@ -1,8 +1,8 @@
{ {
"meta": {}, "meta": {},
"group": { "group": {
"title": "Inline mode", "title": "Available methods",
"anchor": "inline-mode" "anchor": "available-methods"
}, },
"object": { "object": {
"anchor": "answerwebappquery", "anchor": "answerwebappquery",

View file

@ -0,0 +1,25 @@
{
"meta": {},
"group": {
"title": "Available methods",
"anchor": "available-methods"
},
"object": {
"anchor": "getmanagedbottoken",
"name": "getManagedBotToken",
"description": "Use this method to get the token of a managed bot. Returns the token as String on success.",
"html_description": "<p>Use this method to get the token of a managed bot. Returns the token as <em>String</em> on success.</p>",
"rst_description": "Use this method to get the token of a managed bot. Returns the token as *String* on success.",
"annotations": [
{
"type": "Integer",
"required": true,
"description": "User identifier of the managed bot whose token will be returned",
"html_description": "<td>User identifier of the managed bot whose token will be returned</td>",
"rst_description": "User identifier of the managed bot whose token will be returned\n",
"name": "user_id"
}
],
"category": "methods"
}
}

View file

@ -46,17 +46,17 @@
{ {
"type": "String", "type": "String",
"required": false, "required": false,
"description": "Mode for parsing entities in the text. See formatting options for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.", "description": "Mode for parsing entities in the text. See formatting options for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.",
"html_description": "<td>Mode for parsing entities in the text. See <a href=\"#formatting-options\">formatting options</a> for more details. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, and &#8220;custom_emoji&#8221; are ignored.</td>", "html_description": "<td>Mode for parsing entities in the text. See <a href=\"#formatting-options\">formatting options</a> for more details. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, &#8220;custom_emoji&#8221;, and &#8220;date_time&#8221; are ignored.</td>",
"rst_description": "Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.\n", "rst_description": "Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.\n",
"name": "text_parse_mode" "name": "text_parse_mode"
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"required": false, "required": false,
"description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of text_parse_mode. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.", "description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of text_parse_mode. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.",
"html_description": "<td>A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of <em>text_parse_mode</em>. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, and &#8220;custom_emoji&#8221; are ignored.</td>", "html_description": "<td>A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of <em>text_parse_mode</em>. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, &#8220;custom_emoji&#8221;, and &#8220;date_time&#8221; are ignored.</td>",
"rst_description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.\n", "rst_description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.\n",
"name": "text_entities" "name": "text_entities"
} }
], ],

View file

@ -0,0 +1,25 @@
{
"meta": {},
"group": {
"title": "Available methods",
"anchor": "available-methods"
},
"object": {
"anchor": "replacemanagedbottoken",
"name": "replaceManagedBotToken",
"description": "Use this method to revoke the current token of a managed bot and generate a new one. Returns the new token as String on success.",
"html_description": "<p>Use this method to revoke the current token of a managed bot and generate a new one. Returns the new token as <em>String</em> on success.</p>",
"rst_description": "Use this method to revoke the current token of a managed bot and generate a new one. Returns the new token as *String* on success.",
"annotations": [
{
"type": "Integer",
"required": true,
"description": "User identifier of the managed bot whose token will be replaced",
"html_description": "<td>User identifier of the managed bot whose token will be replaced</td>",
"rst_description": "User identifier of the managed bot whose token will be replaced\n",
"name": "user_id"
}
],
"category": "methods"
}
}

View file

@ -1,8 +1,8 @@
{ {
"meta": {}, "meta": {},
"group": { "group": {
"title": "Inline mode", "title": "Available methods",
"anchor": "inline-mode" "anchor": "available-methods"
}, },
"object": { "object": {
"anchor": "savepreparedinlinemessage", "anchor": "savepreparedinlinemessage",

View file

@ -0,0 +1,33 @@
{
"meta": {},
"group": {
"title": "Available methods",
"anchor": "available-methods"
},
"object": {
"anchor": "savepreparedkeyboardbutton",
"name": "savePreparedKeyboardButton",
"description": "Stores a keyboard button that can be used by a user within a Mini App. Returns a PreparedKeyboardButton object.",
"html_description": "<p>Stores a keyboard button that can be used by a user within a Mini App. Returns a <a href=\"#preparedkeyboardbutton\">PreparedKeyboardButton</a> object.</p>",
"rst_description": "Stores a keyboard button that can be used by a user within a Mini App. Returns a :class:`aiogram.types.prepared_keyboard_button.PreparedKeyboardButton` object.",
"annotations": [
{
"type": "Integer",
"required": true,
"description": "Unique identifier of the target user that can use the button",
"html_description": "<td>Unique identifier of the target user that can use the button</td>",
"rst_description": "Unique identifier of the target user that can use the button\n",
"name": "user_id"
},
{
"type": "KeyboardButton",
"required": true,
"description": "A JSON-serialized object describing the button to be saved. The button must be of the type request_users, request_chat, or request_managed_bot",
"html_description": "<td>A JSON-serialized object describing the button to be saved. The button must be of the type <em>request_users</em>, <em>request_chat</em>, or <em>request_managed_bot</em></td>",
"rst_description": "A JSON-serialized object describing the button to be saved. The button must be of the type *request_users*, *request_chat*, or *request_managed_bot*\n",
"name": "button"
}
],
"category": "methods"
}
}

View file

@ -54,17 +54,17 @@
{ {
"type": "String", "type": "String",
"required": false, "required": false,
"description": "Mode for parsing entities in the text. See formatting options for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.", "description": "Mode for parsing entities in the text. See formatting options for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.",
"html_description": "<td>Mode for parsing entities in the text. See <a href=\"#formatting-options\">formatting options</a> for more details. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, and &#8220;custom_emoji&#8221; are ignored.</td>", "html_description": "<td>Mode for parsing entities in the text. See <a href=\"#formatting-options\">formatting options</a> for more details. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, &#8220;custom_emoji&#8221;, and &#8220;date_time&#8221; are ignored.</td>",
"rst_description": "Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.\n", "rst_description": "Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.\n",
"name": "text_parse_mode" "name": "text_parse_mode"
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"required": false, "required": false,
"description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of text_parse_mode. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.", "description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of text_parse_mode. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.",
"html_description": "<td>A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of <em>text_parse_mode</em>. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, and &#8220;custom_emoji&#8221; are ignored.</td>", "html_description": "<td>A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of <em>text_parse_mode</em>. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, &#8220;custom_emoji&#8221;, and &#8220;date_time&#8221; are ignored.</td>",
"rst_description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.\n", "rst_description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.\n",
"name": "text_entities" "name": "text_entities"
} }
], ],

View file

@ -1,3 +1,4 @@
explanation_parse_mode: parse_mode explanation_parse_mode: parse_mode
question_parse_mode: parse_mode question_parse_mode: parse_mode
description_parse_mode: parse_mode
protect_content: protect_content protect_content: protect_content

View file

@ -86,18 +86,50 @@
{ {
"type": "Boolean", "type": "Boolean",
"required": false, "required": false,
"description": "True, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to False", "description": "Pass True, if the poll allows multiple answers, defaults to False",
"html_description": "<td><em>True</em>, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to <em>False</em></td>", "html_description": "<td>Pass <em>True</em>, if the poll allows multiple answers, defaults to <em>False</em></td>",
"rst_description": ":code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False`\n", "rst_description": "Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`\n",
"name": "allows_multiple_answers" "name": "allows_multiple_answers"
}, },
{ {
"type": "Integer", "type": "Boolean",
"required": false, "required": false,
"description": "0-based identifier of the correct answer option, required for polls in quiz mode", "description": "Pass True, if the poll allows to change chosen answer options, defaults to False for quizzes and to True for regular polls",
"html_description": "<td>0-based identifier of the correct answer option, required for polls in quiz mode</td>", "html_description": "<td>Pass <em>True</em>, if the poll allows to change chosen answer options, defaults to <em>False</em> for quizzes and to <em>True</em> for regular polls</td>",
"rst_description": "0-based identifier of the correct answer option, required for polls in quiz mode\n", "rst_description": "Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls\n",
"name": "correct_option_id" "name": "allows_revoting"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True, if the poll options must be shown in random order",
"html_description": "<td>Pass <em>True</em>, if the poll options must be shown in random order</td>",
"rst_description": "Pass :code:`True`, if the poll options must be shown in random order\n",
"name": "shuffle_options"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes",
"html_description": "<td>Pass <em>True</em>, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes</td>",
"rst_description": "Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes\n",
"name": "allow_adding_options"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True, if poll results must be shown only after the poll closes",
"html_description": "<td>Pass <em>True</em>, if poll results must be shown only after the poll closes</td>",
"rst_description": "Pass :code:`True`, if poll results must be shown only after the poll closes\n",
"name": "hide_results_until_closes"
},
{
"type": "Array of Integer",
"required": false,
"description": "A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode",
"html_description": "<td>A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode</td>",
"rst_description": "A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode\n",
"name": "correct_option_ids"
}, },
{ {
"type": "String", "type": "String",
@ -126,17 +158,17 @@
{ {
"type": "Integer", "type": "Integer",
"required": false, "required": false,
"description": "Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with close_date.", "description": "Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with close_date.",
"html_description": "<td>Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with <em>close_date</em>.</td>", "html_description": "<td>Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with <em>close_date</em>.</td>",
"rst_description": "Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*.\n", "rst_description": "Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.\n",
"name": "open_period" "name": "open_period"
}, },
{ {
"type": "Integer", "type": "Integer",
"required": false, "required": false,
"description": "Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with open_period.", "description": "Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with open_period.",
"html_description": "<td>Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with <em>open_period</em>.</td>", "html_description": "<td>Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with <em>open_period</em>.</td>",
"rst_description": "Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*.\n", "rst_description": "Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.\n",
"name": "close_date" "name": "close_date"
}, },
{ {
@ -147,6 +179,30 @@
"rst_description": "Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.\n", "rst_description": "Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.\n",
"name": "is_closed" "name": "is_closed"
}, },
{
"type": "String",
"required": false,
"description": "Description of the poll to be sent, 0-1024 characters after entities parsing",
"html_description": "<td>Description of the poll to be sent, 0-1024 characters after entities parsing</td>",
"rst_description": "Description of the poll to be sent, 0-1024 characters after entities parsing\n",
"name": "description"
},
{
"type": "String",
"required": false,
"description": "Mode for parsing entities in the poll description. See formatting options for more details.",
"html_description": "<td>Mode for parsing entities in the poll description. See <a href=\"#formatting-options\">formatting options</a> for more details.</td>",
"rst_description": "Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.\n",
"name": "description_parse_mode"
},
{
"type": "Array of MessageEntity",
"required": false,
"description": "A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of description_parse_mode",
"html_description": "<td>A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of <em>description_parse_mode</em></td>",
"rst_description": "A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*\n",
"name": "description_entities"
},
{ {
"type": "Boolean", "type": "Boolean",
"required": false, "required": false,
@ -207,6 +263,18 @@
"release_date": "2023-12-29" "release_date": "2023-12-29"
} }
}, },
{
"type": "Integer",
"required": false,
"description": "0-based identifier of the correct answer option, required for polls in quiz mode",
"html_description": "<td>0-based identifier of the correct answer option, required for polls in quiz mode</td>",
"rst_description": "0-based identifier of the correct answer option, required for polls in quiz mode\n",
"name": "correct_option_id",
"deprecated": {
"version": "9.6",
"release_date": "2026-04-03"
}
},
{ {
"type": "Integer", "type": "Integer",
"required": false, "required": false,

View file

@ -1,7 +1,7 @@
{ {
"api": { "api": {
"version": "9.5", "version": "9.6",
"release_date": "2026-03-01" "release_date": "2026-04-03"
}, },
"items": [ "items": [
{ {
@ -206,6 +206,14 @@
"rst_description": "*Optional*. A boost was removed from a chat. The bot must be an administrator in the chat to receive these updates.\n", "rst_description": "*Optional*. A boost was removed from a chat. The bot must be an administrator in the chat to receive these updates.\n",
"name": "removed_chat_boost", "name": "removed_chat_boost",
"required": false "required": false
},
{
"type": "ManagedBotUpdated",
"description": "A new bot was created to be managed by the bot or token of a bot was changed",
"html_description": "<td><em>Optional</em>. A new bot was created to be managed by the bot or token of a bot was changed</td>",
"rst_description": "*Optional*. A new bot was created to be managed by the bot or token of a bot was changed\n",
"name": "managed_bot",
"required": false
} }
], ],
"category": "types" "category": "types"
@ -560,6 +568,14 @@
"rst_description": "*Optional*. :code:`True`, if the bot allows users to create and delete topics in private chats. Returned only in :class:`aiogram.methods.get_me.GetMe`.\n", "rst_description": "*Optional*. :code:`True`, if the bot allows users to create and delete topics in private chats. Returned only in :class:`aiogram.methods.get_me.GetMe`.\n",
"name": "allows_users_to_create_topics", "name": "allows_users_to_create_topics",
"required": false "required": false
},
{
"type": "Boolean",
"description": "True, if other bots can be created to be controlled by the bot. Returned only in getMe.",
"html_description": "<td><em>Optional</em>. <em>True</em>, if other bots can be created to be controlled by the bot. Returned only in <a href=\"#getme\">getMe</a>.</td>",
"rst_description": "*Optional*. :code:`True`, if other bots can be created to be controlled by the bot. Returned only in :class:`aiogram.methods.get_me.GetMe`.\n",
"name": "can_manage_bots",
"required": false
} }
], ],
"category": "types" "category": "types"
@ -1215,6 +1231,14 @@
"name": "reply_to_checklist_task_id", "name": "reply_to_checklist_task_id",
"required": false "required": false
}, },
{
"type": "String",
"description": "Persistent identifier of the specific poll option that is being replied to",
"html_description": "<td><em>Optional</em>. Persistent identifier of the specific poll option that is being replied to</td>",
"rst_description": "*Optional*. Persistent identifier of the specific poll option that is being replied to\n",
"name": "reply_to_poll_option_id",
"required": false
},
{ {
"type": "User", "type": "User",
"description": "Bot through which the message was sent", "description": "Bot through which the message was sent",
@ -1815,6 +1839,14 @@
"name": "giveaway_completed", "name": "giveaway_completed",
"required": false "required": false
}, },
{
"type": "ManagedBotCreated",
"description": "Service message: user created a bot that will be managed by the current bot",
"html_description": "<td><em>Optional</em>. Service message: user created a bot that will be managed by the current bot</td>",
"rst_description": "*Optional*. Service message: user created a bot that will be managed by the current bot\n",
"name": "managed_bot_created",
"required": false
},
{ {
"type": "PaidMessagePriceChanged", "type": "PaidMessagePriceChanged",
"description": "Service message: the price for paid messages has changed in the chat", "description": "Service message: the price for paid messages has changed in the chat",
@ -1823,6 +1855,22 @@
"name": "paid_message_price_changed", "name": "paid_message_price_changed",
"required": false "required": false
}, },
{
"type": "PollOptionAdded",
"description": "Service message: answer option was added to a poll",
"html_description": "<td><em>Optional</em>. Service message: answer option was added to a poll</td>",
"rst_description": "*Optional*. Service message: answer option was added to a poll\n",
"name": "poll_option_added",
"required": false
},
{
"type": "PollOptionDeleted",
"description": "Service message: answer option was deleted from a poll",
"html_description": "<td><em>Optional</em>. Service message: answer option was deleted from a poll</td>",
"rst_description": "*Optional*. Service message: answer option was deleted from a poll\n",
"name": "poll_option_deleted",
"required": false
},
{ {
"type": "SuggestedPostApproved", "type": "SuggestedPostApproved",
"description": "Service message: a suggested post was approved", "description": "Service message: a suggested post was approved",
@ -2074,9 +2122,9 @@
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"description": "Special entities that appear in the quote. Currently, only bold, italic, underline, strikethrough, spoiler, and custom_emoji entities are kept in quotes.", "description": "Special entities that appear in the quote. Currently, only bold, italic, underline, strikethrough, spoiler, custom_emoji, and date_time entities are kept in quotes.",
"html_description": "<td><em>Optional</em>. Special entities that appear in the quote. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, and <em>custom_emoji</em> entities are kept in quotes.</td>", "html_description": "<td><em>Optional</em>. Special entities that appear in the quote. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, <em>custom_emoji</em>, and <em>date_time</em> entities are kept in quotes.</td>",
"rst_description": "*Optional*. Special entities that appear in the quote. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are kept in quotes.\n", "rst_description": "*Optional*. Special entities that appear in the quote. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are kept in quotes.\n",
"name": "entities", "name": "entities",
"required": false "required": false
}, },
@ -2342,9 +2390,9 @@
}, },
{ {
"type": "String", "type": "String",
"description": "Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including bold, italic, underline, strikethrough, spoiler, and custom_emoji entities. The message will fail to send if the quote isn't found in the original message.", "description": "Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including bold, italic, underline, strikethrough, spoiler, custom_emoji, and date_time entities. The message will fail to send if the quote isn't found in the original message.",
"html_description": "<td><em>Optional</em>. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, and <em>custom_emoji</em> entities. The message will fail to send if the quote isn't found in the original message.</td>", "html_description": "<td><em>Optional</em>. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, <em>custom_emoji</em>, and <em>date_time</em> entities. The message will fail to send if the quote isn't found in the original message.</td>",
"rst_description": "*Optional*. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities. The message will fail to send if the quote isn't found in the original message.\n", "rst_description": "*Optional*. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities. The message will fail to send if the quote isn't found in the original message.\n",
"name": "quote", "name": "quote",
"required": false "required": false
}, },
@ -2379,6 +2427,14 @@
"rst_description": "*Optional*. Identifier of the specific checklist task to be replied to\n", "rst_description": "*Optional*. Identifier of the specific checklist task to be replied to\n",
"name": "checklist_task_id", "name": "checklist_task_id",
"required": false "required": false
},
{
"type": "String",
"description": "Persistent identifier of the specific poll option to be replied to",
"html_description": "<td><em>Optional</em>. Persistent identifier of the specific poll option to be replied to</td>",
"rst_description": "*Optional*. Persistent identifier of the specific poll option to be replied to\n",
"name": "poll_option_id",
"required": false
} }
], ],
"category": "types" "category": "types"
@ -3334,6 +3390,14 @@
"html_description": "<p>This object contains information about one answer option in a poll.</p>", "html_description": "<p>This object contains information about one answer option in a poll.</p>",
"rst_description": "This object contains information about one answer option in a poll.", "rst_description": "This object contains information about one answer option in a poll.",
"annotations": [ "annotations": [
{
"type": "String",
"description": "Unique identifier of the option, persistent on option addition and deletion",
"html_description": "<td>Unique identifier of the option, persistent on option addition and deletion</td>",
"rst_description": "Unique identifier of the option, persistent on option addition and deletion\n",
"name": "persistent_id",
"required": true
},
{ {
"type": "String", "type": "String",
"description": "Option text, 1-100 characters", "description": "Option text, 1-100 characters",
@ -3352,11 +3416,35 @@
}, },
{ {
"type": "Integer", "type": "Integer",
"description": "Number of users that voted for this option", "description": "Number of users who voted for this option; may be 0 if unknown",
"html_description": "<td>Number of users that voted for this option</td>", "html_description": "<td>Number of users who voted for this option; may be 0 if unknown</td>",
"rst_description": "Number of users that voted for this option\n", "rst_description": "Number of users who voted for this option; may be 0 if unknown\n",
"name": "voter_count", "name": "voter_count",
"required": true "required": true
},
{
"type": "User",
"description": "User who added the option; omitted if the option wasn't added by a user after poll creation",
"html_description": "<td><em>Optional</em>. User who added the option; omitted if the option wasn't added by a user after poll creation</td>",
"rst_description": "*Optional*. User who added the option; omitted if the option wasn't added by a user after poll creation\n",
"name": "added_by_user",
"required": false
},
{
"type": "Chat",
"description": "Chat that added the option; omitted if the option wasn't added by a chat after poll creation",
"html_description": "<td><em>Optional</em>. Chat that added the option; omitted if the option wasn't added by a chat after poll creation</td>",
"rst_description": "*Optional*. Chat that added the option; omitted if the option wasn't added by a chat after poll creation\n",
"name": "added_by_chat",
"required": false
},
{
"type": "Integer",
"description": "Point in time (Unix timestamp) when the option was added; omitted if the option existed in the original poll",
"html_description": "<td><em>Optional</em>. Point in time (Unix timestamp) when the option was added; omitted if the option existed in the original poll</td>",
"rst_description": "*Optional*. Point in time (Unix timestamp) when the option was added; omitted if the option existed in the original poll\n",
"name": "addition_date",
"required": false
} }
], ],
"category": "types" "category": "types"
@ -3433,6 +3521,14 @@
"rst_description": "0-based identifiers of chosen answer options. May be empty if the vote was retracted.\n", "rst_description": "0-based identifiers of chosen answer options. May be empty if the vote was retracted.\n",
"name": "option_ids", "name": "option_ids",
"required": true "required": true
},
{
"type": "Array of String",
"description": "Persistent identifiers of the chosen answer options. May be empty if the vote was retracted.",
"html_description": "<td>Persistent identifiers of the chosen answer options. May be empty if the vote was retracted.</td>",
"rst_description": "Persistent identifiers of the chosen answer options. May be empty if the vote was retracted.\n",
"name": "option_persistent_ids",
"required": true
} }
], ],
"category": "types" "category": "types"
@ -3517,11 +3613,19 @@
"required": true "required": true
}, },
{ {
"type": "Integer", "type": "Boolean",
"description": "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.", "description": "True, if the poll allows to change the chosen answer options",
"html_description": "<td><em>Optional</em>. 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.</td>", "html_description": "<td><em>True</em>, if the poll allows to change the chosen answer options</td>",
"rst_description": "*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.\n", "rst_description": ":code:`True`, if the poll allows to change the chosen answer options\n",
"name": "correct_option_id", "name": "allows_revoting",
"required": true
},
{
"type": "Array of Integer",
"description": "Array of 0-based identifiers of the correct answer options. Available only for polls in quiz mode which are closed or were sent (not forwarded) by the bot or to the private chat with the bot.",
"html_description": "<td><em>Optional</em>. Array of 0-based identifiers of the correct answer options. Available only for polls in quiz mode which are closed or were sent (not forwarded) by the bot or to the private chat with the bot.</td>",
"rst_description": "*Optional*. Array of 0-based identifiers of the correct answer options. Available only for polls in quiz mode which are closed or were sent (not forwarded) by the bot or to the private chat with the bot.\n",
"name": "correct_option_ids",
"required": false "required": false
}, },
{ {
@ -3555,6 +3659,22 @@
"rst_description": "*Optional*. Point in time (Unix timestamp) when the poll will be automatically closed\n", "rst_description": "*Optional*. Point in time (Unix timestamp) when the poll will be automatically closed\n",
"name": "close_date", "name": "close_date",
"required": false "required": false
},
{
"type": "String",
"description": "Description of the poll; for polls inside the Message object only",
"html_description": "<td><em>Optional</em>. Description of the poll; for polls inside the <a href=\"#message\">Message</a> object only</td>",
"rst_description": "*Optional*. Description of the poll; for polls inside the :class:`aiogram.types.message.Message` object only\n",
"name": "description",
"required": false
},
{
"type": "Array of MessageEntity",
"description": "Special entities like usernames, URLs, bot commands, etc. that appear in the description",
"html_description": "<td><em>Optional</em>. Special entities like usernames, URLs, bot commands, etc. that appear in the description</td>",
"rst_description": "*Optional*. Special entities like usernames, URLs, bot commands, etc. that appear in the description\n",
"name": "description_entities",
"required": false
} }
], ],
"category": "types" "category": "types"
@ -3700,9 +3820,9 @@
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"description": "List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, and custom_emoji entities are allowed.", "description": "List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, custom_emoji, and date_time entities are allowed.",
"html_description": "<td><em>Optional</em>. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, and <em>custom_emoji</em> entities are allowed.</td>", "html_description": "<td><em>Optional</em>. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, <em>custom_emoji</em>, and <em>date_time</em> entities are allowed.</td>",
"rst_description": "*Optional*. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are allowed.\n", "rst_description": "*Optional*. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are allowed.\n",
"name": "text_entities", "name": "text_entities",
"required": false "required": false
} }
@ -3734,9 +3854,9 @@
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"description": "List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, and custom_emoji entities are allowed.", "description": "List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, custom_emoji, and date_time entities are allowed.",
"html_description": "<td><em>Optional</em>. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, and <em>custom_emoji</em> entities are allowed.</td>", "html_description": "<td><em>Optional</em>. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, <em>custom_emoji</em>, and <em>date_time</em> entities are allowed.</td>",
"rst_description": "*Optional*. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are allowed.\n", "rst_description": "*Optional*. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are allowed.\n",
"name": "title_entities", "name": "title_entities",
"required": false "required": false
}, },
@ -4029,6 +4149,134 @@
], ],
"category": "types" "category": "types"
}, },
{
"anchor": "managedbotcreated",
"name": "ManagedBotCreated",
"description": "This object contains information about the bot that was created to be managed by the current bot.",
"html_description": "<p>This object contains information about the bot that was created to be managed by the current bot.</p>",
"rst_description": "This object contains information about the bot that was created to be managed by the current bot.",
"annotations": [
{
"type": "User",
"description": "Information about the bot. The bot's token can be fetched using the method getManagedBotToken.",
"html_description": "<td>Information about the bot. The bot's token can be fetched using the method <a href=\"#getmanagedbottoken\">getManagedBotToken</a>.</td>",
"rst_description": "Information about the bot. The bot's token can be fetched using the method :class:`aiogram.methods.get_managed_bot_token.GetManagedBotToken`.\n",
"name": "bot",
"required": true
}
],
"category": "types"
},
{
"anchor": "managedbotupdated",
"name": "ManagedBotUpdated",
"description": "This object contains information about the creation or token update of a bot that is managed by the current bot.",
"html_description": "<p>This object contains information about the creation or token update of a bot that is managed by the current bot.</p>",
"rst_description": "This object contains information about the creation or token update of a bot that is managed by the current bot.",
"annotations": [
{
"type": "User",
"description": "User that created the bot",
"html_description": "<td>User that created the bot</td>",
"rst_description": "User that created the bot\n",
"name": "user",
"required": true
},
{
"type": "User",
"description": "Information about the bot. Token of the bot can be fetched using the method getManagedBotToken.",
"html_description": "<td>Information about the bot. Token of the bot can be fetched using the method <a href=\"#getmanagedbottoken\">getManagedBotToken</a>.</td>",
"rst_description": "Information about the bot. Token of the bot can be fetched using the method :class:`aiogram.methods.get_managed_bot_token.GetManagedBotToken`.\n",
"name": "bot",
"required": true
}
],
"category": "types"
},
{
"anchor": "polloptionadded",
"name": "PollOptionAdded",
"description": "Describes a service message about an option added to a poll.",
"html_description": "<p>Describes a service message about an option added to a poll.</p>",
"rst_description": "Describes a service message about an option added to a poll.",
"annotations": [
{
"type": "MaybeInaccessibleMessage",
"description": "Message containing the poll to which the option was added, if known. Note that the Message object in this field will not contain the reply_to_message field even if it itself is a reply.",
"html_description": "<td><em>Optional</em>. Message containing the poll to which the option was added, if known. Note that the <a href=\"#message\">Message</a> object in this field will not contain the <em>reply_to_message</em> field even if it itself is a reply.</td>",
"rst_description": "*Optional*. Message containing the poll to which the option was added, if known. Note that the :class:`aiogram.types.message.Message` object in this field will not contain the *reply_to_message* field even if it itself is a reply.\n",
"name": "poll_message",
"required": false
},
{
"type": "String",
"description": "Unique identifier of the added option",
"html_description": "<td>Unique identifier of the added option</td>",
"rst_description": "Unique identifier of the added option\n",
"name": "option_persistent_id",
"required": true
},
{
"type": "String",
"description": "Option text",
"html_description": "<td>Option text</td>",
"rst_description": "Option text\n",
"name": "option_text",
"required": true
},
{
"type": "Array of MessageEntity",
"description": "Special entities that appear in the option_text",
"html_description": "<td><em>Optional</em>. Special entities that appear in the <em>option_text</em></td>",
"rst_description": "*Optional*. Special entities that appear in the *option_text*\n",
"name": "option_text_entities",
"required": false
}
],
"category": "types"
},
{
"anchor": "polloptiondeleted",
"name": "PollOptionDeleted",
"description": "Describes a service message about an option deleted from a poll.",
"html_description": "<p>Describes a service message about an option deleted from a poll.</p>",
"rst_description": "Describes a service message about an option deleted from a poll.",
"annotations": [
{
"type": "MaybeInaccessibleMessage",
"description": "Message containing the poll from which the option was deleted, if known. Note that the Message object in this field will not contain the reply_to_message field even if it itself is a reply.",
"html_description": "<td><em>Optional</em>. Message containing the poll from which the option was deleted, if known. Note that the <a href=\"#message\">Message</a> object in this field will not contain the <em>reply_to_message</em> field even if it itself is a reply.</td>",
"rst_description": "*Optional*. Message containing the poll from which the option was deleted, if known. Note that the :class:`aiogram.types.message.Message` object in this field will not contain the *reply_to_message* field even if it itself is a reply.\n",
"name": "poll_message",
"required": false
},
{
"type": "String",
"description": "Unique identifier of the deleted option",
"html_description": "<td>Unique identifier of the deleted option</td>",
"rst_description": "Unique identifier of the deleted option\n",
"name": "option_persistent_id",
"required": true
},
{
"type": "String",
"description": "Option text",
"html_description": "<td>Option text</td>",
"rst_description": "Option text\n",
"name": "option_text",
"required": true
},
{
"type": "Array of MessageEntity",
"description": "Special entities that appear in the option_text",
"html_description": "<td><em>Optional</em>. Special entities that appear in the <em>option_text</em></td>",
"rst_description": "*Optional*. Special entities that appear in the *option_text*\n",
"name": "option_text_entities",
"required": false
}
],
"category": "types"
},
{ {
"anchor": "chatboostadded", "anchor": "chatboostadded",
"name": "ChatBoostAdded", "name": "ChatBoostAdded",
@ -5497,6 +5745,14 @@
"name": "request_chat", "name": "request_chat",
"required": false "required": false
}, },
{
"type": "KeyboardButtonRequestManagedBot",
"description": "If specified, pressing the button will ask the user to create and share a bot that will be managed by the current bot. Available for bots that enabled management of other bots in the @BotFather Mini App. Available in private chats only.",
"html_description": "<td><em>Optional</em>. If specified, pressing the button will ask the user to create and share a bot that will be managed by the current bot. Available for bots that enabled management of other bots in the <a href=\"https://t.me/BotFather\">@BotFather</a> Mini App. Available in private chats only.</td>",
"rst_description": "*Optional*. If specified, pressing the button will ask the user to create and share a bot that will be managed by the current bot. Available for bots that enabled management of other bots in the `@BotFather <https://t.me/BotFather>`_ Mini App. Available in private chats only.\n",
"name": "request_managed_bot",
"required": false
},
{ {
"type": "Boolean", "type": "Boolean",
"description": "If True, the user's phone number will be sent as a contact when the button is pressed. Available in private chats only.", "description": "If True, the user's phone number will be sent as a contact when the button is pressed. Available in private chats only.",
@ -5696,6 +5952,40 @@
], ],
"category": "types" "category": "types"
}, },
{
"anchor": "keyboardbuttonrequestmanagedbot",
"name": "KeyboardButtonRequestManagedBot",
"description": "This object defines the parameters for the creation of a managed bot. Information about the created bot will be shared with the bot using the update managed_bot and a Message with the field managed_bot_created.",
"html_description": "<p>This object defines the parameters for the creation of a managed bot. Information about the created bot will be shared with the bot using the update <em>managed_bot</em> and a <a href=\"#message\">Message</a> with the field <em>managed_bot_created</em>.</p>",
"rst_description": "This object defines the parameters for the creation of a managed bot. Information about the created bot will be shared with the bot using the update *managed_bot* and a :class:`aiogram.types.message.Message` with the field *managed_bot_created*.",
"annotations": [
{
"type": "Integer",
"description": "Signed 32-bit identifier of the request. Must be unique within the message",
"html_description": "<td>Signed 32-bit identifier of the request. Must be unique within the message</td>",
"rst_description": "Signed 32-bit identifier of the request. Must be unique within the message\n",
"name": "request_id",
"required": true
},
{
"type": "String",
"description": "Suggested name for the bot",
"html_description": "<td><em>Optional</em>. Suggested name for the bot</td>",
"rst_description": "*Optional*. Suggested name for the bot\n",
"name": "suggested_name",
"required": false
},
{
"type": "String",
"description": "Suggested username for the bot",
"html_description": "<td><em>Optional</em>. Suggested username for the bot</td>",
"rst_description": "*Optional*. Suggested username for the bot\n",
"name": "suggested_username",
"required": false
}
],
"category": "types"
},
{ {
"anchor": "keyboardbuttonpolltype", "anchor": "keyboardbuttonpolltype",
"name": "KeyboardButtonPollType", "name": "KeyboardButtonPollType",
@ -9705,6 +9995,68 @@
], ],
"category": "types" "category": "types"
}, },
{
"anchor": "sentwebappmessage",
"name": "SentWebAppMessage",
"description": "Describes an inline message sent by a Web App on behalf of a user.",
"html_description": "<p>Describes an inline message sent by a <a href=\"/bots/webapps\">Web App</a> on behalf of a user.</p>",
"rst_description": "Describes an inline message sent by a `Web App <https://core.telegram.org/bots/webapps>`_ on behalf of a user.",
"annotations": [
{
"type": "String",
"description": "Identifier of the sent inline message. Available only if there is an inline keyboard attached to the message.",
"html_description": "<td><em>Optional</em>. Identifier of the sent inline message. Available only if there is an <a href=\"#inlinekeyboardmarkup\">inline keyboard</a> attached to the message.</td>",
"rst_description": "*Optional*. Identifier of the sent inline message. Available only if there is an `inline keyboard <https://core.telegram.org/bots/api#inlinekeyboardmarkup>`_ attached to the message.\n",
"name": "inline_message_id",
"required": false
}
],
"category": "types"
},
{
"anchor": "preparedinlinemessage",
"name": "PreparedInlineMessage",
"description": "Describes an inline message to be sent by a user of a Mini App.",
"html_description": "<p>Describes an inline message to be sent by a user of a Mini App.</p>",
"rst_description": "Describes an inline message to be sent by a user of a Mini App.",
"annotations": [
{
"type": "String",
"description": "Unique identifier of the prepared message",
"html_description": "<td>Unique identifier of the prepared message</td>",
"rst_description": "Unique identifier of the prepared message\n",
"name": "id",
"required": true
},
{
"type": "Integer",
"description": "Expiration date of the prepared message, in Unix time. Expired prepared messages can no longer be used",
"html_description": "<td>Expiration date of the prepared message, in Unix time. Expired prepared messages can no longer be used</td>",
"rst_description": "Expiration date of the prepared message, in Unix time. Expired prepared messages can no longer be used\n",
"name": "expiration_date",
"required": true
}
],
"category": "types"
},
{
"anchor": "preparedkeyboardbutton",
"name": "PreparedKeyboardButton",
"description": "Describes a keyboard button to be used by a user of a Mini App.",
"html_description": "<p>Describes a keyboard button to be used by a user of a Mini App.</p>",
"rst_description": "Describes a keyboard button to be used by a user of a Mini App.",
"annotations": [
{
"type": "String",
"description": "Unique identifier of the keyboard button",
"html_description": "<td>Unique identifier of the keyboard button</td>",
"rst_description": "Unique identifier of the keyboard button\n",
"name": "id",
"required": true
}
],
"category": "types"
},
{ {
"anchor": "responseparameters", "anchor": "responseparameters",
"name": "ResponseParameters", "name": "ResponseParameters",
@ -12852,18 +13204,50 @@
{ {
"type": "Boolean", "type": "Boolean",
"required": false, "required": false,
"description": "True, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to False", "description": "Pass True, if the poll allows multiple answers, defaults to False",
"html_description": "<td><em>True</em>, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to <em>False</em></td>", "html_description": "<td>Pass <em>True</em>, if the poll allows multiple answers, defaults to <em>False</em></td>",
"rst_description": ":code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False`\n", "rst_description": "Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`\n",
"name": "allows_multiple_answers" "name": "allows_multiple_answers"
}, },
{ {
"type": "Integer", "type": "Boolean",
"required": false, "required": false,
"description": "0-based identifier of the correct answer option, required for polls in quiz mode", "description": "Pass True, if the poll allows to change chosen answer options, defaults to False for quizzes and to True for regular polls",
"html_description": "<td>0-based identifier of the correct answer option, required for polls in quiz mode</td>", "html_description": "<td>Pass <em>True</em>, if the poll allows to change chosen answer options, defaults to <em>False</em> for quizzes and to <em>True</em> for regular polls</td>",
"rst_description": "0-based identifier of the correct answer option, required for polls in quiz mode\n", "rst_description": "Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls\n",
"name": "correct_option_id" "name": "allows_revoting"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True, if the poll options must be shown in random order",
"html_description": "<td>Pass <em>True</em>, if the poll options must be shown in random order</td>",
"rst_description": "Pass :code:`True`, if the poll options must be shown in random order\n",
"name": "shuffle_options"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes",
"html_description": "<td>Pass <em>True</em>, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes</td>",
"rst_description": "Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes\n",
"name": "allow_adding_options"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True, if poll results must be shown only after the poll closes",
"html_description": "<td>Pass <em>True</em>, if poll results must be shown only after the poll closes</td>",
"rst_description": "Pass :code:`True`, if poll results must be shown only after the poll closes\n",
"name": "hide_results_until_closes"
},
{
"type": "Array of Integer",
"required": false,
"description": "A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode",
"html_description": "<td>A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode</td>",
"rst_description": "A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode\n",
"name": "correct_option_ids"
}, },
{ {
"type": "String", "type": "String",
@ -12892,17 +13276,17 @@
{ {
"type": "Integer", "type": "Integer",
"required": false, "required": false,
"description": "Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with close_date.", "description": "Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with close_date.",
"html_description": "<td>Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with <em>close_date</em>.</td>", "html_description": "<td>Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with <em>close_date</em>.</td>",
"rst_description": "Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*.\n", "rst_description": "Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.\n",
"name": "open_period" "name": "open_period"
}, },
{ {
"type": "Integer", "type": "Integer",
"required": false, "required": false,
"description": "Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with open_period.", "description": "Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with open_period.",
"html_description": "<td>Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with <em>open_period</em>.</td>", "html_description": "<td>Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with <em>open_period</em>.</td>",
"rst_description": "Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*.\n", "rst_description": "Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.\n",
"name": "close_date" "name": "close_date"
}, },
{ {
@ -12913,6 +13297,30 @@
"rst_description": "Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.\n", "rst_description": "Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.\n",
"name": "is_closed" "name": "is_closed"
}, },
{
"type": "String",
"required": false,
"description": "Description of the poll to be sent, 0-1024 characters after entities parsing",
"html_description": "<td>Description of the poll to be sent, 0-1024 characters after entities parsing</td>",
"rst_description": "Description of the poll to be sent, 0-1024 characters after entities parsing\n",
"name": "description"
},
{
"type": "String",
"required": false,
"description": "Mode for parsing entities in the poll description. See formatting options for more details.",
"html_description": "<td>Mode for parsing entities in the poll description. See <a href=\"#formatting-options\">formatting options</a> for more details.</td>",
"rst_description": "Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.\n",
"name": "description_parse_mode"
},
{
"type": "Array of MessageEntity",
"required": false,
"description": "A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of description_parse_mode",
"html_description": "<td>A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of <em>description_parse_mode</em></td>",
"rst_description": "A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*\n",
"name": "description_entities"
},
{ {
"type": "Boolean", "type": "Boolean",
"required": false, "required": false,
@ -14867,6 +15275,42 @@
], ],
"category": "methods" "category": "methods"
}, },
{
"anchor": "getmanagedbottoken",
"name": "getManagedBotToken",
"description": "Use this method to get the token of a managed bot. Returns the token as String on success.",
"html_description": "<p>Use this method to get the token of a managed bot. Returns the token as <em>String</em> on success.</p>",
"rst_description": "Use this method to get the token of a managed bot. Returns the token as *String* on success.",
"annotations": [
{
"type": "Integer",
"required": true,
"description": "User identifier of the managed bot whose token will be returned",
"html_description": "<td>User identifier of the managed bot whose token will be returned</td>",
"rst_description": "User identifier of the managed bot whose token will be returned\n",
"name": "user_id"
}
],
"category": "methods"
},
{
"anchor": "replacemanagedbottoken",
"name": "replaceManagedBotToken",
"description": "Use this method to revoke the current token of a managed bot and generate a new one. Returns the new token as String on success.",
"html_description": "<p>Use this method to revoke the current token of a managed bot and generate a new one. Returns the new token as <em>String</em> on success.</p>",
"rst_description": "Use this method to revoke the current token of a managed bot and generate a new one. Returns the new token as *String* on success.",
"annotations": [
{
"type": "Integer",
"required": true,
"description": "User identifier of the managed bot whose token will be replaced",
"html_description": "<td>User identifier of the managed bot whose token will be replaced</td>",
"rst_description": "User identifier of the managed bot whose token will be replaced\n",
"name": "user_id"
}
],
"category": "methods"
},
{ {
"anchor": "setmycommands", "anchor": "setmycommands",
"name": "setMyCommands", "name": "setMyCommands",
@ -15259,17 +15703,17 @@
{ {
"type": "String", "type": "String",
"required": false, "required": false,
"description": "Mode for parsing entities in the text. See formatting options for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.", "description": "Mode for parsing entities in the text. See formatting options for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.",
"html_description": "<td>Mode for parsing entities in the text. See <a href=\"#formatting-options\">formatting options</a> for more details. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, and &#8220;custom_emoji&#8221; are ignored.</td>", "html_description": "<td>Mode for parsing entities in the text. See <a href=\"#formatting-options\">formatting options</a> for more details. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, &#8220;custom_emoji&#8221;, and &#8220;date_time&#8221; are ignored.</td>",
"rst_description": "Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.\n", "rst_description": "Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.\n",
"name": "text_parse_mode" "name": "text_parse_mode"
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"required": false, "required": false,
"description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of text_parse_mode. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.", "description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of text_parse_mode. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.",
"html_description": "<td>A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of <em>text_parse_mode</em>. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, and &#8220;custom_emoji&#8221; are ignored.</td>", "html_description": "<td>A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of <em>text_parse_mode</em>. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, &#8220;custom_emoji&#8221;, and &#8220;date_time&#8221; are ignored.</td>",
"rst_description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.\n", "rst_description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.\n",
"name": "text_entities" "name": "text_entities"
} }
], ],
@ -15317,17 +15761,17 @@
{ {
"type": "String", "type": "String",
"required": false, "required": false,
"description": "Mode for parsing entities in the text. See formatting options for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.", "description": "Mode for parsing entities in the text. See formatting options for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.",
"html_description": "<td>Mode for parsing entities in the text. See <a href=\"#formatting-options\">formatting options</a> for more details. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, and &#8220;custom_emoji&#8221; are ignored.</td>", "html_description": "<td>Mode for parsing entities in the text. See <a href=\"#formatting-options\">formatting options</a> for more details. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, &#8220;custom_emoji&#8221;, and &#8220;date_time&#8221; are ignored.</td>",
"rst_description": "Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.\n", "rst_description": "Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.\n",
"name": "text_parse_mode" "name": "text_parse_mode"
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"required": false, "required": false,
"description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of text_parse_mode. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.", "description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of text_parse_mode. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.",
"html_description": "<td>A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of <em>text_parse_mode</em>. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, and &#8220;custom_emoji&#8221; are ignored.</td>", "html_description": "<td>A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of <em>text_parse_mode</em>. Entities other than &#8220;bold&#8221;, &#8220;italic&#8221;, &#8220;underline&#8221;, &#8220;strikethrough&#8221;, &#8220;spoiler&#8221;, &#8220;custom_emoji&#8221;, and &#8220;date_time&#8221; are ignored.</td>",
"rst_description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.\n", "rst_description": "A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.\n",
"name": "text_entities" "name": "text_entities"
} }
], ],
@ -16324,6 +16768,116 @@
} }
], ],
"category": "methods" "category": "methods"
},
{
"anchor": "answerwebappquery",
"name": "answerWebAppQuery",
"description": "Use this method to set the result of an interaction with a Web App and send a corresponding message on behalf of the user to the chat from which the query originated. On success, a SentWebAppMessage object is returned.",
"html_description": "<p>Use this method to set the result of an interaction with a <a href=\"/bots/webapps\">Web App</a> and send a corresponding message on behalf of the user to the chat from which the query originated. On success, a <a href=\"#sentwebappmessage\">SentWebAppMessage</a> object is returned.</p>",
"rst_description": "Use this method to set the result of an interaction with a `Web App <https://core.telegram.org/bots/webapps>`_ and send a corresponding message on behalf of the user to the chat from which the query originated. On success, a :class:`aiogram.types.sent_web_app_message.SentWebAppMessage` object is returned.",
"annotations": [
{
"type": "String",
"required": true,
"description": "Unique identifier for the query to be answered",
"html_description": "<td>Unique identifier for the query to be answered</td>",
"rst_description": "Unique identifier for the query to be answered\n",
"name": "web_app_query_id"
},
{
"type": "InlineQueryResult",
"required": true,
"description": "A JSON-serialized object describing the message to be sent",
"html_description": "<td>A JSON-serialized object describing the message to be sent</td>",
"rst_description": "A JSON-serialized object describing the message to be sent\n",
"name": "result"
}
],
"category": "methods"
},
{
"anchor": "savepreparedinlinemessage",
"name": "savePreparedInlineMessage",
"description": "Stores a message that can be sent by a user of a Mini App. Returns a PreparedInlineMessage object.",
"html_description": "<p>Stores a message that can be sent by a user of a Mini App. Returns a <a href=\"#preparedinlinemessage\">PreparedInlineMessage</a> object.</p>",
"rst_description": "Stores a message that can be sent by a user of a Mini App. Returns a :class:`aiogram.types.prepared_inline_message.PreparedInlineMessage` object.",
"annotations": [
{
"type": "Integer",
"required": true,
"description": "Unique identifier of the target user that can use the prepared message",
"html_description": "<td>Unique identifier of the target user that can use the prepared message</td>",
"rst_description": "Unique identifier of the target user that can use the prepared message\n",
"name": "user_id"
},
{
"type": "InlineQueryResult",
"required": true,
"description": "A JSON-serialized object describing the message to be sent",
"html_description": "<td>A JSON-serialized object describing the message to be sent</td>",
"rst_description": "A JSON-serialized object describing the message to be sent\n",
"name": "result"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True if the message can be sent to private chats with users",
"html_description": "<td>Pass <em>True</em> if the message can be sent to private chats with users</td>",
"rst_description": "Pass :code:`True` if the message can be sent to private chats with users\n",
"name": "allow_user_chats"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True if the message can be sent to private chats with bots",
"html_description": "<td>Pass <em>True</em> if the message can be sent to private chats with bots</td>",
"rst_description": "Pass :code:`True` if the message can be sent to private chats with bots\n",
"name": "allow_bot_chats"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True if the message can be sent to group and supergroup chats",
"html_description": "<td>Pass <em>True</em> if the message can be sent to group and supergroup chats</td>",
"rst_description": "Pass :code:`True` if the message can be sent to group and supergroup chats\n",
"name": "allow_group_chats"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True if the message can be sent to channel chats",
"html_description": "<td>Pass <em>True</em> if the message can be sent to channel chats</td>",
"rst_description": "Pass :code:`True` if the message can be sent to channel chats\n",
"name": "allow_channel_chats"
}
],
"category": "methods"
},
{
"anchor": "savepreparedkeyboardbutton",
"name": "savePreparedKeyboardButton",
"description": "Stores a keyboard button that can be used by a user within a Mini App. Returns a PreparedKeyboardButton object.",
"html_description": "<p>Stores a keyboard button that can be used by a user within a Mini App. Returns a <a href=\"#preparedkeyboardbutton\">PreparedKeyboardButton</a> object.</p>",
"rst_description": "Stores a keyboard button that can be used by a user within a Mini App. Returns a :class:`aiogram.types.prepared_keyboard_button.PreparedKeyboardButton` object.",
"annotations": [
{
"type": "Integer",
"required": true,
"description": "Unique identifier of the target user that can use the button",
"html_description": "<td>Unique identifier of the target user that can use the button</td>",
"rst_description": "Unique identifier of the target user that can use the button\n",
"name": "user_id"
},
{
"type": "KeyboardButton",
"required": true,
"description": "A JSON-serialized object describing the button to be saved. The button must be of the type request_users, request_chat, or request_managed_bot",
"html_description": "<td>A JSON-serialized object describing the button to be saved. The button must be of the type <em>request_users</em>, <em>request_chat</em>, or <em>request_managed_bot</em></td>",
"rst_description": "A JSON-serialized object describing the button to be saved. The button must be of the type *request_users*, *request_chat*, or *request_managed_bot*\n",
"name": "button"
}
],
"category": "methods"
} }
], ],
"description": "All methods in the Bot API are case-insensitive. We support GET and POST HTTP methods. Use either URL query string or application/json or application/x-www-form-urlencoded or multipart/form-data for passing parameters in Bot API requests.\nOn successful call, a JSON-object containing the result will be returned." "description": "All methods in the Bot API are case-insensitive. We support GET and POST HTTP methods. Use either URL query string or application/json or application/x-www-form-urlencoded or multipart/form-data for passing parameters in Bot API requests.\nOn successful call, a JSON-object containing the result will be returned."
@ -20389,134 +20943,6 @@
} }
], ],
"category": "types" "category": "types"
},
{
"anchor": "answerwebappquery",
"name": "answerWebAppQuery",
"description": "Use this method to set the result of an interaction with a Web App and send a corresponding message on behalf of the user to the chat from which the query originated. On success, a SentWebAppMessage object is returned.",
"html_description": "<p>Use this method to set the result of an interaction with a <a href=\"/bots/webapps\">Web App</a> and send a corresponding message on behalf of the user to the chat from which the query originated. On success, a <a href=\"#sentwebappmessage\">SentWebAppMessage</a> object is returned.</p>",
"rst_description": "Use this method to set the result of an interaction with a `Web App <https://core.telegram.org/bots/webapps>`_ and send a corresponding message on behalf of the user to the chat from which the query originated. On success, a :class:`aiogram.types.sent_web_app_message.SentWebAppMessage` object is returned.",
"annotations": [
{
"type": "String",
"required": true,
"description": "Unique identifier for the query to be answered",
"html_description": "<td>Unique identifier for the query to be answered</td>",
"rst_description": "Unique identifier for the query to be answered\n",
"name": "web_app_query_id"
},
{
"type": "InlineQueryResult",
"required": true,
"description": "A JSON-serialized object describing the message to be sent",
"html_description": "<td>A JSON-serialized object describing the message to be sent</td>",
"rst_description": "A JSON-serialized object describing the message to be sent\n",
"name": "result"
}
],
"category": "methods"
},
{
"anchor": "sentwebappmessage",
"name": "SentWebAppMessage",
"description": "Describes an inline message sent by a Web App on behalf of a user.",
"html_description": "<p>Describes an inline message sent by a <a href=\"/bots/webapps\">Web App</a> on behalf of a user.</p>",
"rst_description": "Describes an inline message sent by a `Web App <https://core.telegram.org/bots/webapps>`_ on behalf of a user.",
"annotations": [
{
"type": "String",
"description": "Identifier of the sent inline message. Available only if there is an inline keyboard attached to the message.",
"html_description": "<td><em>Optional</em>. Identifier of the sent inline message. Available only if there is an <a href=\"#inlinekeyboardmarkup\">inline keyboard</a> attached to the message.</td>",
"rst_description": "*Optional*. Identifier of the sent inline message. Available only if there is an `inline keyboard <https://core.telegram.org/bots/api#inlinekeyboardmarkup>`_ attached to the message.\n",
"name": "inline_message_id",
"required": false
}
],
"category": "types"
},
{
"anchor": "savepreparedinlinemessage",
"name": "savePreparedInlineMessage",
"description": "Stores a message that can be sent by a user of a Mini App. Returns a PreparedInlineMessage object.",
"html_description": "<p>Stores a message that can be sent by a user of a Mini App. Returns a <a href=\"#preparedinlinemessage\">PreparedInlineMessage</a> object.</p>",
"rst_description": "Stores a message that can be sent by a user of a Mini App. Returns a :class:`aiogram.types.prepared_inline_message.PreparedInlineMessage` object.",
"annotations": [
{
"type": "Integer",
"required": true,
"description": "Unique identifier of the target user that can use the prepared message",
"html_description": "<td>Unique identifier of the target user that can use the prepared message</td>",
"rst_description": "Unique identifier of the target user that can use the prepared message\n",
"name": "user_id"
},
{
"type": "InlineQueryResult",
"required": true,
"description": "A JSON-serialized object describing the message to be sent",
"html_description": "<td>A JSON-serialized object describing the message to be sent</td>",
"rst_description": "A JSON-serialized object describing the message to be sent\n",
"name": "result"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True if the message can be sent to private chats with users",
"html_description": "<td>Pass <em>True</em> if the message can be sent to private chats with users</td>",
"rst_description": "Pass :code:`True` if the message can be sent to private chats with users\n",
"name": "allow_user_chats"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True if the message can be sent to private chats with bots",
"html_description": "<td>Pass <em>True</em> if the message can be sent to private chats with bots</td>",
"rst_description": "Pass :code:`True` if the message can be sent to private chats with bots\n",
"name": "allow_bot_chats"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True if the message can be sent to group and supergroup chats",
"html_description": "<td>Pass <em>True</em> if the message can be sent to group and supergroup chats</td>",
"rst_description": "Pass :code:`True` if the message can be sent to group and supergroup chats\n",
"name": "allow_group_chats"
},
{
"type": "Boolean",
"required": false,
"description": "Pass True if the message can be sent to channel chats",
"html_description": "<td>Pass <em>True</em> if the message can be sent to channel chats</td>",
"rst_description": "Pass :code:`True` if the message can be sent to channel chats\n",
"name": "allow_channel_chats"
}
],
"category": "methods"
},
{
"anchor": "preparedinlinemessage",
"name": "PreparedInlineMessage",
"description": "Describes an inline message to be sent by a user of a Mini App.",
"html_description": "<p>Describes an inline message to be sent by a user of a Mini App.</p>",
"rst_description": "Describes an inline message to be sent by a user of a Mini App.",
"annotations": [
{
"type": "String",
"description": "Unique identifier of the prepared message",
"html_description": "<td>Unique identifier of the prepared message</td>",
"rst_description": "Unique identifier of the prepared message\n",
"name": "id",
"required": true
},
{
"type": "Integer",
"description": "Expiration date of the prepared message, in Unix time. Expired prepared messages can no longer be used",
"html_description": "<td>Expiration date of the prepared message, in Unix time. Expired prepared messages can no longer be used</td>",
"rst_description": "Expiration date of the prepared message, in Unix time. Expired prepared messages can no longer be used\n",
"name": "expiration_date",
"required": true
}
],
"category": "types"
} }
], ],
"description": "The following methods and objects allow your bot to work in inline mode.\nPlease see our Introduction to Inline bots for more details.\nTo enable this option, send the /setinline command to @BotFather and provide the placeholder text that the user will see in the input field after typing your bot's name." "description": "The following methods and objects allow your bot to work in inline mode.\nPlease see our Introduction to Inline bots for more details.\nTo enable this option, send the /setinline command to @BotFather and provide the placeholder text that the user will see in the input field after typing your bot's name."

View file

@ -29,9 +29,9 @@
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"description": "List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, and custom_emoji entities are allowed.", "description": "List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, custom_emoji, and date_time entities are allowed.",
"html_description": "<td><em>Optional</em>. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, and <em>custom_emoji</em> entities are allowed.</td>", "html_description": "<td><em>Optional</em>. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, <em>custom_emoji</em>, and <em>date_time</em> entities are allowed.</td>",
"rst_description": "*Optional*. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are allowed.\n", "rst_description": "*Optional*. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are allowed.\n",
"name": "title_entities", "name": "title_entities",
"required": false "required": false
}, },

View file

@ -37,9 +37,9 @@
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"description": "List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, and custom_emoji entities are allowed.", "description": "List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, custom_emoji, and date_time entities are allowed.",
"html_description": "<td><em>Optional</em>. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, and <em>custom_emoji</em> entities are allowed.</td>", "html_description": "<td><em>Optional</em>. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, <em>custom_emoji</em>, and <em>date_time</em> entities are allowed.</td>",
"rst_description": "*Optional*. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are allowed.\n", "rst_description": "*Optional*. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are allowed.\n",
"name": "text_entities", "name": "text_entities",
"required": false "required": false
} }

View file

@ -51,6 +51,14 @@
"name": "request_chat", "name": "request_chat",
"required": false "required": false
}, },
{
"type": "KeyboardButtonRequestManagedBot",
"description": "If specified, pressing the button will ask the user to create and share a bot that will be managed by the current bot. Available for bots that enabled management of other bots in the @BotFather Mini App. Available in private chats only.",
"html_description": "<td><em>Optional</em>. If specified, pressing the button will ask the user to create and share a bot that will be managed by the current bot. Available for bots that enabled management of other bots in the <a href=\"https://t.me/BotFather\">@BotFather</a> Mini App. Available in private chats only.</td>",
"rst_description": "*Optional*. If specified, pressing the button will ask the user to create and share a bot that will be managed by the current bot. Available for bots that enabled management of other bots in the `@BotFather <https://t.me/BotFather>`_ Mini App. Available in private chats only.\n",
"name": "request_managed_bot",
"required": false
},
{ {
"type": "Boolean", "type": "Boolean",
"description": "If True, the user's phone number will be sent as a contact when the button is pressed. Available in private chats only.", "description": "If True, the user's phone number will be sent as a contact when the button is pressed. Available in private chats only.",

View file

@ -0,0 +1,41 @@
{
"meta": {},
"group": {
"title": "Available types",
"anchor": "available-types"
},
"object": {
"anchor": "keyboardbuttonrequestmanagedbot",
"name": "KeyboardButtonRequestManagedBot",
"description": "This object defines the parameters for the creation of a managed bot. Information about the created bot will be shared with the bot using the update managed_bot and a Message with the field managed_bot_created.",
"html_description": "<p>This object defines the parameters for the creation of a managed bot. Information about the created bot will be shared with the bot using the update <em>managed_bot</em> and a <a href=\"#message\">Message</a> with the field <em>managed_bot_created</em>.</p>",
"rst_description": "This object defines the parameters for the creation of a managed bot. Information about the created bot will be shared with the bot using the update *managed_bot* and a :class:`aiogram.types.message.Message` with the field *managed_bot_created*.",
"annotations": [
{
"type": "Integer",
"description": "Signed 32-bit identifier of the request. Must be unique within the message",
"html_description": "<td>Signed 32-bit identifier of the request. Must be unique within the message</td>",
"rst_description": "Signed 32-bit identifier of the request. Must be unique within the message\n",
"name": "request_id",
"required": true
},
{
"type": "String",
"description": "Suggested name for the bot",
"html_description": "<td><em>Optional</em>. Suggested name for the bot</td>",
"rst_description": "*Optional*. Suggested name for the bot\n",
"name": "suggested_name",
"required": false
},
{
"type": "String",
"description": "Suggested username for the bot",
"html_description": "<td><em>Optional</em>. Suggested username for the bot</td>",
"rst_description": "*Optional*. Suggested username for the bot\n",
"name": "suggested_username",
"required": false
}
],
"category": "types"
}
}

View file

@ -0,0 +1,25 @@
{
"meta": {},
"group": {
"title": "Available types",
"anchor": "available-types"
},
"object": {
"anchor": "managedbotcreated",
"name": "ManagedBotCreated",
"description": "This object contains information about the bot that was created to be managed by the current bot.",
"html_description": "<p>This object contains information about the bot that was created to be managed by the current bot.</p>",
"rst_description": "This object contains information about the bot that was created to be managed by the current bot.",
"annotations": [
{
"type": "User",
"description": "Information about the bot. The bot's token can be fetched using the method getManagedBotToken.",
"html_description": "<td>Information about the bot. The bot's token can be fetched using the method <a href=\"#getmanagedbottoken\">getManagedBotToken</a>.</td>",
"rst_description": "Information about the bot. The bot's token can be fetched using the method :class:`aiogram.methods.get_managed_bot_token.GetManagedBotToken`.\n",
"name": "bot",
"required": true
}
],
"category": "types"
}
}

View file

@ -0,0 +1,33 @@
{
"meta": {},
"group": {
"title": "Available types",
"anchor": "available-types"
},
"object": {
"anchor": "managedbotupdated",
"name": "ManagedBotUpdated",
"description": "This object contains information about the creation or token update of a bot that is managed by the current bot.",
"html_description": "<p>This object contains information about the creation or token update of a bot that is managed by the current bot.</p>",
"rst_description": "This object contains information about the creation or token update of a bot that is managed by the current bot.",
"annotations": [
{
"type": "User",
"description": "User that created the bot",
"html_description": "<td>User that created the bot</td>",
"rst_description": "User that created the bot\n",
"name": "user",
"required": true
},
{
"type": "User",
"description": "Information about the bot. Token of the bot can be fetched using the method getManagedBotToken.",
"html_description": "<td>Information about the bot. Token of the bot can be fetched using the method <a href=\"#getmanagedbottoken\">getManagedBotToken</a>.</td>",
"rst_description": "Information about the bot. Token of the bot can be fetched using the method :class:`aiogram.methods.get_managed_bot_token.GetManagedBotToken`.\n",
"name": "bot",
"required": true
}
],
"category": "types"
}
}

View file

@ -163,6 +163,14 @@
"name": "reply_to_checklist_task_id", "name": "reply_to_checklist_task_id",
"required": false "required": false
}, },
{
"type": "String",
"description": "Persistent identifier of the specific poll option that is being replied to",
"html_description": "<td><em>Optional</em>. Persistent identifier of the specific poll option that is being replied to</td>",
"rst_description": "*Optional*. Persistent identifier of the specific poll option that is being replied to\n",
"name": "reply_to_poll_option_id",
"required": false
},
{ {
"type": "User", "type": "User",
"description": "Bot through which the message was sent", "description": "Bot through which the message was sent",
@ -763,6 +771,14 @@
"name": "giveaway_completed", "name": "giveaway_completed",
"required": false "required": false
}, },
{
"type": "ManagedBotCreated",
"description": "Service message: user created a bot that will be managed by the current bot",
"html_description": "<td><em>Optional</em>. Service message: user created a bot that will be managed by the current bot</td>",
"rst_description": "*Optional*. Service message: user created a bot that will be managed by the current bot\n",
"name": "managed_bot_created",
"required": false
},
{ {
"type": "PaidMessagePriceChanged", "type": "PaidMessagePriceChanged",
"description": "Service message: the price for paid messages has changed in the chat", "description": "Service message: the price for paid messages has changed in the chat",
@ -771,6 +787,22 @@
"name": "paid_message_price_changed", "name": "paid_message_price_changed",
"required": false "required": false
}, },
{
"type": "PollOptionAdded",
"description": "Service message: answer option was added to a poll",
"html_description": "<td><em>Optional</em>. Service message: answer option was added to a poll</td>",
"rst_description": "*Optional*. Service message: answer option was added to a poll\n",
"name": "poll_option_added",
"required": false
},
{
"type": "PollOptionDeleted",
"description": "Service message: answer option was deleted from a poll",
"html_description": "<td><em>Optional</em>. Service message: answer option was deleted from a poll</td>",
"rst_description": "*Optional*. Service message: answer option was deleted from a poll\n",
"name": "poll_option_deleted",
"required": false
},
{ {
"type": "SuggestedPostApproved", "type": "SuggestedPostApproved",
"description": "Service message: a suggested post was approved", "description": "Service message: a suggested post was approved",

View file

@ -84,11 +84,19 @@
"required": true "required": true
}, },
{ {
"type": "Integer", "type": "Boolean",
"description": "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.", "description": "True, if the poll allows to change the chosen answer options",
"html_description": "<td><em>Optional</em>. 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.</td>", "html_description": "<td><em>True</em>, if the poll allows to change the chosen answer options</td>",
"rst_description": "*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.\n", "rst_description": ":code:`True`, if the poll allows to change the chosen answer options\n",
"name": "correct_option_id", "name": "allows_revoting",
"required": true
},
{
"type": "Array of Integer",
"description": "Array of 0-based identifiers of the correct answer options. Available only for polls in quiz mode which are closed or were sent (not forwarded) by the bot or to the private chat with the bot.",
"html_description": "<td><em>Optional</em>. Array of 0-based identifiers of the correct answer options. Available only for polls in quiz mode which are closed or were sent (not forwarded) by the bot or to the private chat with the bot.</td>",
"rst_description": "*Optional*. Array of 0-based identifiers of the correct answer options. Available only for polls in quiz mode which are closed or were sent (not forwarded) by the bot or to the private chat with the bot.\n",
"name": "correct_option_ids",
"required": false "required": false
}, },
{ {
@ -122,6 +130,34 @@
"rst_description": "*Optional*. Point in time (Unix timestamp) when the poll will be automatically closed\n", "rst_description": "*Optional*. Point in time (Unix timestamp) when the poll will be automatically closed\n",
"name": "close_date", "name": "close_date",
"required": false "required": false
},
{
"type": "String",
"description": "Description of the poll; for polls inside the Message object only",
"html_description": "<td><em>Optional</em>. Description of the poll; for polls inside the <a href=\"#message\">Message</a> object only</td>",
"rst_description": "*Optional*. Description of the poll; for polls inside the :class:`aiogram.types.message.Message` object only\n",
"name": "description",
"required": false
},
{
"type": "Array of MessageEntity",
"description": "Special entities like usernames, URLs, bot commands, etc. that appear in the description",
"html_description": "<td><em>Optional</em>. Special entities like usernames, URLs, bot commands, etc. that appear in the description</td>",
"rst_description": "*Optional*. Special entities like usernames, URLs, bot commands, etc. that appear in the description\n",
"name": "description_entities",
"required": false
},
{
"type": "Integer",
"description": "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.",
"html_description": "<td><em>Optional</em>. 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.</td>",
"rst_description": "*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.\n",
"name": "correct_option_id",
"required": false,
"deprecated": {
"version": "9.6",
"release_date": "2026-04-03"
}
} }
], ],
"category": "types" "category": "types"

View file

@ -42,6 +42,14 @@
"rst_description": "0-based identifiers of chosen answer options. May be empty if the vote was retracted.\n", "rst_description": "0-based identifiers of chosen answer options. May be empty if the vote was retracted.\n",
"name": "option_ids", "name": "option_ids",
"required": true "required": true
},
{
"type": "Array of String",
"description": "Persistent identifiers of the chosen answer options. May be empty if the vote was retracted.",
"html_description": "<td>Persistent identifiers of the chosen answer options. May be empty if the vote was retracted.</td>",
"rst_description": "Persistent identifiers of the chosen answer options. May be empty if the vote was retracted.\n",
"name": "option_persistent_ids",
"required": true
} }
], ],
"category": "types" "category": "types"

View file

@ -11,6 +11,14 @@
"html_description": "<p>This object contains information about one answer option in a poll.</p>", "html_description": "<p>This object contains information about one answer option in a poll.</p>",
"rst_description": "This object contains information about one answer option in a poll.", "rst_description": "This object contains information about one answer option in a poll.",
"annotations": [ "annotations": [
{
"type": "String",
"description": "Unique identifier of the option, persistent on option addition and deletion",
"html_description": "<td>Unique identifier of the option, persistent on option addition and deletion</td>",
"rst_description": "Unique identifier of the option, persistent on option addition and deletion\n",
"name": "persistent_id",
"required": true
},
{ {
"type": "String", "type": "String",
"description": "Option text, 1-100 characters", "description": "Option text, 1-100 characters",
@ -29,11 +37,35 @@
}, },
{ {
"type": "Integer", "type": "Integer",
"description": "Number of users that voted for this option", "description": "Number of users who voted for this option; may be 0 if unknown",
"html_description": "<td>Number of users that voted for this option</td>", "html_description": "<td>Number of users who voted for this option; may be 0 if unknown</td>",
"rst_description": "Number of users that voted for this option\n", "rst_description": "Number of users who voted for this option; may be 0 if unknown\n",
"name": "voter_count", "name": "voter_count",
"required": true "required": true
},
{
"type": "User",
"description": "User who added the option; omitted if the option wasn't added by a user after poll creation",
"html_description": "<td><em>Optional</em>. User who added the option; omitted if the option wasn't added by a user after poll creation</td>",
"rst_description": "*Optional*. User who added the option; omitted if the option wasn't added by a user after poll creation\n",
"name": "added_by_user",
"required": false
},
{
"type": "Chat",
"description": "Chat that added the option; omitted if the option wasn't added by a chat after poll creation",
"html_description": "<td><em>Optional</em>. Chat that added the option; omitted if the option wasn't added by a chat after poll creation</td>",
"rst_description": "*Optional*. Chat that added the option; omitted if the option wasn't added by a chat after poll creation\n",
"name": "added_by_chat",
"required": false
},
{
"type": "Integer",
"description": "Point in time (Unix timestamp) when the option was added; omitted if the option existed in the original poll",
"html_description": "<td><em>Optional</em>. Point in time (Unix timestamp) when the option was added; omitted if the option existed in the original poll</td>",
"rst_description": "*Optional*. Point in time (Unix timestamp) when the option was added; omitted if the option existed in the original poll\n",
"name": "addition_date",
"required": false
} }
], ],
"category": "types" "category": "types"

View file

@ -0,0 +1,5 @@
annotations:
addition_date:
parsed_type:
type: std
name: DateTime

View file

@ -0,0 +1,49 @@
{
"meta": {},
"group": {
"title": "Available types",
"anchor": "available-types"
},
"object": {
"anchor": "polloptionadded",
"name": "PollOptionAdded",
"description": "Describes a service message about an option added to a poll.",
"html_description": "<p>Describes a service message about an option added to a poll.</p>",
"rst_description": "Describes a service message about an option added to a poll.",
"annotations": [
{
"type": "MaybeInaccessibleMessage",
"description": "Message containing the poll to which the option was added, if known. Note that the Message object in this field will not contain the reply_to_message field even if it itself is a reply.",
"html_description": "<td><em>Optional</em>. Message containing the poll to which the option was added, if known. Note that the <a href=\"#message\">Message</a> object in this field will not contain the <em>reply_to_message</em> field even if it itself is a reply.</td>",
"rst_description": "*Optional*. Message containing the poll to which the option was added, if known. Note that the :class:`aiogram.types.message.Message` object in this field will not contain the *reply_to_message* field even if it itself is a reply.\n",
"name": "poll_message",
"required": false
},
{
"type": "String",
"description": "Unique identifier of the added option",
"html_description": "<td>Unique identifier of the added option</td>",
"rst_description": "Unique identifier of the added option\n",
"name": "option_persistent_id",
"required": true
},
{
"type": "String",
"description": "Option text",
"html_description": "<td>Option text</td>",
"rst_description": "Option text\n",
"name": "option_text",
"required": true
},
{
"type": "Array of MessageEntity",
"description": "Special entities that appear in the option_text",
"html_description": "<td><em>Optional</em>. Special entities that appear in the <em>option_text</em></td>",
"rst_description": "*Optional*. Special entities that appear in the *option_text*\n",
"name": "option_text_entities",
"required": false
}
],
"category": "types"
}
}

View file

@ -0,0 +1,49 @@
{
"meta": {},
"group": {
"title": "Available types",
"anchor": "available-types"
},
"object": {
"anchor": "polloptiondeleted",
"name": "PollOptionDeleted",
"description": "Describes a service message about an option deleted from a poll.",
"html_description": "<p>Describes a service message about an option deleted from a poll.</p>",
"rst_description": "Describes a service message about an option deleted from a poll.",
"annotations": [
{
"type": "MaybeInaccessibleMessage",
"description": "Message containing the poll from which the option was deleted, if known. Note that the Message object in this field will not contain the reply_to_message field even if it itself is a reply.",
"html_description": "<td><em>Optional</em>. Message containing the poll from which the option was deleted, if known. Note that the <a href=\"#message\">Message</a> object in this field will not contain the <em>reply_to_message</em> field even if it itself is a reply.</td>",
"rst_description": "*Optional*. Message containing the poll from which the option was deleted, if known. Note that the :class:`aiogram.types.message.Message` object in this field will not contain the *reply_to_message* field even if it itself is a reply.\n",
"name": "poll_message",
"required": false
},
{
"type": "String",
"description": "Unique identifier of the deleted option",
"html_description": "<td>Unique identifier of the deleted option</td>",
"rst_description": "Unique identifier of the deleted option\n",
"name": "option_persistent_id",
"required": true
},
{
"type": "String",
"description": "Option text",
"html_description": "<td>Option text</td>",
"rst_description": "Option text\n",
"name": "option_text",
"required": true
},
{
"type": "Array of MessageEntity",
"description": "Special entities that appear in the option_text",
"html_description": "<td><em>Optional</em>. Special entities that appear in the <em>option_text</em></td>",
"rst_description": "*Optional*. Special entities that appear in the *option_text*\n",
"name": "option_text_entities",
"required": false
}
],
"category": "types"
}
}

View file

@ -1,8 +1,8 @@
{ {
"meta": {}, "meta": {},
"group": { "group": {
"title": "Inline mode", "title": "Available types",
"anchor": "inline-mode" "anchor": "available-types"
}, },
"object": { "object": {
"anchor": "preparedinlinemessage", "anchor": "preparedinlinemessage",

View file

@ -0,0 +1,25 @@
{
"meta": {},
"group": {
"title": "Available types",
"anchor": "available-types"
},
"object": {
"anchor": "preparedkeyboardbutton",
"name": "PreparedKeyboardButton",
"description": "Describes a keyboard button to be used by a user of a Mini App.",
"html_description": "<p>Describes a keyboard button to be used by a user of a Mini App.</p>",
"rst_description": "Describes a keyboard button to be used by a user of a Mini App.",
"annotations": [
{
"type": "String",
"description": "Unique identifier of the keyboard button",
"html_description": "<td>Unique identifier of the keyboard button</td>",
"rst_description": "Unique identifier of the keyboard button\n",
"name": "id",
"required": true
}
],
"category": "types"
}
}

View file

@ -37,9 +37,9 @@
}, },
{ {
"type": "String", "type": "String",
"description": "Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including bold, italic, underline, strikethrough, spoiler, and custom_emoji entities. The message will fail to send if the quote isn't found in the original message.", "description": "Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including bold, italic, underline, strikethrough, spoiler, custom_emoji, and date_time entities. The message will fail to send if the quote isn't found in the original message.",
"html_description": "<td><em>Optional</em>. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, and <em>custom_emoji</em> entities. The message will fail to send if the quote isn't found in the original message.</td>", "html_description": "<td><em>Optional</em>. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, <em>custom_emoji</em>, and <em>date_time</em> entities. The message will fail to send if the quote isn't found in the original message.</td>",
"rst_description": "*Optional*. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities. The message will fail to send if the quote isn't found in the original message.\n", "rst_description": "*Optional*. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities. The message will fail to send if the quote isn't found in the original message.\n",
"name": "quote", "name": "quote",
"required": false "required": false
}, },
@ -74,6 +74,14 @@
"rst_description": "*Optional*. Identifier of the specific checklist task to be replied to\n", "rst_description": "*Optional*. Identifier of the specific checklist task to be replied to\n",
"name": "checklist_task_id", "name": "checklist_task_id",
"required": false "required": false
},
{
"type": "String",
"description": "Persistent identifier of the specific poll option to be replied to",
"html_description": "<td><em>Optional</em>. Persistent identifier of the specific poll option to be replied to</td>",
"rst_description": "*Optional*. Persistent identifier of the specific poll option to be replied to\n",
"name": "poll_option_id",
"required": false
} }
], ],
"category": "types" "category": "types"

View file

@ -1,8 +1,8 @@
{ {
"meta": {}, "meta": {},
"group": { "group": {
"title": "Inline mode", "title": "Available types",
"anchor": "inline-mode" "anchor": "available-types"
}, },
"object": { "object": {
"anchor": "sentwebappmessage", "anchor": "sentwebappmessage",

View file

@ -21,9 +21,9 @@
}, },
{ {
"type": "Array of MessageEntity", "type": "Array of MessageEntity",
"description": "Special entities that appear in the quote. Currently, only bold, italic, underline, strikethrough, spoiler, and custom_emoji entities are kept in quotes.", "description": "Special entities that appear in the quote. Currently, only bold, italic, underline, strikethrough, spoiler, custom_emoji, and date_time entities are kept in quotes.",
"html_description": "<td><em>Optional</em>. Special entities that appear in the quote. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, and <em>custom_emoji</em> entities are kept in quotes.</td>", "html_description": "<td><em>Optional</em>. Special entities that appear in the quote. Currently, only <em>bold</em>, <em>italic</em>, <em>underline</em>, <em>strikethrough</em>, <em>spoiler</em>, <em>custom_emoji</em>, and <em>date_time</em> entities are kept in quotes.</td>",
"rst_description": "*Optional*. Special entities that appear in the quote. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are kept in quotes.\n", "rst_description": "*Optional*. Special entities that appear in the quote. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are kept in quotes.\n",
"name": "entities", "name": "entities",
"required": false "required": false
}, },

View file

@ -202,6 +202,14 @@
"rst_description": "*Optional*. A boost was removed from a chat. The bot must be an administrator in the chat to receive these updates.\n", "rst_description": "*Optional*. A boost was removed from a chat. The bot must be an administrator in the chat to receive these updates.\n",
"name": "removed_chat_boost", "name": "removed_chat_boost",
"required": false "required": false
},
{
"type": "ManagedBotUpdated",
"description": "A new bot was created to be managed by the bot or token of a bot was changed",
"html_description": "<td><em>Optional</em>. A new bot was created to be managed by the bot or token of a bot was changed</td>",
"rst_description": "*Optional*. A new bot was created to be managed by the bot or token of a bot was changed\n",
"name": "managed_bot",
"required": false
} }
], ],
"category": "types" "category": "types"

View file

@ -130,6 +130,14 @@
"rst_description": "*Optional*. :code:`True`, if the bot allows users to create and delete topics in private chats. Returned only in :class:`aiogram.methods.get_me.GetMe`.\n", "rst_description": "*Optional*. :code:`True`, if the bot allows users to create and delete topics in private chats. Returned only in :class:`aiogram.methods.get_me.GetMe`.\n",
"name": "allows_users_to_create_topics", "name": "allows_users_to_create_topics",
"required": false "required": false
},
{
"type": "Boolean",
"description": "True, if other bots can be created to be controlled by the bot. Returned only in getMe.",
"html_description": "<td><em>Optional</em>. <em>True</em>, if other bots can be created to be controlled by the bot. Returned only in <a href=\"#getme\">getMe</a>.</td>",
"rst_description": "*Optional*. :code:`True`, if other bots can be created to be controlled by the bot. Returned only in :class:`aiogram.methods.get_me.GetMe`.\n",
"name": "can_manage_bots",
"required": false
} }
], ],
"category": "types" "category": "types"

View file

@ -0,0 +1,50 @@
Generate a Bot API changelog fragment for aiogram.
Arguments: $ARGUMENTS (format: `<issue_id> <changelog_url>`)
## Steps
1. Parse `$ARGUMENTS`: the first token is the issue/PR number (e.g. `1792`), the rest is the changelog URL (e.g. `https://core.telegram.org/bots/api-changelog#april-3-2026`).
2. Fetch the changelog URL using WebFetch. Extract **all** changes for the Bot API version anchored by that URL: new methods, new types, new/changed fields, new parameters, renamed fields, and any other notable changes.
3. Discover which aiogram modules were generated for the new symbols:
- New methods → search `aiogram/methods/<snake_case_name>.py` via Glob
- New types → search `aiogram/types/<snake_case_name>.py` via Glob
- Confirm every referenced module exists before writing it into the RST.
4. Create `CHANGES/<issue_id>.misc.rst` (overwrite if it exists) with the following RST structure, following the style used for previous Bot API updates in `CHANGES.rst`:
```rst
Updated to `Bot API X.Y <{url}>`_
**{Section heading — e.g. "Feature Area"}**
*New Methods:*
- Added :class:`aiogram.methods.<module>.<ClassName>` method - <short description>
*New Types:*
- Added :class:`aiogram.types.<module>.<ClassName>` type - <short description>
*New Fields:*
- Added :code:`<field>` field to :class:`aiogram.types.<module>.<ClassName>` - <short description>
*New Parameters for* :class:`aiogram.methods.<module>.<ClassName>`:
- Added :code:`<param>` - <short description>
```
Rules for writing the RST:
- Use `:class:`` for types and methods, `:meth:`` for shortcuts, `:code:`` for field/parameter names.
- Module paths must be the full dotted path (e.g. `aiogram.types.poll_option.PollOption`), always verified against real files.
- If a symbol has a shortcut method on a type, mention it with `:meth:`.
- Group related changes under bold section headings (e.g. **Polls**, **Managed Bots**).
- Within each section use italic sub-headings (*New Methods:*, *New Types:*, *New Fields:*, *New Parameters for ...:*) — omit a sub-heading if there is nothing to list under it.
- Describe each item with a brief, user-facing sentence after the dash.
- Do not add a trailing newline after the last bullet.
- Do not include an issue/PR back-reference link (towncrier adds that automatically).
5. Print the path of the created file and confirm it is done.

2
.serena/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/cache
/project.local.yml

View file

@ -0,0 +1,42 @@
# Code Style & Conventions
## General
- `from __future__ import annotations` at the top of every Python file
- Full type hints on all function signatures and class fields
- Max line length: **99** characters (ruff enforced)
- snake_case for Python names; camelCase used only in `__api_method__` strings
## Pydantic models
- All Telegram types extend `TelegramObject(BotContextController, BaseModel)` from `aiogram/types/base.py`
- `TelegramObject` is frozen; use `MutableTelegramObject` when mutation is needed
- Fields default to `None` for optional API parameters; use `Field(None, json_schema_extra={"deprecated": True})` for deprecated fields
- Use `Default("key")` sentinel (from `aiogram.client.default`) for user-configurable defaults like `parse_mode`, `protect_content`
- `TYPE_CHECKING` guards for circular imports — keep runtime imports lean
## API Methods
- Each method is a class inheriting `TelegramMethod[ReturnType]` from `aiogram/methods/base.py`
- Required class attrs: `__returning__` (return type), `__api_method__` (camelCase string)
- Fields with `None` default = optional param
- Method docstring format: short description + `Source: https://core.telegram.org/bots/api#methodname`
- File name: snake_case of method name (e.g., `SendMessage``send_message.py`)
## Imports order (ruff/isort enforced)
1. stdlib
2. third-party
3. `aiogram` (first-party)
4. relative imports
## Ruff rules enforced
- A (annotations), B (bugbear), C4 (comprehensions), DTZ (datetimez), E, F, I (isort), PERF, PL (pylint), Q (quotes), RET, SIM, T10, T20, UP (pyupgrade)
- Several PLR rules disabled (Telegram API naturally has many params/methods)
- `F401` disabled (re-exports in `__init__.py` intentional)
## Code generation convention
- **Never hand-edit generated files** (`.butcher/**/entity.json`, auto-generated `aiogram/types/*.py`, `aiogram/methods/*.py`, `aiogram/enums/*.py`)
- Add features via `.butcher` YAML config/aliases + templates, then regenerate
- After codegen: always run lint + mypy
## Naming patterns
- Enums: PascalCase class, UPPER_SNAKE members (e.g., `ContentType.TEXT`)
- Test files: `test_<module_name>.py`
- Test classes: `Test<ClassName>` with `async def test_<scenario>(self, bot: MockedBot)`

View file

@ -0,0 +1,84 @@
# Codebase Structure
## Top-level layout
```
aiogram/ # Main package
.butcher/ # Code generation inputs (DO NOT edit entity.json files)
tests/ # Test suite
docs/ # Sphinx documentation (RST)
examples/ # Example bot scripts
scripts/ # Version bump scripts
CHANGES/ # Towncrier changelog fragments (CHANGES/<issue>.<category>.rst)
```
## aiogram/ package
```
aiogram/
├── __init__.py # Public API re-exports
├── __meta__.py # Version (hatch reads this)
├── exceptions.py # Framework exceptions
├── loggers.py # Named loggers
├── client/
│ ├── bot.py # Bot class — all API methods as async shortcuts
│ ├── session/ # HTTP session backends (aiohttp, base)
│ ├── default.py # Default() sentinel for configurable defaults
│ └── context_controller.py # Bot context injection into models
├── types/
│ ├── base.py # TelegramObject (Pydantic BaseModel), MutableTelegramObject
│ ├── *.py # One file per Telegram type
│ └── __init__.py # Exports all types
├── methods/
│ ├── base.py # TelegramMethod[T] base class
│ ├── *.py # One file per API method (e.g., send_message.py → SendMessage)
│ └── __init__.py
├── enums/
│ ├── content_type.py # ContentType enum
│ ├── update_type.py # UpdateType enum
│ └── *.py
├── dispatcher/
│ ├── dispatcher.py # Dispatcher (main update processor)
│ ├── router.py # Router (Blueprint-style routing)
│ ├── middlewares/ # Middleware system
│ ├── event/ # Event observer, typed decorators
│ └── flags/ # Handler flags
├── filters/ # Built-in filters (Command, StateFilter, etc.)
├── fsm/
│ ├── context.py # FSMContext
│ ├── state.py # State, StatesGroup
│ └── storage/ # Memory, Redis, MongoDB storage backends
├── handlers/ # Base handler types
├── utils/
│ ├── keyboard.py # Keyboard builder utilities
│ ├── text_decorations.py # HTML/Markdown formatting
│ └── i18n/ # Internationalization support
└── webhook/ # Webhook integrations (aiohttp, SimpleRequestHandler, etc.)
```
## .butcher/ (Code generation)
```
.butcher/
├── schema/schema.json # Full Bot API schema (source of truth)
├── types/ # Per-type entity.json + optional alias YAML overrides
├── methods/ # Per-method entity.json + optional alias YAML overrides
├── enums/ # Per-enum entity.json + optional YAML overrides
└── templates/ # Jinja2 templates for generated Python files
```
**Rule**: Edit `.yml` alias files or templates in `.butcher/`, never `.entity.json` files directly. Regenerate after changes.
## tests/ layout
```
tests/
├── conftest.py # Shared fixtures (bot, dispatcher, etc.)
├── mocked_bot.py # MockedBot for testing without real HTTP
├── test_api/
│ ├── test_types/ # Tests for Telegram types
│ ├── test_methods/ # Tests for API method classes
│ └── test_client/ # HTTP client tests
├── test_dispatcher/ # Dispatcher/Router/Middleware tests
├── test_filters/ # Filter tests
├── test_fsm/ # FSM and storage tests
├── test_handler/ # Handler tests
├── test_utils/ # Utility tests
└── test_webhook/ # Webhook integration tests
```

View file

@ -0,0 +1,44 @@
# Bot API Codegen Workflow
## How code generation works
aiogram uses `butcher` (via `aiogram-cli`) to auto-generate Python files from the Telegram Bot API schema.
### Source of truth
- `.butcher/schema/schema.json` — full parsed Bot API schema
- `.butcher/types/<TypeName>/entity.json` — parsed entity metadata (DO NOT edit)
- `.butcher/methods/<MethodName>/entity.json` — parsed method metadata (DO NOT edit)
- `.butcher/enums/<EnumName>/entity.json` — parsed enum metadata (DO NOT edit)
- `.butcher/templates/` — Jinja2 templates that produce Python code
- YAML alias/override files in `.butcher/types/`, `.butcher/methods/` — edit these for customizations
### Generated files (DO NOT hand-edit)
- `aiogram/types/*.py` (except `base.py`, `custom.py`, `_union.py` — framework internals)
- `aiogram/methods/*.py` (except `base.py`)
- `aiogram/enums/*.py`
- `aiogram/client/bot.py` (the `Bot` class shortcuts)
- `aiogram/types/__init__.py`, `aiogram/methods/__init__.py`
### Regeneration commands
```bash
uv run --extra cli butcher parse # re-parse from API schema
uv run --extra cli butcher refresh # refresh entity JSON from parsed schema
uv run --extra cli butcher apply all # apply templates → generate Python files
```
### Adding a new type/method/shortcut
1. Update the `.butcher` YAML alias/config file for the entity
2. Run regeneration (parse → refresh → apply)
3. Run lint + mypy + tests
4. Commit both the `.butcher` config changes AND the generated Python files
### API version bumps (maintainers)
```bash
make update-api args=patch # or minor/major
```
This runs butcher parse/refresh/apply + version bump scripts that update:
- `aiogram/__meta__.py`
- `README.rst`
- `docs/index.rst`
## Key constraint
The maintainers enforce: **never add types/methods/shortcuts by hand-editing generated files**. All changes must go through `.butcher` config so future regenerations preserve them.

View file

@ -0,0 +1,43 @@
# Adding a New Update/Event Type to aiogram Dispatcher
When Telegram Bot API adds a new update type (e.g. `managed_bot`, `purchased_paid_media`), the following files must be touched. Types, enums, and butcher configs are generated — the dispatcher integration is manual.
## Checklist (in order)
### Generated / butcher layer (run `butcher parse && butcher refresh && butcher apply all`)
- `.butcher/types/<TypeName>/entity.json` — type definition
- `.butcher/types/Update/entity.json` — add field to Update entity
- `aiogram/types/<type_name>.py` — generated type class
- `aiogram/types/__init__.py` — export
- `aiogram/enums/update_type.py``NEW_TYPE = "new_type"` enum member
- `aiogram/types/update.py``new_type: NewType | None = None` field + TYPE_CHECKING import + `__init__` signature
### Manual dispatcher integration (NOT generated)
1. **`aiogram/types/update.py`** — `event_type` property (lines ~161-215): add `if self.new_type: return "new_type"` before the `raise UpdateTypeLookupError` line
2. **`aiogram/dispatcher/router.py`** — two places in `Router.__init__`:
- Add `self.new_type = TelegramEventObserver(router=self, event_name="new_type")` after the last observer attribute (before `self.errors`)
- Add `"new_type": self.new_type,` to the `self.observers` dict (before `"error"`)
3. **`aiogram/dispatcher/middlewares/user_context.py`** — `resolve_event_context()` method: add `if event.new_type: return EventContext(user=..., chat=...)` before `return EventContext()`. Use `user` field for user-scoped events, `chat` for chat-scoped. No `business_connection_id` unless the event has one.
### Tests (manual)
4. **`tests/test_dispatcher/test_dispatcher.py`** — add `pytest.param("new_type", Update(update_id=42, new_type=NewType(...)), has_chat, has_user)` to `test_listen_update` parametrize list. Import `NewType` in the imports block.
5. **`tests/test_dispatcher/test_router.py`** — add `assert router.observers["new_type"] == router.new_type` to `test_observers_config`
### Docs (generated or manual stub)
- `docs/api/types/<type_name>.rst` — RST stub
- `docs/api/types/index.rst` — add to index
## Key invariants
- The snake_case name must be identical across: `UpdateType` enum value, `Update` field name, `event_type` return string, Router attribute name, observers dict key, and `TelegramEventObserver(event_name=...)`.
- `Update.event_type` uses `@lru_cache()` — never mutate Update fields after construction.
- The routing machinery (`propagate_event`, middleware chains, sub-router propagation) requires **zero changes** — it operates on observer names looked up dynamically.
## Example: `managed_bot` (API 9.6)
- Type: `ManagedBotUpdated` with fields `user: User` (creator) and `bot_user: User` (the managed bot)
- user_context: `EventContext(user=event.managed_bot.user)` — user only, no chat
- `has_chat=False, has_user=True` in test parametrization

View file

@ -0,0 +1,43 @@
# Project Overview: aiogram
## Purpose
**aiogram** is a modern, fully asynchronous Python framework for the Telegram Bot API (currently supports Bot API 9.5+). It provides a high-level interface for building Telegram bots using asyncio.
## Tech Stack
- **Python**: 3.103.14 (also supports PyPy)
- **Async runtime**: asyncio + aiohttp (HTTP client)
- **Data validation**: Pydantic v2
- **Package manager**: `uv`
- **Linter/formatter**: `ruff` (check + format)
- **Type checker**: `mypy`
- **Testing**: `pytest` with `pytest-asyncio`, `aresponses`
- **Docs**: Sphinx (reStructuredText), `sphinx-autobuild`
- **Changelog**: `towncrier`
- **Code generation**: `butcher` (aiogram-cli) — generates types, methods, enums from Bot API schema
## Key Links
- Docs (English): https://docs.aiogram.dev/en/dev-3.x/
- GitHub: https://github.com/aiogram/aiogram/
- Bot API schema: `.butcher/schema/schema.json`
## Architecture Summary
The framework is layered:
1. **`aiogram/client/`** — `Bot` class (all API methods as shortcuts), session management, context controller
2. **`aiogram/types/`** — Pydantic models for all Telegram types (`TelegramObject` base)
3. **`aiogram/methods/`** — `TelegramMethod[ReturnType]` subclasses, one per Bot API method
4. **`aiogram/dispatcher/`** — Dispatcher, Router (blueprints), middleware, event observers
5. **`aiogram/filters/`** — Filter classes for routing
6. **`aiogram/fsm/`** — Finite State Machine (states, storage backends)
7. **`aiogram/enums/`** — Enumerations (ContentType, UpdateType, etc.)
8. **`aiogram/utils/`** — Text decoration, keyboards, i18n, etc.
9. **`aiogram/webhook/`** — Webhook server integrations (aiohttp, FastAPI, etc.)
10. **`.butcher/`** — Code generation inputs: YAML/JSON configs for types/methods/enums + Jinja2 templates
## Optional extras
- `fast` — uvloop + aiodns
- `redis` — Redis FSM storage
- `mongo` — MongoDB FSM storage
- `proxy` — SOCKS proxy support
- `i18n` — Babel-based i18n
- `cli``butcher` codegen CLI
- `signature` — cryptographic signature verification

View file

@ -0,0 +1,66 @@
# Suggested Commands
## Setup
```bash
uv sync --all-extras --group dev --group test
uv run pre-commit install
```
## Lint & Format (quick loop — use before every commit)
```bash
uv run ruff check --show-fixes --preview aiogram examples
uv run ruff format --check --diff aiogram tests scripts examples
uv run mypy aiogram
```
## Auto-fix formatting
```bash
uv run ruff format aiogram tests scripts examples
uv run ruff check --fix aiogram tests scripts examples
```
## Run tests
```bash
uv run pytest tests # basic
uv run pytest tests --redis redis://localhost:6379/0 # with Redis
uv run pytest tests --mongo mongodb://mongo:mongo@localhost:27017 # with MongoDB
```
## Build docs
```bash
# Live-reload dev server
uv run --extra docs sphinx-autobuild --watch aiogram/ --watch CHANGES.rst --watch README.rst docs/ docs/_build/
# One-shot build
uv run --extra docs bash -c 'cd docs && make html'
```
## Code generation (Bot API codegen)
```bash
# After editing .butcher/*.yml or templates:
uv run --extra cli butcher parse
uv run --extra cli butcher refresh
uv run --extra cli butcher apply all
```
## API version bump (maintainers only)
```bash
make update-api args=patch # runs butcher parse/refresh/apply + version bump
```
## Changelog
```bash
# Preview draft
uv run --extra docs towncrier build --draft
# Build final
uv run --extra docs towncrier build --yes
```
## Clean build artifacts
```bash
make clean
```
## Build package
```bash
uv build
```

View file

@ -0,0 +1,43 @@
# Task Completion Checklist
Run these before marking any task done or requesting review.
## Quick loop (every PR)
```bash
uv run ruff check --show-fixes --preview aiogram examples
uv run ruff format --check --diff aiogram tests scripts examples
uv run mypy aiogram
uv run pytest tests
```
## Codegen tasks (when touching .butcher/ or generated API files)
```bash
uv run --extra cli butcher parse
uv run --extra cli butcher refresh
uv run --extra cli butcher apply all
# Then re-run quick loop
```
## Integration tests (only if Redis/Mongo storage touched)
```bash
uv run pytest --redis redis://localhost:6379/0 tests
uv run pytest --mongo mongodb://mongo:mongo@localhost:27017 tests
```
## Docs (only if docs/ or public API changed)
```bash
uv run --extra docs bash -c 'cd docs && make html'
```
## Changelog fragment (required unless PR has `skip news` label)
- Create `CHANGES/<issue-or-pr-number>.<category>.rst`
- Valid categories: `feature`, `bugfix`, `doc`, `removal`, `misc`
- Content: user-visible behavior description (not internal/process details)
- Do NOT edit `CHANGES.rst` directly
## PR quality checklist
1. Tests added/updated for all behavior changes
2. Quick loop passes (ruff + mypy + pytest)
3. Changelog fragment added (or justified `skip news`)
4. If codegen-related: both `.butcher` source config AND generated files updated
5. PR body has clear reproduction/validation steps

View file

@ -0,0 +1,45 @@
# Testing Patterns
## Framework
- pytest with async support
- No `pytest-asyncio` explicit marks needed (configured globally in pyproject.toml)
- `MockedBot` (tests/mocked_bot.py) — use for all bot method tests, no real HTTP
## MockedBot pattern
```python
from tests.mocked_bot import MockedBot
from aiogram.methods import SendMessage
from aiogram.types import Message, Chat
import datetime
class TestSendMessage:
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(
SendMessage,
ok=True,
result=Message(
message_id=42,
date=datetime.datetime.now(),
text="test",
chat=Chat(id=42, type="private"),
),
)
response: Message = await bot.send_message(chat_id=42, text="test")
bot.get_request()
assert response == prepare_result.result
```
## Test structure
- Class per type/method: `class TestSendMessage:`
- One test per scenario: `async def test_<scenario>(self, ...)`
- `bot` fixture comes from `tests/conftest.py`
## Integration tests
- Redis: `uv run pytest --redis redis://localhost:6379/0 tests`
- MongoDB: `uv run pytest --mongo mongodb://mongo:mongo@localhost:27017 tests`
- Only run these when Redis/Mongo storage code is affected
## What NOT to do
- Do not mock the database/storage in FSM tests — use real backends or memory storage
- Do not introduce new test dependencies for small tests
- Keep test style consistent with existing suite

152
.serena/project.yml Normal file
View file

@ -0,0 +1,152 @@
# the name by which the project can be referenced within Serena
project_name: "aiogram3"
# list of languages for which language servers are started; choose from:
# al bash clojure cpp csharp
# csharp_omnisharp dart elixir elm erlang
# fortran fsharp go groovy haskell
# java julia kotlin lua markdown
# matlab nix pascal perl php
# php_phpactor powershell python python_jedi r
# rego ruby ruby_solargraph rust scala
# swift terraform toml typescript typescript_vts
# vue yaml zig
# (This list may be outdated. For the current list, see values of Language enum here:
# https://github.com/oraios/serena/blob/main/src/solidlsp/ls_config.py
# For some languages, there are alternative language servers, e.g. csharp_omnisharp, ruby_solargraph.)
# Note:
# - For C, use cpp
# - For JavaScript, use typescript
# - For Free Pascal/Lazarus, use pascal
# Special requirements:
# Some languages require additional setup/installations.
# See here for details: https://oraios.github.io/serena/01-about/020_programming-languages.html#language-servers
# When using multiple languages, the first language server that supports a given file will be used for that file.
# The first language is the default language and the respective language server will be used as a fallback.
# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
languages:
- python
# the encoding used by text files in the project
# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings
encoding: "utf-8"
# line ending convention to use when writing source files.
# Possible values: unset (use global setting), "lf", "crlf", or "native" (platform default)
# This does not affect Serena's own files (e.g. memories and configuration files), which always use native line endings.
line_ending:
# The language backend to use for this project.
# If not set, the global setting from serena_config.yml is used.
# Valid values: LSP, JetBrains
# Note: the backend is fixed at startup. If a project with a different backend
# is activated post-init, an error will be returned.
language_backend:
# whether to use project's .gitignore files to ignore files
ignore_all_files_in_gitignore: true
# advanced configuration option allowing to configure language server-specific options.
# Maps the language key to the options.
# Have a look at the docstring of the constructors of the LS implementations within solidlsp (e.g., for C# or PHP) to see which options are available.
# No documentation on options means no options are available.
ls_specific_settings: {}
# list of additional paths to ignore in this project.
# Same syntax as gitignore, so you can use * and **.
# Note: global ignored_paths from serena_config.yml are also applied additively.
ignored_paths: []
# whether the project is in read-only mode
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
# Added on 2025-04-18
read_only: false
# list of tool names to exclude.
# This extends the existing exclusions (e.g. from the global configuration)
#
# Below is the complete list of tools for convenience.
# To make sure you have the latest list of tools, and to view their descriptions,
# execute `uv run scripts/print_tool_overview.py`.
#
# * `activate_project`: Activates a project by name.
# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
# * `create_text_file`: Creates/overwrites a file in the project directory.
# * `delete_lines`: Deletes a range of lines within a file.
# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
# * `execute_shell_command`: Executes a shell command.
# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
# * `initial_instructions`: Gets the initial instructions for the current project.
# Should only be used in settings where the system prompt cannot be set,
# e.g. in clients you have no control over, like Claude Desktop.
# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
# * `insert_at_line`: Inserts content at a given line in a file.
# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
# * `list_memories`: Lists memories in Serena's project-specific memory store.
# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
# * `read_file`: Reads a file within the project directory.
# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
# * `remove_project`: Removes a project from the Serena configuration.
# * `replace_lines`: Replaces a range of lines within a file with new content.
# * `replace_symbol_body`: Replaces the full definition of a symbol.
# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
# * `search_for_pattern`: Performs a search for a pattern in the project.
# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
# * `switch_modes`: Activates modes by providing a list of their names
# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
excluded_tools: []
# list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default).
# This extends the existing inclusions (e.g. from the global configuration).
included_optional_tools: []
# fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools.
# This cannot be combined with non-empty excluded_tools or included_optional_tools.
fixed_tools: []
# list of mode names to that are always to be included in the set of active modes
# The full set of modes to be activated is base_modes + default_modes.
# If the setting is undefined, the base_modes from the global configuration (serena_config.yml) apply.
# Otherwise, this setting overrides the global configuration.
# Set this to [] to disable base modes for this project.
# Set this to a list of mode names to always include the respective modes for this project.
base_modes:
# list of mode names that are to be activated by default.
# The full set of modes to be activated is base_modes + default_modes.
# If the setting is undefined, the default_modes from the global configuration (serena_config.yml) apply.
# Otherwise, this overrides the setting from the global configuration (serena_config.yml).
# This setting can, in turn, be overridden by CLI parameters (--mode).
default_modes:
# initial prompt for the project. It will always be given to the LLM upon activating the project
# (contrary to the memories, which are loaded on demand).
initial_prompt: ""
# time budget (seconds) per tool call for the retrieval of additional symbol information
# such as docstrings or parameter information.
# This overrides the corresponding setting in the global configuration; see the documentation there.
# If null or missing, use the setting from the global configuration.
symbol_info_budget:
# list of regex patterns which, when matched, mark a memory entry as readonly.
# Extends the list from the global configuration, merging the two lists.
read_only_memory_patterns: []
# list of regex patterns for memories to completely ignore.
# Matching memories will not appear in list_memories or activate_project output
# and cannot be accessed via read_memory or write_memory.
# To access ignored memory files, use the read_file tool on the raw file path.
# Extends the list from the global configuration, merging the two lists.
# Example: ["_archive/.*", "_episodes/.*"]
ignored_memory_patterns: []

View file

@ -19,6 +19,17 @@ uv run pre-commit install
Note: `uv run pre-commit install` writes hooks to the shared repository `.git/hooks` Note: `uv run pre-commit install` writes hooks to the shared repository `.git/hooks`
(common for all worktrees), not only for the current worktree. (common for all worktrees), not only for the current worktree.
## Codebase Navigation
Use **Serena MCP** for all codebase navigation tasks. Serena provides semantic, symbol-aware tools that are more efficient than raw file reads:
- `get_symbols_overview` — list classes/methods in a file without reading the full body
- `find_symbol` — locate a specific class, method, or field by name path
- `find_referencing_symbols` — find all usages of a symbol across the codebase
- `search_for_pattern` — regex search when symbol names are unknown
Prefer Serena's symbol tools over `Read`/`Grep` for source code exploration. Only fall back to file-based tools when Serena is unavailable or for non-code files (JSON configs, Markdown, etc.).
## Mandatory local checks before PR ## Mandatory local checks before PR
Code style/lint in this repository is enforced via Ruff (`ruff check` + `ruff format`). Code style/lint in this repository is enforced via Ruff (`ruff check` + `ruff format`).

View file

@ -16,7 +16,85 @@ Changelog
.. towncrier release notes start .. towncrier release notes start
3.25.0 (2026-03-03) 3.27.0 (2026-04-04)
====================
Features
--------
- Added `__eq__` and `__hash__` methods to the `Default` class.
`#1707 <https://github.com/aiogram/aiogram/issues/1707>`_
Bugfixes
--------
- ``CommandStart(deep_link=False)`` now correctly rejects messages that contain deep-link arguments. Previously ``deep_link=False`` (the default) did not distinguish between ``/start`` and ``/start <payload>``. The default is changed to ``None`` (accept both) to preserve backward compatibility.
`#1713 <https://github.com/aiogram/aiogram/issues/1713>`_
- Fixed ``HtmlDecoration.custom_emoji()`` to use the correct ``emoji-id`` attribute name instead of ``emoji_id`` in the ``<tg-emoji>`` tag, matching the Telegram Bot API specification.
`#1782 <https://github.com/aiogram/aiogram/issues/1782>`_
- Remove redundant list() around sorted() and fix router type name in validation error message
`#1788 <https://github.com/aiogram/aiogram/issues/1788>`_
Misc
----
- Updated to `Bot API 9.6 <https://core.telegram.org/bots/api-changelog#april-3-2026>`_
**Managed Bots**
*New Methods:*
- Added :class:`aiogram.methods.get_managed_bot_token.GetManagedBotToken` method - retrieves the token of a managed bot
- Added :class:`aiogram.methods.replace_managed_bot_token.ReplaceManagedBotToken` method - generates a new token for a managed bot, invalidating the previous one
- Added :class:`aiogram.methods.save_prepared_keyboard_button.SavePreparedKeyboardButton` method - saves a keyboard button to be used in Mini Apps via :code:`requestChat`
*New Types:*
- Added :class:`aiogram.types.keyboard_button_request_managed_bot.KeyboardButtonRequestManagedBot` type - defines criteria for selecting a managed bot via a keyboard button
- Added :class:`aiogram.types.managed_bot_created.ManagedBotCreated` type - describes a service message about a managed bot being created
- Added :class:`aiogram.types.managed_bot_updated.ManagedBotUpdated` type - describes updates to a managed bot
- Added :class:`aiogram.types.prepared_keyboard_button.PreparedKeyboardButton` type - represents a prepared keyboard button for use in Mini Apps
*New Fields:*
- Added :code:`can_manage_bots` field to :class:`aiogram.types.user.User` - indicates whether the bot can manage other bots
- Added :code:`request_managed_bot` field to :class:`aiogram.types.keyboard_button.KeyboardButton` - requests the user to select a managed bot
- Added :code:`managed_bot_created` field to :class:`aiogram.types.message.Message` - service message about a managed bot being created (type: :class:`aiogram.types.managed_bot_created.ManagedBotCreated`)
- Added :code:`managed_bot` field to :class:`aiogram.types.update.Update` - contains updates received by a managed bot
**Polls**
*New Types:*
- Added :class:`aiogram.types.poll_option_added.PollOptionAdded` type - describes a service message about a new option added to a poll
- Added :class:`aiogram.types.poll_option_deleted.PollOptionDeleted` type - describes a service message about a poll option being deleted
*New Fields:*
- Replaced :code:`correct_option_id` with :code:`correct_option_ids` in :class:`aiogram.types.poll.Poll` - supports multiple correct answers for quiz polls
- Added :code:`allows_revoting` field to :class:`aiogram.types.poll.Poll` - indicates whether users are allowed to change their vote
- Added :code:`description` and :code:`description_entities` fields to :class:`aiogram.types.poll.Poll` - optional poll description with formatting entities
- Added :code:`persistent_id` field to :class:`aiogram.types.poll_option.PollOption` - stable identifier for a poll option
- Added :code:`added_by_user` and :code:`added_by_chat` fields to :class:`aiogram.types.poll_option.PollOption` - identifies who added the option
- Added :code:`addition_date` field to :class:`aiogram.types.poll_option.PollOption` - date when the option was added
- Added :code:`option_persistent_ids` field to :class:`aiogram.types.poll_answer.PollAnswer` - persistent IDs of the chosen options
- Added :code:`poll_option_id` field to :class:`aiogram.types.reply_parameters.ReplyParameters` - allows replying to a specific poll option
- Added :code:`reply_to_poll_option_id` field to :class:`aiogram.types.message.Message` - the persistent ID of the poll option the message replies to
*New Parameters for* :class:`aiogram.methods.send_poll.SendPoll`:
- Replaced :code:`correct_option_id` with :code:`correct_option_ids` - supports multiple correct answers for quiz polls
- Added :code:`allows_revoting` - allows users to change their vote after submission
- Added :code:`shuffle_options` - randomizes the order of poll options for each user
- Added :code:`allow_adding_options` - allows users to add their own poll options
- Added :code:`hide_results_until_closes` - hides vote results until the poll is closed
- Added :code:`description`, :code:`description_parse_mode`, :code:`description_entities` - optional poll description with parse mode and formatting
`#1792 <https://github.com/aiogram/aiogram/issues/1792>`_
3.26.0 (2026-03-03)
==================== ====================
Bugfixes Bugfixes

View file

@ -52,7 +52,7 @@ Features
- Asynchronous (`asyncio docs <https://docs.python.org/3/library/asyncio.html>`_, :pep:`492`) - Asynchronous (`asyncio docs <https://docs.python.org/3/library/asyncio.html>`_, :pep:`492`)
- Has type hints (:pep:`484`) and can be used with `mypy <http://mypy-lang.org/>`_ - Has type hints (:pep:`484`) and can be used with `mypy <http://mypy-lang.org/>`_
- Supports `PyPy <https://www.pypy.org/>`_ - Supports `PyPy <https://www.pypy.org/>`_
- Supports `Telegram Bot API 9.5 <https://core.telegram.org/bots/api>`_ and gets fast updates to the latest versions of the Bot API - Supports `Telegram Bot API 9.6 <https://core.telegram.org/bots/api>`_ and gets fast updates to the latest versions of the Bot API
- Telegram Bot API integration code was `autogenerated <https://github.com/aiogram/tg-codegen>`_ and can be easily re-generated when API gets updated - Telegram Bot API integration code was `autogenerated <https://github.com/aiogram/tg-codegen>`_ and can be easily re-generated when API gets updated
- Updates router (Blueprints) - Updates router (Blueprints)
- Has Finite State Machine - Has Finite State Machine

View file

@ -1,2 +1,2 @@
__version__ = "3.26.0" __version__ = "3.27.0"
__api_version__ = "9.5" __api_version__ = "9.6"

View file

@ -80,6 +80,7 @@ from ..methods import (
GetFile, GetFile,
GetForumTopicIconStickers, GetForumTopicIconStickers,
GetGameHighScores, GetGameHighScores,
GetManagedBotToken,
GetMe, GetMe,
GetMyCommands, GetMyCommands,
GetMyDefaultAdministratorRights, GetMyDefaultAdministratorRights,
@ -110,11 +111,13 @@ from ..methods import (
RemoveUserVerification, RemoveUserVerification,
ReopenForumTopic, ReopenForumTopic,
ReopenGeneralForumTopic, ReopenGeneralForumTopic,
ReplaceManagedBotToken,
ReplaceStickerInSet, ReplaceStickerInSet,
RepostStory, RepostStory,
RestrictChatMember, RestrictChatMember,
RevokeChatInviteLink, RevokeChatInviteLink,
SavePreparedInlineMessage, SavePreparedInlineMessage,
SavePreparedKeyboardButton,
SendAnimation, SendAnimation,
SendAudio, SendAudio,
SendChatAction, SendChatAction,
@ -216,6 +219,7 @@ from ..types import (
InputProfilePhotoUnion, InputProfilePhotoUnion,
InputSticker, InputSticker,
InputStoryContentUnion, InputStoryContentUnion,
KeyboardButton,
LabeledPrice, LabeledPrice,
LinkPreviewOptions, LinkPreviewOptions,
MaskPosition, MaskPosition,
@ -228,6 +232,7 @@ from ..types import (
PassportElementErrorUnion, PassportElementErrorUnion,
Poll, Poll,
PreparedInlineMessage, PreparedInlineMessage,
PreparedKeyboardButton,
ReactionTypeUnion, ReactionTypeUnion,
ReplyMarkupUnion, ReplyMarkupUnion,
ReplyParameters, ReplyParameters,
@ -3008,13 +3013,20 @@ class Bot:
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
@ -3022,6 +3034,7 @@ class Bot:
reply_parameters: ReplyParameters | None = None, reply_parameters: ReplyParameters | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
reply_to_message_id: int | None = None, reply_to_message_id: int | None = None,
request_timeout: int | None = None, request_timeout: int | None = None,
) -> Message: ) -> Message:
@ -3039,14 +3052,21 @@ class Bot:
:param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode* :param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode*
:param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True` :param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True`
:param type: Poll type, 'quiz' or 'regular', defaults to 'regular' :param type: Poll type, 'quiz' or 'regular', defaults to 'regular'
:param allows_multiple_answers: :code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False` :param allows_multiple_answers: Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode :param allows_revoting: Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls
:param shuffle_options: Pass :code:`True`, if the poll options must be shown in random order
:param allow_adding_options: Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes
:param hide_results_until_closes: Pass :code:`True`, if poll results must be shown only after the poll closes
:param correct_option_ids: A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode
:param explanation: 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 with at most 2 line feeds after entities parsing :param explanation: 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 with at most 2 line feeds after entities parsing
:param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. :param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode* :param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*
:param open_period: Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*. :param open_period: Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.
:param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*. :param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.
:param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview. :param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.
:param description: Description of the poll to be sent, 0-1024 characters after entities parsing
:param description_parse_mode: Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param description_entities: A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*
:param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound. :param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.
:param protect_content: Protects the contents of the sent message from forwarding and saving :param protect_content: Protects the contents of the sent message from forwarding and saving
:param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance :param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance
@ -3054,6 +3074,7 @@ class Bot:
:param reply_parameters: Description of the message to reply to :param reply_parameters: Description of the message to reply to
:param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user :param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user
:param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found :param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode
:param reply_to_message_id: If the message is a reply, ID of the original message :param reply_to_message_id: If the message is a reply, ID of the original message
:param request_timeout: Request timeout :param request_timeout: Request timeout
:return: On success, the sent :class:`aiogram.types.message.Message` is returned. :return: On success, the sent :class:`aiogram.types.message.Message` is returned.
@ -3070,13 +3091,20 @@ class Bot:
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
@ -3084,6 +3112,7 @@ class Bot:
reply_parameters=reply_parameters, reply_parameters=reply_parameters,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
reply_to_message_id=reply_to_message_id, reply_to_message_id=reply_to_message_id,
) )
return await self(call, request_timeout=request_timeout) return await self(call, request_timeout=request_timeout)
@ -4904,8 +4933,8 @@ class Bot:
:param chat_id: Required if *user_id* is not specified. Unique identifier for the chat or username of the channel (in the format :code:`@channelusername`) that will receive the gift. :param chat_id: Required if *user_id* is not specified. Unique identifier for the chat or username of the channel (in the format :code:`@channelusername`) that will receive the gift.
:param pay_for_upgrade: Pass :code:`True` to pay for the gift upgrade from the bot's balance, thereby making the upgrade free for the receiver :param pay_for_upgrade: Pass :code:`True` to pay for the gift upgrade from the bot's balance, thereby making the upgrade free for the receiver
:param text: Text that will be shown along with the gift; 0-128 characters :param text: Text that will be shown along with the gift; 0-128 characters
:param text_parse_mode: Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored. :param text_parse_mode: Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.
:param text_entities: A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored. :param text_entities: A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.
:param request_timeout: Request timeout :param request_timeout: Request timeout
:return: Returns :code:`True` on success. :return: Returns :code:`True` on success.
""" """
@ -5232,8 +5261,8 @@ class Bot:
:param month_count: Number of months the Telegram Premium subscription will be active for the user; must be one of 3, 6, or 12 :param month_count: Number of months the Telegram Premium subscription will be active for the user; must be one of 3, 6, or 12
:param star_count: Number of Telegram Stars to pay for the Telegram Premium subscription; must be 1000 for 3 months, 1500 for 6 months, and 2500 for 12 months :param star_count: Number of Telegram Stars to pay for the Telegram Premium subscription; must be 1000 for 3 months, 1500 for 6 months, and 2500 for 12 months
:param text: Text that will be shown along with the service message about the subscription; 0-128 characters :param text: Text that will be shown along with the service message about the subscription; 0-128 characters
:param text_parse_mode: Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored. :param text_parse_mode: Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.
:param text_entities: A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored. :param text_entities: A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored.
:param request_timeout: Request timeout :param request_timeout: Request timeout
:return: Returns :code:`True` on success. :return: Returns :code:`True` on success.
""" """
@ -5938,3 +5967,66 @@ class Bot:
tag=tag, tag=tag,
) )
return await self(call, request_timeout=request_timeout) return await self(call, request_timeout=request_timeout)
async def get_managed_bot_token(
self,
user_id: int,
request_timeout: int | None = None,
) -> str:
"""
Use this method to get the token of a managed bot. Returns the token as *String* on success.
Source: https://core.telegram.org/bots/api#getmanagedbottoken
:param user_id: User identifier of the managed bot whose token will be returned
:param request_timeout: Request timeout
:return: Returns the token as *String* on success.
"""
call = GetManagedBotToken(
user_id=user_id,
)
return await self(call, request_timeout=request_timeout)
async def replace_managed_bot_token(
self,
user_id: int,
request_timeout: int | None = None,
) -> str:
"""
Use this method to revoke the current token of a managed bot and generate a new one. Returns the new token as *String* on success.
Source: https://core.telegram.org/bots/api#replacemanagedbottoken
:param user_id: User identifier of the managed bot whose token will be replaced
:param request_timeout: Request timeout
:return: Returns the new token as *String* on success.
"""
call = ReplaceManagedBotToken(
user_id=user_id,
)
return await self(call, request_timeout=request_timeout)
async def save_prepared_keyboard_button(
self,
user_id: int,
button: KeyboardButton,
request_timeout: int | None = None,
) -> PreparedKeyboardButton:
"""
Stores a keyboard button that can be used by a user within a Mini App. Returns a :class:`aiogram.types.prepared_keyboard_button.PreparedKeyboardButton` object.
Source: https://core.telegram.org/bots/api#savepreparedkeyboardbutton
:param user_id: Unique identifier of the target user that can use the button
:param button: A JSON-serialized object describing the button to be saved. The button must be of the type *request_users*, *request_chat*, or *request_managed_bot*
:param request_timeout: Request timeout
:return: Returns a :class:`aiogram.types.prepared_keyboard_button.PreparedKeyboardButton` object.
"""
call = SavePreparedKeyboardButton(
user_id=user_id,
button=button,
)
return await self(call, request_timeout=request_timeout)

View file

@ -28,6 +28,14 @@ class Default:
def __repr__(self) -> str: def __repr__(self) -> str:
return f"<{self}>" return f"<{self}>"
def __eq__(self, other: object) -> bool:
if not isinstance(other, Default):
return NotImplemented
return self._name == other._name
def __hash__(self) -> int:
return hash(self._name)
@dataclass(**dataclass_kwargs(slots=True, kw_only=True)) @dataclass(**dataclass_kwargs(slots=True, kw_only=True))
class DefaultBotProperties: class DefaultBotProperties:

View file

@ -183,4 +183,6 @@ class UserContextMiddleware(BaseMiddleware):
return EventContext( return EventContext(
user=event.purchased_paid_media.from_user, user=event.purchased_paid_media.from_user,
) )
if event.managed_bot:
return EventContext(user=event.managed_bot.user)
return EventContext() return EventContext()

View file

@ -85,6 +85,7 @@ class Router:
router=self, router=self,
event_name="purchased_paid_media", event_name="purchased_paid_media",
) )
self.managed_bot = TelegramEventObserver(router=self, event_name="managed_bot")
self.errors = self.error = TelegramEventObserver(router=self, event_name="error") self.errors = self.error = TelegramEventObserver(router=self, event_name="error")
@ -115,6 +116,7 @@ class Router:
"edited_business_message": self.edited_business_message, "edited_business_message": self.edited_business_message,
"business_message": self.business_message, "business_message": self.business_message,
"purchased_paid_media": self.purchased_paid_media, "purchased_paid_media": self.purchased_paid_media,
"managed_bot": self.managed_bot,
"error": self.errors, "error": self.errors,
} }
@ -131,7 +133,7 @@ class Router:
Is useful for getting updates only for registered event types. Is useful for getting updates only for registered event types.
:param skip_events: skip specified event names :param skip_events: skip specified event names
:return: set of registered names :return: sorted list of registered names
""" """
handlers_in_use: set[str] = set() handlers_in_use: set[str] = set()
if skip_events is None: if skip_events is None:
@ -143,7 +145,7 @@ class Router:
if observer.handlers and update_name not in skip_events: if observer.handlers and update_name not in skip_events:
handlers_in_use.add(update_name) handlers_in_use.add(update_name)
return list(sorted(handlers_in_use)) # NOQA: C413 return sorted(handlers_in_use)
async def propagate_event(self, update_type: str, event: TelegramObject, **kwargs: Any) -> Any: async def propagate_event(self, update_type: str, event: TelegramObject, **kwargs: Any) -> Any:
kwargs.update(event_router=self) kwargs.update(event_router=self)
@ -262,7 +264,7 @@ class Router:
:return: :return:
""" """
if not isinstance(router, Router): if not isinstance(router, Router):
msg = f"router should be instance of Router not {type(router).__class__.__name__}" msg = f"router should be instance of Router not {type(router).__name__!r}"
raise ValueError(msg) raise ValueError(msg)
router.parent_router = self router.parent_router = self
return router return router

View file

@ -67,7 +67,10 @@ class ContentType(str, Enum):
GIVEAWAY = "giveaway" GIVEAWAY = "giveaway"
GIVEAWAY_WINNERS = "giveaway_winners" GIVEAWAY_WINNERS = "giveaway_winners"
GIVEAWAY_COMPLETED = "giveaway_completed" GIVEAWAY_COMPLETED = "giveaway_completed"
MANAGED_BOT_CREATED = "managed_bot_created"
PAID_MESSAGE_PRICE_CHANGED = "paid_message_price_changed" PAID_MESSAGE_PRICE_CHANGED = "paid_message_price_changed"
POLL_OPTION_ADDED = "poll_option_added"
POLL_OPTION_DELETED = "poll_option_deleted"
SUGGESTED_POST_APPROVED = "suggested_post_approved" SUGGESTED_POST_APPROVED = "suggested_post_approved"
SUGGESTED_POST_APPROVAL_FAILED = "suggested_post_approval_failed" SUGGESTED_POST_APPROVAL_FAILED = "suggested_post_approval_failed"
SUGGESTED_POST_DECLINED = "suggested_post_declined" SUGGESTED_POST_DECLINED = "suggested_post_declined"

View file

@ -31,3 +31,4 @@ class UpdateType(str, Enum):
CHAT_JOIN_REQUEST = "chat_join_request" CHAT_JOIN_REQUEST = "chat_join_request"
CHAT_BOOST = "chat_boost" CHAT_BOOST = "chat_boost"
REMOVED_CHAT_BOOST = "removed_chat_boost" REMOVED_CHAT_BOOST = "removed_chat_boost"
MANAGED_BOT = "managed_bot"

View file

@ -240,7 +240,7 @@ class CommandObject:
class CommandStart(Command): class CommandStart(Command):
def __init__( def __init__(
self, self,
deep_link: bool = False, deep_link: bool | None = None,
deep_link_encoded: bool = False, deep_link_encoded: bool = False,
ignore_case: bool = False, ignore_case: bool = False,
ignore_mention: bool = False, ignore_mention: bool = False,
@ -282,7 +282,12 @@ class CommandStart(Command):
return command # noqa: RET504 return command # noqa: RET504
def validate_deeplink(self, command: CommandObject) -> CommandObject: def validate_deeplink(self, command: CommandObject) -> CommandObject:
if not self.deep_link: if self.deep_link is None:
return command
if self.deep_link is False:
if command.args:
msg = "Deep-link was not expected"
raise CommandException(msg)
return command return command
if not command.args: if not command.args:
msg = "Deep-link was missing" msg = "Deep-link was missing"

View file

@ -62,6 +62,7 @@ from .get_custom_emoji_stickers import GetCustomEmojiStickers
from .get_file import GetFile from .get_file import GetFile
from .get_forum_topic_icon_stickers import GetForumTopicIconStickers from .get_forum_topic_icon_stickers import GetForumTopicIconStickers
from .get_game_high_scores import GetGameHighScores from .get_game_high_scores import GetGameHighScores
from .get_managed_bot_token import GetManagedBotToken
from .get_me import GetMe from .get_me import GetMe
from .get_my_commands import GetMyCommands from .get_my_commands import GetMyCommands
from .get_my_default_administrator_rights import GetMyDefaultAdministratorRights from .get_my_default_administrator_rights import GetMyDefaultAdministratorRights
@ -92,11 +93,13 @@ from .remove_my_profile_photo import RemoveMyProfilePhoto
from .remove_user_verification import RemoveUserVerification from .remove_user_verification import RemoveUserVerification
from .reopen_forum_topic import ReopenForumTopic from .reopen_forum_topic import ReopenForumTopic
from .reopen_general_forum_topic import ReopenGeneralForumTopic from .reopen_general_forum_topic import ReopenGeneralForumTopic
from .replace_managed_bot_token import ReplaceManagedBotToken
from .replace_sticker_in_set import ReplaceStickerInSet from .replace_sticker_in_set import ReplaceStickerInSet
from .repost_story import RepostStory from .repost_story import RepostStory
from .restrict_chat_member import RestrictChatMember from .restrict_chat_member import RestrictChatMember
from .revoke_chat_invite_link import RevokeChatInviteLink from .revoke_chat_invite_link import RevokeChatInviteLink
from .save_prepared_inline_message import SavePreparedInlineMessage from .save_prepared_inline_message import SavePreparedInlineMessage
from .save_prepared_keyboard_button import SavePreparedKeyboardButton
from .send_animation import SendAnimation from .send_animation import SendAnimation
from .send_audio import SendAudio from .send_audio import SendAudio
from .send_chat_action import SendChatAction from .send_chat_action import SendChatAction
@ -230,6 +233,7 @@ __all__ = (
"GetFile", "GetFile",
"GetForumTopicIconStickers", "GetForumTopicIconStickers",
"GetGameHighScores", "GetGameHighScores",
"GetManagedBotToken",
"GetMe", "GetMe",
"GetMyCommands", "GetMyCommands",
"GetMyDefaultAdministratorRights", "GetMyDefaultAdministratorRights",
@ -260,6 +264,7 @@ __all__ = (
"RemoveUserVerification", "RemoveUserVerification",
"ReopenForumTopic", "ReopenForumTopic",
"ReopenGeneralForumTopic", "ReopenGeneralForumTopic",
"ReplaceManagedBotToken",
"ReplaceStickerInSet", "ReplaceStickerInSet",
"RepostStory", "RepostStory",
"Request", "Request",
@ -267,6 +272,7 @@ __all__ = (
"RestrictChatMember", "RestrictChatMember",
"RevokeChatInviteLink", "RevokeChatInviteLink",
"SavePreparedInlineMessage", "SavePreparedInlineMessage",
"SavePreparedKeyboardButton",
"SendAnimation", "SendAnimation",
"SendAudio", "SendAudio",
"SendChatAction", "SendChatAction",

View file

@ -0,0 +1,28 @@
from typing import TYPE_CHECKING, Any
from .base import TelegramMethod
class GetManagedBotToken(TelegramMethod[str]):
"""
Use this method to get the token of a managed bot. Returns the token as *String* on success.
Source: https://core.telegram.org/bots/api#getmanagedbottoken
"""
__returning__ = str
__api_method__ = "getManagedBotToken"
user_id: int
"""User identifier of the managed bot whose token will be returned"""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(__pydantic__self__, *, user_id: int, **__pydantic_kwargs: Any) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(user_id=user_id, **__pydantic_kwargs)

View file

@ -25,9 +25,9 @@ class GiftPremiumSubscription(TelegramMethod[bool]):
text: str | None = None text: str | None = None
"""Text that will be shown along with the service message about the subscription; 0-128 characters""" """Text that will be shown along with the service message about the subscription; 0-128 characters"""
text_parse_mode: str | None = None text_parse_mode: str | None = None
"""Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.""" """Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored."""
text_entities: list[MessageEntity] | None = None text_entities: list[MessageEntity] | None = None
"""A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.""" """A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored."""
if TYPE_CHECKING: if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!

View file

@ -0,0 +1,28 @@
from typing import TYPE_CHECKING, Any
from .base import TelegramMethod
class ReplaceManagedBotToken(TelegramMethod[str]):
"""
Use this method to revoke the current token of a managed bot and generate a new one. Returns the new token as *String* on success.
Source: https://core.telegram.org/bots/api#replacemanagedbottoken
"""
__returning__ = str
__api_method__ = "replaceManagedBotToken"
user_id: int
"""User identifier of the managed bot whose token will be replaced"""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(__pydantic__self__, *, user_id: int, **__pydantic_kwargs: Any) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(user_id=user_id, **__pydantic_kwargs)

View file

@ -0,0 +1,33 @@
from typing import TYPE_CHECKING, Any
from ..types import KeyboardButton, PreparedKeyboardButton
from .base import TelegramMethod
class SavePreparedKeyboardButton(TelegramMethod[PreparedKeyboardButton]):
"""
Stores a keyboard button that can be used by a user within a Mini App. Returns a :class:`aiogram.types.prepared_keyboard_button.PreparedKeyboardButton` object.
Source: https://core.telegram.org/bots/api#savepreparedkeyboardbutton
"""
__returning__ = PreparedKeyboardButton
__api_method__ = "savePreparedKeyboardButton"
user_id: int
"""Unique identifier of the target user that can use the button"""
button: KeyboardButton
"""A JSON-serialized object describing the button to be saved. The button must be of the type *request_users*, *request_chat*, or *request_managed_bot*"""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(
__pydantic__self__, *, user_id: int, button: KeyboardButton, **__pydantic_kwargs: Any
) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(user_id=user_id, button=button, **__pydantic_kwargs)

View file

@ -28,9 +28,9 @@ class SendGift(TelegramMethod[bool]):
text: str | None = None text: str | None = None
"""Text that will be shown along with the gift; 0-128 characters""" """Text that will be shown along with the gift; 0-128 characters"""
text_parse_mode: str | None = None text_parse_mode: str | None = None
"""Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.""" """Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored."""
text_entities: list[MessageEntity] | None = None text_entities: list[MessageEntity] | None = None
"""A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', and 'custom_emoji' are ignored.""" """A JSON-serialized list of special entities that appear in the gift text. It can be specified instead of *text_parse_mode*. Entities other than 'bold', 'italic', 'underline', 'strikethrough', 'spoiler', 'custom_emoji', and 'date_time' are ignored."""
if TYPE_CHECKING: if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!

View file

@ -46,9 +46,17 @@ class SendPoll(TelegramMethod[Message]):
type: str | None = None type: str | None = None
"""Poll type, 'quiz' or 'regular', defaults to 'regular'""" """Poll type, 'quiz' or 'regular', defaults to 'regular'"""
allows_multiple_answers: bool | None = None allows_multiple_answers: bool | None = None
""":code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False`""" """Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`"""
correct_option_id: int | None = None allows_revoting: bool | None = None
"""0-based identifier of the correct answer option, required for polls in quiz mode""" """Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls"""
shuffle_options: bool | None = None
"""Pass :code:`True`, if the poll options must be shown in random order"""
allow_adding_options: bool | None = None
"""Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes"""
hide_results_until_closes: bool | None = None
"""Pass :code:`True`, if poll results must be shown only after the poll closes"""
correct_option_ids: list[int] | None = None
"""A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode"""
explanation: str | None = None explanation: str | None = None
"""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 with at most 2 line feeds after entities parsing""" """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 with at most 2 line feeds after entities parsing"""
explanation_parse_mode: str | Default | None = Default("parse_mode") explanation_parse_mode: str | Default | None = Default("parse_mode")
@ -56,11 +64,17 @@ class SendPoll(TelegramMethod[Message]):
explanation_entities: list[MessageEntity] | None = None explanation_entities: list[MessageEntity] | None = None
"""A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*""" """A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*"""
open_period: int | None = None open_period: int | None = None
"""Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*.""" """Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*."""
close_date: DateTimeUnion | None = None close_date: DateTimeUnion | None = None
"""Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*.""" """Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*."""
is_closed: bool | None = None is_closed: bool | None = None
"""Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.""" """Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview."""
description: str | None = None
"""Description of the poll to be sent, 0-1024 characters after entities parsing"""
description_parse_mode: str | Default | None = Default("parse_mode")
"""Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
description_entities: list[MessageEntity] | None = None
"""A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*"""
disable_notification: bool | None = None disable_notification: bool | None = None
"""Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.""" """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
protect_content: bool | Default | None = Default("protect_content") protect_content: bool | Default | None = Default("protect_content")
@ -78,6 +92,11 @@ class SendPoll(TelegramMethod[Message]):
.. deprecated:: API:7.0 .. deprecated:: API:7.0
https://core.telegram.org/bots/api-changelog#december-29-2023""" https://core.telegram.org/bots/api-changelog#december-29-2023"""
correct_option_id: int | None = Field(None, json_schema_extra={"deprecated": True})
"""0-based identifier of the correct answer option, required for polls in quiz mode
.. deprecated:: API:9.6
https://core.telegram.org/bots/api-changelog#april-3-2026"""
reply_to_message_id: int | None = Field(None, json_schema_extra={"deprecated": True}) reply_to_message_id: int | None = Field(None, json_schema_extra={"deprecated": True})
"""If the message is a reply, ID of the original message """If the message is a reply, ID of the original message
@ -101,13 +120,20 @@ class SendPoll(TelegramMethod[Message]):
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
@ -115,6 +141,7 @@ class SendPoll(TelegramMethod[Message]):
reply_parameters: ReplyParameters | None = None, reply_parameters: ReplyParameters | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
reply_to_message_id: int | None = None, reply_to_message_id: int | None = None,
**__pydantic_kwargs: Any, **__pydantic_kwargs: Any,
) -> None: ) -> None:
@ -133,13 +160,20 @@ class SendPoll(TelegramMethod[Message]):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
@ -147,6 +181,7 @@ class SendPoll(TelegramMethod[Message]):
reply_parameters=reply_parameters, reply_parameters=reply_parameters,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
reply_to_message_id=reply_to_message_id, reply_to_message_id=reply_to_message_id,
**__pydantic_kwargs, **__pydantic_kwargs,
) )

View file

@ -495,6 +495,7 @@ __all__ = (
"KeyboardButton", "KeyboardButton",
"KeyboardButtonPollType", "KeyboardButtonPollType",
"KeyboardButtonRequestChat", "KeyboardButtonRequestChat",
"KeyboardButtonRequestManagedBot",
"KeyboardButtonRequestUser", "KeyboardButtonRequestUser",
"KeyboardButtonRequestUsers", "KeyboardButtonRequestUsers",
"LabeledPrice", "LabeledPrice",
@ -502,6 +503,8 @@ __all__ = (
"Location", "Location",
"LocationAddress", "LocationAddress",
"LoginUrl", "LoginUrl",
"ManagedBotCreated",
"ManagedBotUpdated",
"MaskPosition", "MaskPosition",
"MaybeInaccessibleMessage", "MaybeInaccessibleMessage",
"MaybeInaccessibleMessageUnion", "MaybeInaccessibleMessageUnion",
@ -554,8 +557,11 @@ __all__ = (
"Poll", "Poll",
"PollAnswer", "PollAnswer",
"PollOption", "PollOption",
"PollOptionAdded",
"PollOptionDeleted",
"PreCheckoutQuery", "PreCheckoutQuery",
"PreparedInlineMessage", "PreparedInlineMessage",
"PreparedKeyboardButton",
"ProximityAlertTriggered", "ProximityAlertTriggered",
"ReactionCount", "ReactionCount",
"ReactionType", "ReactionType",
@ -652,6 +658,12 @@ __all__ = (
from ..client.default import Default as _Default from ..client.default import Default as _Default
from .chat_owner_changed import ChatOwnerChanged from .chat_owner_changed import ChatOwnerChanged
from .chat_owner_left import ChatOwnerLeft from .chat_owner_left import ChatOwnerLeft
from .keyboard_button_request_managed_bot import KeyboardButtonRequestManagedBot
from .managed_bot_created import ManagedBotCreated
from .managed_bot_updated import ManagedBotUpdated
from .poll_option_added import PollOptionAdded
from .poll_option_deleted import PollOptionDeleted
from .prepared_keyboard_button import PreparedKeyboardButton
from .user_profile_audios import UserProfileAudios from .user_profile_audios import UserProfileAudios
from .video_quality import VideoQuality from .video_quality import VideoQuality

View file

@ -1783,13 +1783,20 @@ class ChatJoinRequest(TelegramObject):
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
@ -1797,6 +1804,7 @@ class ChatJoinRequest(TelegramObject):
reply_parameters: ReplyParameters | None = None, reply_parameters: ReplyParameters | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
reply_to_message_id: int | None = None, reply_to_message_id: int | None = None,
**kwargs: Any, **kwargs: Any,
) -> SendPoll: ) -> SendPoll:
@ -1818,14 +1826,21 @@ class ChatJoinRequest(TelegramObject):
:param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode* :param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode*
:param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True` :param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True`
:param type: Poll type, 'quiz' or 'regular', defaults to 'regular' :param type: Poll type, 'quiz' or 'regular', defaults to 'regular'
:param allows_multiple_answers: :code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False` :param allows_multiple_answers: Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode :param allows_revoting: Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls
:param shuffle_options: Pass :code:`True`, if the poll options must be shown in random order
:param allow_adding_options: Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes
:param hide_results_until_closes: Pass :code:`True`, if poll results must be shown only after the poll closes
:param correct_option_ids: A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode
:param explanation: 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 with at most 2 line feeds after entities parsing :param explanation: 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 with at most 2 line feeds after entities parsing
:param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. :param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode* :param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*
:param open_period: Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*. :param open_period: Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.
:param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*. :param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.
:param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview. :param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.
:param description: Description of the poll to be sent, 0-1024 characters after entities parsing
:param description_parse_mode: Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param description_entities: A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*
:param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound. :param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.
:param protect_content: Protects the contents of the sent message from forwarding and saving :param protect_content: Protects the contents of the sent message from forwarding and saving
:param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance :param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance
@ -1833,6 +1848,7 @@ class ChatJoinRequest(TelegramObject):
:param reply_parameters: Description of the message to reply to :param reply_parameters: Description of the message to reply to
:param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user :param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user
:param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found :param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode
:param reply_to_message_id: If the message is a reply, ID of the original message :param reply_to_message_id: If the message is a reply, ID of the original message
:return: instance of method :class:`aiogram.methods.send_poll.SendPoll` :return: instance of method :class:`aiogram.methods.send_poll.SendPoll`
""" """
@ -1852,13 +1868,20 @@ class ChatJoinRequest(TelegramObject):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
@ -1866,6 +1889,7 @@ class ChatJoinRequest(TelegramObject):
reply_parameters=reply_parameters, reply_parameters=reply_parameters,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
reply_to_message_id=reply_to_message_id, reply_to_message_id=reply_to_message_id,
**kwargs, **kwargs,
).as_(self._bot) ).as_(self._bot)
@ -1881,13 +1905,20 @@ class ChatJoinRequest(TelegramObject):
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
@ -1895,6 +1926,7 @@ class ChatJoinRequest(TelegramObject):
reply_parameters: ReplyParameters | None = None, reply_parameters: ReplyParameters | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
reply_to_message_id: int | None = None, reply_to_message_id: int | None = None,
**kwargs: Any, **kwargs: Any,
) -> SendPoll: ) -> SendPoll:
@ -1916,14 +1948,21 @@ class ChatJoinRequest(TelegramObject):
:param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode* :param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode*
:param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True` :param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True`
:param type: Poll type, 'quiz' or 'regular', defaults to 'regular' :param type: Poll type, 'quiz' or 'regular', defaults to 'regular'
:param allows_multiple_answers: :code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False` :param allows_multiple_answers: Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode :param allows_revoting: Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls
:param shuffle_options: Pass :code:`True`, if the poll options must be shown in random order
:param allow_adding_options: Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes
:param hide_results_until_closes: Pass :code:`True`, if poll results must be shown only after the poll closes
:param correct_option_ids: A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode
:param explanation: 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 with at most 2 line feeds after entities parsing :param explanation: 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 with at most 2 line feeds after entities parsing
:param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. :param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode* :param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*
:param open_period: Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*. :param open_period: Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.
:param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*. :param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.
:param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview. :param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.
:param description: Description of the poll to be sent, 0-1024 characters after entities parsing
:param description_parse_mode: Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param description_entities: A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*
:param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound. :param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.
:param protect_content: Protects the contents of the sent message from forwarding and saving :param protect_content: Protects the contents of the sent message from forwarding and saving
:param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance :param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance
@ -1931,6 +1970,7 @@ class ChatJoinRequest(TelegramObject):
:param reply_parameters: Description of the message to reply to :param reply_parameters: Description of the message to reply to
:param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user :param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user
:param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found :param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode
:param reply_to_message_id: If the message is a reply, ID of the original message :param reply_to_message_id: If the message is a reply, ID of the original message
:return: instance of method :class:`aiogram.methods.send_poll.SendPoll` :return: instance of method :class:`aiogram.methods.send_poll.SendPoll`
""" """
@ -1950,13 +1990,20 @@ class ChatJoinRequest(TelegramObject):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
@ -1964,6 +2011,7 @@ class ChatJoinRequest(TelegramObject):
reply_parameters=reply_parameters, reply_parameters=reply_parameters,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
reply_to_message_id=reply_to_message_id, reply_to_message_id=reply_to_message_id,
**kwargs, **kwargs,
).as_(self._bot) ).as_(self._bot)

View file

@ -924,13 +924,20 @@ class ChatMemberUpdated(TelegramObject):
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
@ -938,6 +945,7 @@ class ChatMemberUpdated(TelegramObject):
reply_parameters: ReplyParameters | None = None, reply_parameters: ReplyParameters | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
reply_to_message_id: int | None = None, reply_to_message_id: int | None = None,
**kwargs: Any, **kwargs: Any,
) -> SendPoll: ) -> SendPoll:
@ -959,14 +967,21 @@ class ChatMemberUpdated(TelegramObject):
:param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode* :param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode*
:param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True` :param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True`
:param type: Poll type, 'quiz' or 'regular', defaults to 'regular' :param type: Poll type, 'quiz' or 'regular', defaults to 'regular'
:param allows_multiple_answers: :code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False` :param allows_multiple_answers: Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode :param allows_revoting: Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls
:param shuffle_options: Pass :code:`True`, if the poll options must be shown in random order
:param allow_adding_options: Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes
:param hide_results_until_closes: Pass :code:`True`, if poll results must be shown only after the poll closes
:param correct_option_ids: A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode
:param explanation: 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 with at most 2 line feeds after entities parsing :param explanation: 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 with at most 2 line feeds after entities parsing
:param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. :param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode* :param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*
:param open_period: Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*. :param open_period: Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.
:param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*. :param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.
:param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview. :param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.
:param description: Description of the poll to be sent, 0-1024 characters after entities parsing
:param description_parse_mode: Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param description_entities: A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*
:param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound. :param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.
:param protect_content: Protects the contents of the sent message from forwarding and saving :param protect_content: Protects the contents of the sent message from forwarding and saving
:param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance :param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance
@ -974,6 +989,7 @@ class ChatMemberUpdated(TelegramObject):
:param reply_parameters: Description of the message to reply to :param reply_parameters: Description of the message to reply to
:param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user :param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user
:param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found :param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode
:param reply_to_message_id: If the message is a reply, ID of the original message :param reply_to_message_id: If the message is a reply, ID of the original message
:return: instance of method :class:`aiogram.methods.send_poll.SendPoll` :return: instance of method :class:`aiogram.methods.send_poll.SendPoll`
""" """
@ -993,13 +1009,20 @@ class ChatMemberUpdated(TelegramObject):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
@ -1007,6 +1030,7 @@ class ChatMemberUpdated(TelegramObject):
reply_parameters=reply_parameters, reply_parameters=reply_parameters,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
reply_to_message_id=reply_to_message_id, reply_to_message_id=reply_to_message_id,
**kwargs, **kwargs,
).as_(self._bot) ).as_(self._bot)

View file

@ -1746,13 +1746,20 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
@ -1760,6 +1767,7 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
reply_parameters: ReplyParameters | None = None, reply_parameters: ReplyParameters | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
reply_to_message_id: int | None = None, reply_to_message_id: int | None = None,
**kwargs: Any, **kwargs: Any,
) -> SendPoll: ) -> SendPoll:
@ -1781,14 +1789,21 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
:param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode* :param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode*
:param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True` :param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True`
:param type: Poll type, 'quiz' or 'regular', defaults to 'regular' :param type: Poll type, 'quiz' or 'regular', defaults to 'regular'
:param allows_multiple_answers: :code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False` :param allows_multiple_answers: Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode :param allows_revoting: Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls
:param shuffle_options: Pass :code:`True`, if the poll options must be shown in random order
:param allow_adding_options: Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes
:param hide_results_until_closes: Pass :code:`True`, if poll results must be shown only after the poll closes
:param correct_option_ids: A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode
:param explanation: 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 with at most 2 line feeds after entities parsing :param explanation: 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 with at most 2 line feeds after entities parsing
:param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. :param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode* :param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*
:param open_period: Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*. :param open_period: Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.
:param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*. :param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.
:param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview. :param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.
:param description: Description of the poll to be sent, 0-1024 characters after entities parsing
:param description_parse_mode: Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param description_entities: A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*
:param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound. :param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.
:param protect_content: Protects the contents of the sent message from forwarding and saving :param protect_content: Protects the contents of the sent message from forwarding and saving
:param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance :param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance
@ -1796,6 +1811,7 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
:param reply_parameters: Description of the message to reply to :param reply_parameters: Description of the message to reply to
:param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user :param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user
:param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found :param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode
:param reply_to_message_id: If the message is a reply, ID of the original message :param reply_to_message_id: If the message is a reply, ID of the original message
:return: instance of method :class:`aiogram.methods.send_poll.SendPoll` :return: instance of method :class:`aiogram.methods.send_poll.SendPoll`
""" """
@ -1819,13 +1835,20 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
@ -1833,6 +1856,7 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
reply_parameters=reply_parameters, reply_parameters=reply_parameters,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
reply_to_message_id=reply_to_message_id, reply_to_message_id=reply_to_message_id,
**kwargs, **kwargs,
).as_(self._bot) ).as_(self._bot)
@ -1848,19 +1872,27 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
message_effect_id: str | None = None, message_effect_id: str | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
**kwargs: Any, **kwargs: Any,
) -> SendPoll: ) -> SendPoll:
""" """
@ -1882,20 +1914,28 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
:param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode* :param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode*
:param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True` :param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True`
:param type: Poll type, 'quiz' or 'regular', defaults to 'regular' :param type: Poll type, 'quiz' or 'regular', defaults to 'regular'
:param allows_multiple_answers: :code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False` :param allows_multiple_answers: Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode :param allows_revoting: Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls
:param shuffle_options: Pass :code:`True`, if the poll options must be shown in random order
:param allow_adding_options: Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes
:param hide_results_until_closes: Pass :code:`True`, if poll results must be shown only after the poll closes
:param correct_option_ids: A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode
:param explanation: 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 with at most 2 line feeds after entities parsing :param explanation: 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 with at most 2 line feeds after entities parsing
:param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. :param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode* :param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*
:param open_period: Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*. :param open_period: Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.
:param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*. :param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.
:param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview. :param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.
:param description: Description of the poll to be sent, 0-1024 characters after entities parsing
:param description_parse_mode: Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param description_entities: A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*
:param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound. :param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.
:param protect_content: Protects the contents of the sent message from forwarding and saving :param protect_content: Protects the contents of the sent message from forwarding and saving
:param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance :param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance
:param message_effect_id: Unique identifier of the message effect to be added to the message; for private chats only :param message_effect_id: Unique identifier of the message effect to be added to the message; for private chats only
:param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user :param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user
:param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found :param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode
:return: instance of method :class:`aiogram.methods.send_poll.SendPoll` :return: instance of method :class:`aiogram.methods.send_poll.SendPoll`
""" """
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -1919,19 +1959,27 @@ class InaccessibleMessage(MaybeInaccessibleMessage):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
message_effect_id=message_effect_id, message_effect_id=message_effect_id,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
**kwargs, **kwargs,
).as_(self._bot) ).as_(self._bot)

View file

@ -23,7 +23,7 @@ class InputChecklist(TelegramObject):
parse_mode: str | None = None parse_mode: str | None = None
"""*Optional*. Mode for parsing entities in the title. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.""" """*Optional*. Mode for parsing entities in the title. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
title_entities: list[MessageEntity] | None = None title_entities: list[MessageEntity] | None = None
"""*Optional*. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are allowed.""" """*Optional*. List of special entities that appear in the title, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are allowed."""
others_can_add_tasks: bool | None = None others_can_add_tasks: bool | None = None
"""*Optional*. Pass :code:`True` if other users can add tasks to the checklist""" """*Optional*. Pass :code:`True` if other users can add tasks to the checklist"""
others_can_mark_tasks_as_done: bool | None = None others_can_mark_tasks_as_done: bool | None = None

View file

@ -22,7 +22,7 @@ class InputChecklistTask(TelegramObject):
parse_mode: str | None = None parse_mode: str | None = None
"""*Optional*. Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.""" """*Optional*. Mode for parsing entities in the text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
text_entities: list[MessageEntity] | None = None text_entities: list[MessageEntity] | None = None
"""*Optional*. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are allowed.""" """*Optional*. List of special entities that appear in the text, which can be specified instead of parse_mode. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are allowed."""
if TYPE_CHECKING: if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!

View file

@ -9,6 +9,7 @@ from .base import MutableTelegramObject
if TYPE_CHECKING: if TYPE_CHECKING:
from .keyboard_button_poll_type import KeyboardButtonPollType from .keyboard_button_poll_type import KeyboardButtonPollType
from .keyboard_button_request_chat import KeyboardButtonRequestChat from .keyboard_button_request_chat import KeyboardButtonRequestChat
from .keyboard_button_request_managed_bot import KeyboardButtonRequestManagedBot
from .keyboard_button_request_user import KeyboardButtonRequestUser from .keyboard_button_request_user import KeyboardButtonRequestUser
from .keyboard_button_request_users import KeyboardButtonRequestUsers from .keyboard_button_request_users import KeyboardButtonRequestUsers
from .web_app_info import WebAppInfo from .web_app_info import WebAppInfo
@ -31,6 +32,8 @@ class KeyboardButton(MutableTelegramObject):
"""*Optional*. If specified, pressing the button will open a list of suitable users. Identifiers of selected users will be sent to the bot in a 'users_shared' service message. Available in private chats only.""" """*Optional*. If specified, pressing the button will open a list of suitable users. Identifiers of selected users will be sent to the bot in a 'users_shared' service message. Available in private chats only."""
request_chat: KeyboardButtonRequestChat | None = None request_chat: KeyboardButtonRequestChat | None = None
"""*Optional*. If specified, pressing the button will open a list of suitable chats. Tapping on a chat will send its identifier to the bot in a 'chat_shared' service message. Available in private chats only.""" """*Optional*. If specified, pressing the button will open a list of suitable chats. Tapping on a chat will send its identifier to the bot in a 'chat_shared' service message. Available in private chats only."""
request_managed_bot: KeyboardButtonRequestManagedBot | None = None
"""*Optional*. If specified, pressing the button will ask the user to create and share a bot that will be managed by the current bot. Available for bots that enabled management of other bots in the `@BotFather <https://t.me/BotFather>`_ Mini App. Available in private chats only."""
request_contact: bool | None = None request_contact: bool | None = None
"""*Optional*. If :code:`True`, the user's phone number will be sent as a contact when the button is pressed. Available in private chats only.""" """*Optional*. If :code:`True`, the user's phone number will be sent as a contact when the button is pressed. Available in private chats only."""
request_location: bool | None = None request_location: bool | None = None
@ -59,6 +62,7 @@ class KeyboardButton(MutableTelegramObject):
style: str | None = None, style: str | None = None,
request_users: KeyboardButtonRequestUsers | None = None, request_users: KeyboardButtonRequestUsers | None = None,
request_chat: KeyboardButtonRequestChat | None = None, request_chat: KeyboardButtonRequestChat | None = None,
request_managed_bot: KeyboardButtonRequestManagedBot | None = None,
request_contact: bool | None = None, request_contact: bool | None = None,
request_location: bool | None = None, request_location: bool | None = None,
request_poll: KeyboardButtonPollType | None = None, request_poll: KeyboardButtonPollType | None = None,
@ -76,6 +80,7 @@ class KeyboardButton(MutableTelegramObject):
style=style, style=style,
request_users=request_users, request_users=request_users,
request_chat=request_chat, request_chat=request_chat,
request_managed_bot=request_managed_bot,
request_contact=request_contact, request_contact=request_contact,
request_location=request_location, request_location=request_location,
request_poll=request_poll, request_poll=request_poll,

View file

@ -0,0 +1,41 @@
from typing import TYPE_CHECKING, Any
from .base import TelegramObject
class KeyboardButtonRequestManagedBot(TelegramObject):
"""
This object defines the parameters for the creation of a managed bot. Information about the created bot will be shared with the bot using the update *managed_bot* and a :class:`aiogram.types.message.Message` with the field *managed_bot_created*.
Source: https://core.telegram.org/bots/api#keyboardbuttonrequestmanagedbot
"""
request_id: int
"""Signed 32-bit identifier of the request. Must be unique within the message"""
suggested_name: str | None = None
"""*Optional*. Suggested name for the bot"""
suggested_username: str | None = None
"""*Optional*. Suggested username for the bot"""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(
__pydantic__self__,
*,
request_id: int,
suggested_name: str | None = None,
suggested_username: str | None = None,
**__pydantic_kwargs: Any,
) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(
request_id=request_id,
suggested_name=suggested_name,
suggested_username=suggested_username,
**__pydantic_kwargs,
)

View file

@ -0,0 +1,32 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from pydantic import Field
from .base import TelegramObject
if TYPE_CHECKING:
from .user import User
class ManagedBotCreated(TelegramObject):
"""
This object contains information about the bot that was created to be managed by the current bot.
Source: https://core.telegram.org/bots/api#managedbotcreated
"""
bot_user: User = Field(..., alias="bot")
"""Information about the bot. The bot's token can be fetched using the method :class:`aiogram.methods.get_managed_bot_token.GetManagedBotToken`."""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(__pydantic__self__, *, bot_user: User, **__pydantic_kwargs: Any) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(bot_user=bot_user, **__pydantic_kwargs)

View file

@ -0,0 +1,36 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from pydantic import Field
from .base import TelegramObject
if TYPE_CHECKING:
from .user import User
class ManagedBotUpdated(TelegramObject):
"""
This object contains information about the creation or token update of a bot that is managed by the current bot.
Source: https://core.telegram.org/bots/api#managedbotupdated
"""
user: User
"""User that created the bot"""
bot_user: User = Field(..., alias="bot")
"""Information about the bot. Token of the bot can be fetched using the method :class:`aiogram.methods.get_managed_bot_token.GetManagedBotToken`."""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(
__pydantic__self__, *, user: User, bot_user: User, **__pydantic_kwargs: Any
) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(user=user, bot_user=bot_user, **__pydantic_kwargs)

View file

@ -90,6 +90,7 @@ if TYPE_CHECKING:
from .labeled_price import LabeledPrice from .labeled_price import LabeledPrice
from .link_preview_options import LinkPreviewOptions from .link_preview_options import LinkPreviewOptions
from .location import Location from .location import Location
from .managed_bot_created import ManagedBotCreated
from .maybe_inaccessible_message_union import MaybeInaccessibleMessageUnion from .maybe_inaccessible_message_union import MaybeInaccessibleMessageUnion
from .media_union import MediaUnion from .media_union import MediaUnion
from .message_auto_delete_timer_changed import MessageAutoDeleteTimerChanged from .message_auto_delete_timer_changed import MessageAutoDeleteTimerChanged
@ -100,6 +101,8 @@ if TYPE_CHECKING:
from .passport_data import PassportData from .passport_data import PassportData
from .photo_size import PhotoSize from .photo_size import PhotoSize
from .poll import Poll from .poll import Poll
from .poll_option_added import PollOptionAdded
from .poll_option_deleted import PollOptionDeleted
from .proximity_alert_triggered import ProximityAlertTriggered from .proximity_alert_triggered import ProximityAlertTriggered
from .reaction_type_union import ReactionTypeUnion from .reaction_type_union import ReactionTypeUnion
from .refunded_payment import RefundedPayment from .refunded_payment import RefundedPayment
@ -177,6 +180,8 @@ class Message(MaybeInaccessibleMessage):
"""*Optional*. For replies to a story, the original story""" """*Optional*. For replies to a story, the original story"""
reply_to_checklist_task_id: int | None = None reply_to_checklist_task_id: int | None = None
"""*Optional*. Identifier of the specific checklist task that is being replied to""" """*Optional*. Identifier of the specific checklist task that is being replied to"""
reply_to_poll_option_id: str | None = None
"""*Optional*. Persistent identifier of the specific poll option that is being replied to"""
via_bot: User | None = None via_bot: User | None = None
"""*Optional*. Bot through which the message was sent""" """*Optional*. Bot through which the message was sent"""
edit_date: int | None = None edit_date: int | None = None
@ -327,8 +332,14 @@ class Message(MaybeInaccessibleMessage):
"""*Optional*. A giveaway with public winners was completed""" """*Optional*. A giveaway with public winners was completed"""
giveaway_completed: GiveawayCompleted | None = None giveaway_completed: GiveawayCompleted | None = None
"""*Optional*. Service message: a giveaway without public winners was completed""" """*Optional*. Service message: a giveaway without public winners was completed"""
managed_bot_created: ManagedBotCreated | None = None
"""*Optional*. Service message: user created a bot that will be managed by the current bot"""
paid_message_price_changed: PaidMessagePriceChanged | None = None paid_message_price_changed: PaidMessagePriceChanged | None = None
"""*Optional*. Service message: the price for paid messages has changed in the chat""" """*Optional*. Service message: the price for paid messages has changed in the chat"""
poll_option_added: PollOptionAdded | None = None
"""*Optional*. Service message: answer option was added to a poll"""
poll_option_deleted: PollOptionDeleted | None = None
"""*Optional*. Service message: answer option was deleted from a poll"""
suggested_post_approved: SuggestedPostApproved | None = None suggested_post_approved: SuggestedPostApproved | None = None
"""*Optional*. Service message: a suggested post was approved""" """*Optional*. Service message: a suggested post was approved"""
suggested_post_approval_failed: SuggestedPostApprovalFailed | None = None suggested_post_approval_failed: SuggestedPostApprovalFailed | None = None
@ -413,6 +424,7 @@ class Message(MaybeInaccessibleMessage):
quote: TextQuote | None = None, quote: TextQuote | None = None,
reply_to_story: Story | None = None, reply_to_story: Story | None = None,
reply_to_checklist_task_id: int | None = None, reply_to_checklist_task_id: int | None = None,
reply_to_poll_option_id: str | None = None,
via_bot: User | None = None, via_bot: User | None = None,
edit_date: int | None = None, edit_date: int | None = None,
has_protected_content: bool | None = None, has_protected_content: bool | None = None,
@ -488,7 +500,10 @@ class Message(MaybeInaccessibleMessage):
giveaway: Giveaway | None = None, giveaway: Giveaway | None = None,
giveaway_winners: GiveawayWinners | None = None, giveaway_winners: GiveawayWinners | None = None,
giveaway_completed: GiveawayCompleted | None = None, giveaway_completed: GiveawayCompleted | None = None,
managed_bot_created: ManagedBotCreated | None = None,
paid_message_price_changed: PaidMessagePriceChanged | None = None, paid_message_price_changed: PaidMessagePriceChanged | None = None,
poll_option_added: PollOptionAdded | None = None,
poll_option_deleted: PollOptionDeleted | None = None,
suggested_post_approved: SuggestedPostApproved | None = None, suggested_post_approved: SuggestedPostApproved | None = None,
suggested_post_approval_failed: SuggestedPostApprovalFailed | None = None, suggested_post_approval_failed: SuggestedPostApprovalFailed | None = None,
suggested_post_declined: SuggestedPostDeclined | None = None, suggested_post_declined: SuggestedPostDeclined | None = None,
@ -533,6 +548,7 @@ class Message(MaybeInaccessibleMessage):
quote=quote, quote=quote,
reply_to_story=reply_to_story, reply_to_story=reply_to_story,
reply_to_checklist_task_id=reply_to_checklist_task_id, reply_to_checklist_task_id=reply_to_checklist_task_id,
reply_to_poll_option_id=reply_to_poll_option_id,
via_bot=via_bot, via_bot=via_bot,
edit_date=edit_date, edit_date=edit_date,
has_protected_content=has_protected_content, has_protected_content=has_protected_content,
@ -608,7 +624,10 @@ class Message(MaybeInaccessibleMessage):
giveaway=giveaway, giveaway=giveaway,
giveaway_winners=giveaway_winners, giveaway_winners=giveaway_winners,
giveaway_completed=giveaway_completed, giveaway_completed=giveaway_completed,
managed_bot_created=managed_bot_created,
paid_message_price_changed=paid_message_price_changed, paid_message_price_changed=paid_message_price_changed,
poll_option_added=poll_option_added,
poll_option_deleted=poll_option_deleted,
suggested_post_approved=suggested_post_approved, suggested_post_approved=suggested_post_approved,
suggested_post_approval_failed=suggested_post_approval_failed, suggested_post_approval_failed=suggested_post_approval_failed,
suggested_post_declined=suggested_post_declined, suggested_post_declined=suggested_post_declined,
@ -774,6 +793,12 @@ class Message(MaybeInaccessibleMessage):
return ContentType.SUGGESTED_POST_PAID return ContentType.SUGGESTED_POST_PAID
if self.suggested_post_refunded: if self.suggested_post_refunded:
return ContentType.SUGGESTED_POST_REFUNDED return ContentType.SUGGESTED_POST_REFUNDED
if self.managed_bot_created:
return ContentType.MANAGED_BOT_CREATED
if self.poll_option_added:
return ContentType.POLL_OPTION_ADDED
if self.poll_option_deleted:
return ContentType.POLL_OPTION_DELETED
return ContentType.UNKNOWN return ContentType.UNKNOWN
def _unparse_entities(self, text_decoration: TextDecoration) -> str: def _unparse_entities(self, text_decoration: TextDecoration) -> str:
@ -2444,19 +2469,27 @@ class Message(MaybeInaccessibleMessage):
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
message_effect_id: str | None = None, message_effect_id: str | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
**kwargs: Any, **kwargs: Any,
) -> SendPoll: ) -> SendPoll:
""" """
@ -2478,20 +2511,28 @@ class Message(MaybeInaccessibleMessage):
:param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode* :param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode*
:param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True` :param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True`
:param type: Poll type, 'quiz' or 'regular', defaults to 'regular' :param type: Poll type, 'quiz' or 'regular', defaults to 'regular'
:param allows_multiple_answers: :code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False` :param allows_multiple_answers: Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode :param allows_revoting: Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls
:param shuffle_options: Pass :code:`True`, if the poll options must be shown in random order
:param allow_adding_options: Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes
:param hide_results_until_closes: Pass :code:`True`, if poll results must be shown only after the poll closes
:param correct_option_ids: A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode
:param explanation: 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 with at most 2 line feeds after entities parsing :param explanation: 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 with at most 2 line feeds after entities parsing
:param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. :param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode* :param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*
:param open_period: Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*. :param open_period: Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.
:param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*. :param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.
:param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview. :param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.
:param description: Description of the poll to be sent, 0-1024 characters after entities parsing
:param description_parse_mode: Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param description_entities: A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*
:param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound. :param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.
:param protect_content: Protects the contents of the sent message from forwarding and saving :param protect_content: Protects the contents of the sent message from forwarding and saving
:param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance :param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance
:param message_effect_id: Unique identifier of the message effect to be added to the message; for private chats only :param message_effect_id: Unique identifier of the message effect to be added to the message; for private chats only
:param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user :param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user
:param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found :param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode
:return: instance of method :class:`aiogram.methods.send_poll.SendPoll` :return: instance of method :class:`aiogram.methods.send_poll.SendPoll`
""" """
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -2515,19 +2556,27 @@ class Message(MaybeInaccessibleMessage):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
message_effect_id=message_effect_id, message_effect_id=message_effect_id,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
**kwargs, **kwargs,
).as_(self._bot) ).as_(self._bot)
@ -2540,13 +2589,20 @@ class Message(MaybeInaccessibleMessage):
is_anonymous: bool | None = None, is_anonymous: bool | None = None,
type: str | None = None, type: str | None = None,
allows_multiple_answers: bool | None = None, allows_multiple_answers: bool | None = None,
correct_option_id: int | None = None, allows_revoting: bool | None = None,
shuffle_options: bool | None = None,
allow_adding_options: bool | None = None,
hide_results_until_closes: bool | None = None,
correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_parse_mode: str | Default | None = Default("parse_mode"), explanation_parse_mode: str | Default | None = Default("parse_mode"),
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTimeUnion | None = None, close_date: DateTimeUnion | None = None,
is_closed: bool | None = None, is_closed: bool | None = None,
description: str | None = None,
description_parse_mode: str | Default | None = Default("parse_mode"),
description_entities: list[MessageEntity] | None = None,
disable_notification: bool | None = None, disable_notification: bool | None = None,
protect_content: bool | Default | None = Default("protect_content"), protect_content: bool | Default | None = Default("protect_content"),
allow_paid_broadcast: bool | None = None, allow_paid_broadcast: bool | None = None,
@ -2554,6 +2610,7 @@ class Message(MaybeInaccessibleMessage):
reply_parameters: ReplyParameters | None = None, reply_parameters: ReplyParameters | None = None,
reply_markup: ReplyMarkupUnion | None = None, reply_markup: ReplyMarkupUnion | None = None,
allow_sending_without_reply: bool | None = None, allow_sending_without_reply: bool | None = None,
correct_option_id: int | None = None,
reply_to_message_id: int | None = None, reply_to_message_id: int | None = None,
**kwargs: Any, **kwargs: Any,
) -> SendPoll: ) -> SendPoll:
@ -2575,14 +2632,21 @@ class Message(MaybeInaccessibleMessage):
:param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode* :param question_entities: A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of *question_parse_mode*
:param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True` :param is_anonymous: :code:`True`, if the poll needs to be anonymous, defaults to :code:`True`
:param type: Poll type, 'quiz' or 'regular', defaults to 'regular' :param type: Poll type, 'quiz' or 'regular', defaults to 'regular'
:param allows_multiple_answers: :code:`True`, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to :code:`False` :param allows_multiple_answers: Pass :code:`True`, if the poll allows multiple answers, defaults to :code:`False`
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode :param allows_revoting: Pass :code:`True`, if the poll allows to change chosen answer options, defaults to :code:`False` for quizzes and to :code:`True` for regular polls
:param shuffle_options: Pass :code:`True`, if the poll options must be shown in random order
:param allow_adding_options: Pass :code:`True`, if answer options can be added to the poll after creation; not supported for anonymous polls and quizzes
:param hide_results_until_closes: Pass :code:`True`, if poll results must be shown only after the poll closes
:param correct_option_ids: A JSON-serialized list of monotonically increasing 0-based identifiers of the correct answer options, required for polls in quiz mode
:param explanation: 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 with at most 2 line feeds after entities parsing :param explanation: 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 with at most 2 line feeds after entities parsing
:param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details. :param explanation_parse_mode: Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode* :param explanation_entities: A JSON-serialized list of special entities that appear in the poll explanation. It can be specified instead of *explanation_parse_mode*
:param open_period: Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with *close_date*. :param open_period: Amount of time in seconds the poll will be active after creation, 5-2628000. Can't be used together with *close_date*.
:param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with *open_period*. :param close_date: Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 2628000 seconds in the future. Can't be used together with *open_period*.
:param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview. :param is_closed: Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview.
:param description: Description of the poll to be sent, 0-1024 characters after entities parsing
:param description_parse_mode: Mode for parsing entities in the poll description. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.
:param description_entities: A JSON-serialized list of special entities that appear in the poll description, which can be specified instead of *description_parse_mode*
:param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound. :param disable_notification: Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound.
:param protect_content: Protects the contents of the sent message from forwarding and saving :param protect_content: Protects the contents of the sent message from forwarding and saving
:param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance :param allow_paid_broadcast: Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance
@ -2590,6 +2654,7 @@ class Message(MaybeInaccessibleMessage):
:param reply_parameters: Description of the message to reply to :param reply_parameters: Description of the message to reply to
:param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user :param reply_markup: Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user
:param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found :param allow_sending_without_reply: Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
:param correct_option_id: 0-based identifier of the correct answer option, required for polls in quiz mode
:param reply_to_message_id: If the message is a reply, ID of the original message :param reply_to_message_id: If the message is a reply, ID of the original message
:return: instance of method :class:`aiogram.methods.send_poll.SendPoll` :return: instance of method :class:`aiogram.methods.send_poll.SendPoll`
""" """
@ -2613,13 +2678,20 @@ class Message(MaybeInaccessibleMessage):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
correct_option_id=correct_option_id, allows_revoting=allows_revoting,
shuffle_options=shuffle_options,
allow_adding_options=allow_adding_options,
hide_results_until_closes=hide_results_until_closes,
correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_parse_mode=explanation_parse_mode, explanation_parse_mode=explanation_parse_mode,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
is_closed=is_closed, is_closed=is_closed,
description=description,
description_parse_mode=description_parse_mode,
description_entities=description_entities,
disable_notification=disable_notification, disable_notification=disable_notification,
protect_content=protect_content, protect_content=protect_content,
allow_paid_broadcast=allow_paid_broadcast, allow_paid_broadcast=allow_paid_broadcast,
@ -2627,6 +2699,7 @@ class Message(MaybeInaccessibleMessage):
reply_parameters=reply_parameters, reply_parameters=reply_parameters,
reply_markup=reply_markup, reply_markup=reply_markup,
allow_sending_without_reply=allow_sending_without_reply, allow_sending_without_reply=allow_sending_without_reply,
correct_option_id=correct_option_id,
reply_to_message_id=reply_to_message_id, reply_to_message_id=reply_to_message_id,
**kwargs, **kwargs,
).as_(self._bot) ).as_(self._bot)

View file

@ -2,6 +2,8 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
from pydantic import Field
from .base import TelegramObject from .base import TelegramObject
from .custom import DateTime from .custom import DateTime
@ -33,10 +35,12 @@ class Poll(TelegramObject):
"""Poll type, currently can be 'regular' or 'quiz'""" """Poll type, currently can be 'regular' or 'quiz'"""
allows_multiple_answers: bool allows_multiple_answers: bool
""":code:`True`, if the poll allows multiple answers""" """:code:`True`, if the poll allows multiple answers"""
allows_revoting: bool
""":code:`True`, if the poll allows to change the chosen answer options"""
question_entities: list[MessageEntity] | None = None question_entities: list[MessageEntity] | None = None
"""*Optional*. Special entities that appear in the *question*. Currently, only custom emoji entities are allowed in poll questions""" """*Optional*. Special entities that appear in the *question*. Currently, only custom emoji entities are allowed in poll questions"""
correct_option_id: int | None = None correct_option_ids: list[int] | None = None
"""*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.""" """*Optional*. Array of 0-based identifiers of the correct answer options. Available only for polls in quiz mode which are closed or were sent (not forwarded) by the bot or to the private chat with the bot."""
explanation: str | None = None explanation: str | None = None
"""*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""" """*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[MessageEntity] | None = None explanation_entities: list[MessageEntity] | None = None
@ -45,6 +49,15 @@ class Poll(TelegramObject):
"""*Optional*. Amount of time in seconds the poll will be active after creation""" """*Optional*. Amount of time in seconds the poll will be active after creation"""
close_date: DateTime | None = None close_date: DateTime | None = None
"""*Optional*. Point in time (Unix timestamp) when the poll will be automatically closed""" """*Optional*. Point in time (Unix timestamp) when the poll will be automatically closed"""
description: str | None = None
"""*Optional*. Description of the poll; for polls inside the :class:`aiogram.types.message.Message` object only"""
description_entities: list[MessageEntity] | None = None
"""*Optional*. Special entities like usernames, URLs, bot commands, etc. that appear in the description"""
correct_option_id: int | None = Field(None, json_schema_extra={"deprecated": True})
"""*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.
.. deprecated:: API:9.6
https://core.telegram.org/bots/api-changelog#april-3-2026"""
if TYPE_CHECKING: if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -61,12 +74,16 @@ class Poll(TelegramObject):
is_anonymous: bool, is_anonymous: bool,
type: str, type: str,
allows_multiple_answers: bool, allows_multiple_answers: bool,
allows_revoting: bool,
question_entities: list[MessageEntity] | None = None, question_entities: list[MessageEntity] | None = None,
correct_option_id: int | None = None, correct_option_ids: list[int] | None = None,
explanation: str | None = None, explanation: str | None = None,
explanation_entities: list[MessageEntity] | None = None, explanation_entities: list[MessageEntity] | None = None,
open_period: int | None = None, open_period: int | None = None,
close_date: DateTime | None = None, close_date: DateTime | None = None,
description: str | None = None,
description_entities: list[MessageEntity] | None = None,
correct_option_id: int | None = None,
**__pydantic_kwargs: Any, **__pydantic_kwargs: Any,
) -> None: ) -> None:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -82,11 +99,15 @@ class Poll(TelegramObject):
is_anonymous=is_anonymous, is_anonymous=is_anonymous,
type=type, type=type,
allows_multiple_answers=allows_multiple_answers, allows_multiple_answers=allows_multiple_answers,
allows_revoting=allows_revoting,
question_entities=question_entities, question_entities=question_entities,
correct_option_id=correct_option_id, correct_option_ids=correct_option_ids,
explanation=explanation, explanation=explanation,
explanation_entities=explanation_entities, explanation_entities=explanation_entities,
open_period=open_period, open_period=open_period,
close_date=close_date, close_date=close_date,
description=description,
description_entities=description_entities,
correct_option_id=correct_option_id,
**__pydantic_kwargs, **__pydantic_kwargs,
) )

View file

@ -20,6 +20,8 @@ class PollAnswer(TelegramObject):
"""Unique poll identifier""" """Unique poll identifier"""
option_ids: list[int] option_ids: list[int]
"""0-based identifiers of chosen answer options. May be empty if the vote was retracted.""" """0-based identifiers of chosen answer options. May be empty if the vote was retracted."""
option_persistent_ids: list[str]
"""Persistent identifiers of the chosen answer options. May be empty if the vote was retracted."""
voter_chat: Chat | None = None voter_chat: Chat | None = None
"""*Optional*. The chat that changed the answer to the poll, if the voter is anonymous""" """*Optional*. The chat that changed the answer to the poll, if the voter is anonymous"""
user: User | None = None user: User | None = None
@ -34,6 +36,7 @@ class PollAnswer(TelegramObject):
*, *,
poll_id: str, poll_id: str,
option_ids: list[int], option_ids: list[int],
option_persistent_ids: list[str],
voter_chat: Chat | None = None, voter_chat: Chat | None = None,
user: User | None = None, user: User | None = None,
**__pydantic_kwargs: Any, **__pydantic_kwargs: Any,
@ -45,6 +48,7 @@ class PollAnswer(TelegramObject):
super().__init__( super().__init__(
poll_id=poll_id, poll_id=poll_id,
option_ids=option_ids, option_ids=option_ids,
option_persistent_ids=option_persistent_ids,
voter_chat=voter_chat, voter_chat=voter_chat,
user=user, user=user,
**__pydantic_kwargs, **__pydantic_kwargs,

View file

@ -3,9 +3,12 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any
from .base import TelegramObject from .base import TelegramObject
from .custom import DateTime
if TYPE_CHECKING: if TYPE_CHECKING:
from .chat import Chat
from .message_entity import MessageEntity from .message_entity import MessageEntity
from .user import User
class PollOption(TelegramObject): class PollOption(TelegramObject):
@ -15,12 +18,20 @@ class PollOption(TelegramObject):
Source: https://core.telegram.org/bots/api#polloption Source: https://core.telegram.org/bots/api#polloption
""" """
persistent_id: str
"""Unique identifier of the option, persistent on option addition and deletion"""
text: str text: str
"""Option text, 1-100 characters""" """Option text, 1-100 characters"""
voter_count: int voter_count: int
"""Number of users that voted for this option""" """Number of users who voted for this option; may be 0 if unknown"""
text_entities: list[MessageEntity] | None = None text_entities: list[MessageEntity] | None = None
"""*Optional*. Special entities that appear in the option *text*. Currently, only custom emoji entities are allowed in poll option texts""" """*Optional*. Special entities that appear in the option *text*. Currently, only custom emoji entities are allowed in poll option texts"""
added_by_user: User | None = None
"""*Optional*. User who added the option; omitted if the option wasn't added by a user after poll creation"""
added_by_chat: Chat | None = None
"""*Optional*. Chat that added the option; omitted if the option wasn't added by a chat after poll creation"""
addition_date: DateTime | None = None
"""*Optional*. Point in time (Unix timestamp) when the option was added; omitted if the option existed in the original poll"""
if TYPE_CHECKING: if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -29,9 +40,13 @@ class PollOption(TelegramObject):
def __init__( def __init__(
__pydantic__self__, __pydantic__self__,
*, *,
persistent_id: str,
text: str, text: str,
voter_count: int, voter_count: int,
text_entities: list[MessageEntity] | None = None, text_entities: list[MessageEntity] | None = None,
added_by_user: User | None = None,
added_by_chat: Chat | None = None,
addition_date: DateTime | None = None,
**__pydantic_kwargs: Any, **__pydantic_kwargs: Any,
) -> None: ) -> None:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -39,8 +54,12 @@ class PollOption(TelegramObject):
# Is needed only for type checking and IDE support without any additional plugins # Is needed only for type checking and IDE support without any additional plugins
super().__init__( super().__init__(
persistent_id=persistent_id,
text=text, text=text,
voter_count=voter_count, voter_count=voter_count,
text_entities=text_entities, text_entities=text_entities,
added_by_user=added_by_user,
added_by_chat=added_by_chat,
addition_date=addition_date,
**__pydantic_kwargs, **__pydantic_kwargs,
) )

View file

@ -0,0 +1,51 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from .base import TelegramObject
if TYPE_CHECKING:
from .maybe_inaccessible_message_union import MaybeInaccessibleMessageUnion
from .message_entity import MessageEntity
class PollOptionAdded(TelegramObject):
"""
Describes a service message about an option added to a poll.
Source: https://core.telegram.org/bots/api#polloptionadded
"""
option_persistent_id: str
"""Unique identifier of the added option"""
option_text: str
"""Option text"""
poll_message: MaybeInaccessibleMessageUnion | None = None
"""*Optional*. Message containing the poll to which the option was added, if known. Note that the :class:`aiogram.types.message.Message` object in this field will not contain the *reply_to_message* field even if it itself is a reply."""
option_text_entities: list[MessageEntity] | None = None
"""*Optional*. Special entities that appear in the *option_text*"""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(
__pydantic__self__,
*,
option_persistent_id: str,
option_text: str,
poll_message: MaybeInaccessibleMessageUnion | None = None,
option_text_entities: list[MessageEntity] | None = None,
**__pydantic_kwargs: Any,
) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(
option_persistent_id=option_persistent_id,
option_text=option_text,
poll_message=poll_message,
option_text_entities=option_text_entities,
**__pydantic_kwargs,
)

View file

@ -0,0 +1,51 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from .base import TelegramObject
if TYPE_CHECKING:
from .maybe_inaccessible_message_union import MaybeInaccessibleMessageUnion
from .message_entity import MessageEntity
class PollOptionDeleted(TelegramObject):
"""
Describes a service message about an option deleted from a poll.
Source: https://core.telegram.org/bots/api#polloptiondeleted
"""
option_persistent_id: str
"""Unique identifier of the deleted option"""
option_text: str
"""Option text"""
poll_message: MaybeInaccessibleMessageUnion | None = None
"""*Optional*. Message containing the poll from which the option was deleted, if known. Note that the :class:`aiogram.types.message.Message` object in this field will not contain the *reply_to_message* field even if it itself is a reply."""
option_text_entities: list[MessageEntity] | None = None
"""*Optional*. Special entities that appear in the *option_text*"""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(
__pydantic__self__,
*,
option_persistent_id: str,
option_text: str,
poll_message: MaybeInaccessibleMessageUnion | None = None,
option_text_entities: list[MessageEntity] | None = None,
**__pydantic_kwargs: Any,
) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(
option_persistent_id=option_persistent_id,
option_text=option_text,
poll_message=poll_message,
option_text_entities=option_text_entities,
**__pydantic_kwargs,
)

View file

@ -0,0 +1,25 @@
from typing import TYPE_CHECKING, Any
from .base import TelegramObject
class PreparedKeyboardButton(TelegramObject):
"""
Describes a keyboard button to be used by a user of a Mini App.
Source: https://core.telegram.org/bots/api#preparedkeyboardbutton
"""
id: str
"""Unique identifier of the keyboard button"""
if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!!
# This section was auto-generated via `butcher`
def __init__(__pydantic__self__, *, id: str, **__pydantic_kwargs: Any) -> None:
# DO NOT EDIT MANUALLY!!!
# This method was auto-generated via `butcher`
# Is needed only for type checking and IDE support without any additional plugins
super().__init__(id=id, **__pydantic_kwargs)

View file

@ -24,7 +24,7 @@ class ReplyParameters(TelegramObject):
allow_sending_without_reply: bool | Default | None = Default("allow_sending_without_reply") allow_sending_without_reply: bool | Default | None = Default("allow_sending_without_reply")
"""*Optional*. Pass :code:`True` if the message should be sent even if the specified message to be replied to is not found. Always :code:`False` for replies in another chat or forum topic. Always :code:`True` for messages sent on behalf of a business account.""" """*Optional*. Pass :code:`True` if the message should be sent even if the specified message to be replied to is not found. Always :code:`False` for replies in another chat or forum topic. Always :code:`True` for messages sent on behalf of a business account."""
quote: str | None = None quote: str | None = None
"""*Optional*. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities. The message will fail to send if the quote isn't found in the original message.""" """*Optional*. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities. The message will fail to send if the quote isn't found in the original message."""
quote_parse_mode: str | Default | None = Default("parse_mode") quote_parse_mode: str | Default | None = Default("parse_mode")
"""*Optional*. Mode for parsing entities in the quote. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details.""" """*Optional*. Mode for parsing entities in the quote. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
quote_entities: list[MessageEntity] | None = None quote_entities: list[MessageEntity] | None = None
@ -33,6 +33,8 @@ class ReplyParameters(TelegramObject):
"""*Optional*. Position of the quote in the original message in UTF-16 code units""" """*Optional*. Position of the quote in the original message in UTF-16 code units"""
checklist_task_id: int | None = None checklist_task_id: int | None = None
"""*Optional*. Identifier of the specific checklist task to be replied to""" """*Optional*. Identifier of the specific checklist task to be replied to"""
poll_option_id: str | None = None
"""*Optional*. Persistent identifier of the specific poll option to be replied to"""
if TYPE_CHECKING: if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -51,6 +53,7 @@ class ReplyParameters(TelegramObject):
quote_entities: list[MessageEntity] | None = None, quote_entities: list[MessageEntity] | None = None,
quote_position: int | None = None, quote_position: int | None = None,
checklist_task_id: int | None = None, checklist_task_id: int | None = None,
poll_option_id: str | None = None,
**__pydantic_kwargs: Any, **__pydantic_kwargs: Any,
) -> None: ) -> None:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -66,5 +69,6 @@ class ReplyParameters(TelegramObject):
quote_entities=quote_entities, quote_entities=quote_entities,
quote_position=quote_position, quote_position=quote_position,
checklist_task_id=checklist_task_id, checklist_task_id=checklist_task_id,
poll_option_id=poll_option_id,
**__pydantic_kwargs, **__pydantic_kwargs,
) )

View file

@ -20,7 +20,7 @@ class TextQuote(TelegramObject):
position: int position: int
"""Approximate quote position in the original message in UTF-16 code units as specified by the sender""" """Approximate quote position in the original message in UTF-16 code units as specified by the sender"""
entities: list[MessageEntity] | None = None entities: list[MessageEntity] | None = None
"""*Optional*. Special entities that appear in the quote. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities are kept in quotes.""" """*Optional*. Special entities that appear in the quote. Currently, only *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, *custom_emoji*, and *date_time* entities are kept in quotes."""
is_manual: bool | None = None is_manual: bool | None = None
"""*Optional*. :code:`True`, if the quote was chosen manually by the message sender. Otherwise, the quote was added automatically by the server.""" """*Optional*. :code:`True`, if the quote was chosen manually by the message sender. Otherwise, the quote was added automatically by the server."""

View file

@ -15,6 +15,7 @@ if TYPE_CHECKING:
from .chat_member_updated import ChatMemberUpdated from .chat_member_updated import ChatMemberUpdated
from .chosen_inline_result import ChosenInlineResult from .chosen_inline_result import ChosenInlineResult
from .inline_query import InlineQuery from .inline_query import InlineQuery
from .managed_bot_updated import ManagedBotUpdated
from .message import Message from .message import Message
from .message_reaction_count_updated import MessageReactionCountUpdated from .message_reaction_count_updated import MessageReactionCountUpdated
from .message_reaction_updated import MessageReactionUpdated from .message_reaction_updated import MessageReactionUpdated
@ -82,6 +83,8 @@ class Update(TelegramObject):
"""*Optional*. A chat boost was added or changed. The bot must be an administrator in the chat to receive these updates.""" """*Optional*. A chat boost was added or changed. The bot must be an administrator in the chat to receive these updates."""
removed_chat_boost: ChatBoostRemoved | None = None removed_chat_boost: ChatBoostRemoved | None = None
"""*Optional*. A boost was removed from a chat. The bot must be an administrator in the chat to receive these updates.""" """*Optional*. A boost was removed from a chat. The bot must be an administrator in the chat to receive these updates."""
managed_bot: ManagedBotUpdated | None = None
"""*Optional*. A new bot was created to be managed by the bot or token of a bot was changed"""
if TYPE_CHECKING: if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -114,6 +117,7 @@ class Update(TelegramObject):
chat_join_request: ChatJoinRequest | None = None, chat_join_request: ChatJoinRequest | None = None,
chat_boost: ChatBoostUpdated | None = None, chat_boost: ChatBoostUpdated | None = None,
removed_chat_boost: ChatBoostRemoved | None = None, removed_chat_boost: ChatBoostRemoved | None = None,
managed_bot: ManagedBotUpdated | None = None,
**__pydantic_kwargs: Any, **__pydantic_kwargs: Any,
) -> None: ) -> None:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -145,6 +149,7 @@ class Update(TelegramObject):
chat_join_request=chat_join_request, chat_join_request=chat_join_request,
chat_boost=chat_boost, chat_boost=chat_boost,
removed_chat_boost=removed_chat_boost, removed_chat_boost=removed_chat_boost,
managed_bot=managed_bot,
**__pydantic_kwargs, **__pydantic_kwargs,
) )
@ -206,6 +211,8 @@ class Update(TelegramObject):
return "business_message" return "business_message"
if self.purchased_paid_media: if self.purchased_paid_media:
return "purchased_paid_media" return "purchased_paid_media"
if self.managed_bot:
return "managed_bot"
raise UpdateTypeLookupError("Update does not contain any known event type.") raise UpdateTypeLookupError("Update does not contain any known event type.")

View file

@ -47,6 +47,8 @@ class User(TelegramObject):
"""*Optional*. :code:`True`, if the bot has forum topic mode enabled in private chats. Returned only in :class:`aiogram.methods.get_me.GetMe`.""" """*Optional*. :code:`True`, if the bot has forum topic mode enabled in private chats. Returned only in :class:`aiogram.methods.get_me.GetMe`."""
allows_users_to_create_topics: bool | None = None allows_users_to_create_topics: bool | None = None
"""*Optional*. :code:`True`, if the bot allows users to create and delete topics in private chats. Returned only in :class:`aiogram.methods.get_me.GetMe`.""" """*Optional*. :code:`True`, if the bot allows users to create and delete topics in private chats. Returned only in :class:`aiogram.methods.get_me.GetMe`."""
can_manage_bots: bool | None = None
"""*Optional*. :code:`True`, if other bots can be created to be controlled by the bot. Returned only in :class:`aiogram.methods.get_me.GetMe`."""
if TYPE_CHECKING: if TYPE_CHECKING:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -70,6 +72,7 @@ class User(TelegramObject):
has_main_web_app: bool | None = None, has_main_web_app: bool | None = None,
has_topics_enabled: bool | None = None, has_topics_enabled: bool | None = None,
allows_users_to_create_topics: bool | None = None, allows_users_to_create_topics: bool | None = None,
can_manage_bots: bool | None = None,
**__pydantic_kwargs: Any, **__pydantic_kwargs: Any,
) -> None: ) -> None:
# DO NOT EDIT MANUALLY!!! # DO NOT EDIT MANUALLY!!!
@ -92,6 +95,7 @@ class User(TelegramObject):
has_main_web_app=has_main_web_app, has_main_web_app=has_main_web_app,
has_topics_enabled=has_topics_enabled, has_topics_enabled=has_topics_enabled,
allows_users_to_create_topics=allows_users_to_create_topics, allows_users_to_create_topics=allows_users_to_create_topics,
can_manage_bots=can_manage_bots,
**__pydantic_kwargs, **__pydantic_kwargs,
) )

View file

@ -265,7 +265,7 @@ class HtmlDecoration(TextDecoration):
return html.escape(value, quote=False) return html.escape(value, quote=False)
def custom_emoji(self, value: str, custom_emoji_id: str) -> str: def custom_emoji(self, value: str, custom_emoji_id: str) -> str:
return self._tag(self.EMOJI_TAG, value, attrs={"emoji_id": custom_emoji_id}) return self._tag(self.EMOJI_TAG, value, attrs={"emoji-id": custom_emoji_id})
def blockquote(self, value: str) -> str: def blockquote(self, value: str) -> str:
return self._tag(self.BLOCKQUOTE_TAG, value) return self._tag(self.BLOCKQUOTE_TAG, value)

View file

@ -0,0 +1,38 @@
##################
getManagedBotToken
##################
Returns: :obj:`str`
.. automodule:: aiogram.methods.get_managed_bot_token
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields
Usage
=====
As bot method
-------------
.. code-block::
result: str = await bot.get_managed_bot_token(...)
Method as object
----------------
Imports:
- :code:`from aiogram.methods.get_managed_bot_token import GetManagedBotToken`
- alias: :code:`from aiogram.methods import GetManagedBotToken`
With specific bot
~~~~~~~~~~~~~~~~~
.. code-block:: python
result: str = await bot(GetManagedBotToken(...))

View file

@ -35,6 +35,7 @@ Available methods
:maxdepth: 1 :maxdepth: 1
answer_callback_query answer_callback_query
answer_web_app_query
approve_chat_join_request approve_chat_join_request
ban_chat_member ban_chat_member
ban_chat_sender_chat ban_chat_sender_chat
@ -74,6 +75,7 @@ Available methods
get_chat_menu_button get_chat_menu_button
get_file get_file
get_forum_topic_icon_stickers get_forum_topic_icon_stickers
get_managed_bot_token
get_me get_me
get_my_commands get_my_commands
get_my_default_administrator_rights get_my_default_administrator_rights
@ -98,9 +100,12 @@ Available methods
remove_user_verification remove_user_verification
reopen_forum_topic reopen_forum_topic
reopen_general_forum_topic reopen_general_forum_topic
replace_managed_bot_token
repost_story repost_story
restrict_chat_member restrict_chat_member
revoke_chat_invite_link revoke_chat_invite_link
save_prepared_inline_message
save_prepared_keyboard_button
send_animation send_animation
send_audio send_audio
send_chat_action send_chat_action
@ -173,16 +178,6 @@ Updating messages
stop_message_live_location stop_message_live_location
stop_poll stop_poll
Inline mode
===========
.. toctree::
:maxdepth: 1
answer_inline_query
answer_web_app_query
save_prepared_inline_message
Games Games
===== =====
@ -226,3 +221,11 @@ Telegram Passport
:maxdepth: 1 :maxdepth: 1
set_passport_data_errors set_passport_data_errors
Inline mode
===========
.. toctree::
:maxdepth: 1
answer_inline_query

View file

@ -0,0 +1,45 @@
######################
replaceManagedBotToken
######################
Returns: :obj:`str`
.. automodule:: aiogram.methods.replace_managed_bot_token
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields
Usage
=====
As bot method
-------------
.. code-block::
result: str = await bot.replace_managed_bot_token(...)
Method as object
----------------
Imports:
- :code:`from aiogram.methods.replace_managed_bot_token import ReplaceManagedBotToken`
- alias: :code:`from aiogram.methods import ReplaceManagedBotToken`
With specific bot
~~~~~~~~~~~~~~~~~
.. code-block:: python
result: str = await bot(ReplaceManagedBotToken(...))
As reply into Webhook in handler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
return ReplaceManagedBotToken(...)

View file

@ -0,0 +1,45 @@
##########################
savePreparedKeyboardButton
##########################
Returns: :obj:`PreparedKeyboardButton`
.. automodule:: aiogram.methods.save_prepared_keyboard_button
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields
Usage
=====
As bot method
-------------
.. code-block::
result: PreparedKeyboardButton = await bot.save_prepared_keyboard_button(...)
Method as object
----------------
Imports:
- :code:`from aiogram.methods.save_prepared_keyboard_button import SavePreparedKeyboardButton`
- alias: :code:`from aiogram.methods import SavePreparedKeyboardButton`
With specific bot
~~~~~~~~~~~~~~~~~
.. code-block:: python
result: PreparedKeyboardButton = await bot(SavePreparedKeyboardButton(...))
As reply into Webhook in handler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
return SavePreparedKeyboardButton(...)

View file

@ -43,3 +43,9 @@ As reply into Webhook in handler
.. code-block:: python .. code-block:: python
return SetChatMemberTag(...) return SetChatMemberTag(...)
As shortcut from received object
--------------------------------
- :meth:`aiogram.types.chat.Chat.set_member_tag`

View file

@ -125,12 +125,15 @@ Available types
keyboard_button keyboard_button
keyboard_button_poll_type keyboard_button_poll_type
keyboard_button_request_chat keyboard_button_request_chat
keyboard_button_request_managed_bot
keyboard_button_request_user keyboard_button_request_user
keyboard_button_request_users keyboard_button_request_users
link_preview_options link_preview_options
location location
location_address location_address
login_url login_url
managed_bot_created
managed_bot_updated
maybe_inaccessible_message maybe_inaccessible_message
menu_button menu_button
menu_button_commands menu_button_commands
@ -161,6 +164,10 @@ Available types
poll poll
poll_answer poll_answer
poll_option poll_option
poll_option_added
poll_option_deleted
prepared_inline_message
prepared_keyboard_button
proximity_alert_triggered proximity_alert_triggered
reaction_count reaction_count
reaction_type reaction_type
@ -171,6 +178,7 @@ Available types
reply_keyboard_remove reply_keyboard_remove
reply_parameters reply_parameters
response_parameters response_parameters
sent_web_app_message
shared_user shared_user
star_amount star_amount
story story
@ -255,8 +263,6 @@ Inline mode
input_message_content input_message_content
input_text_message_content input_text_message_content
input_venue_message_content input_venue_message_content
prepared_inline_message
sent_web_app_message
Payments Payments
======== ========

View file

@ -0,0 +1,10 @@
###############################
KeyboardButtonRequestManagedBot
###############################
.. automodule:: aiogram.types.keyboard_button_request_managed_bot
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields

View file

@ -0,0 +1,10 @@
#################
ManagedBotCreated
#################
.. automodule:: aiogram.types.managed_bot_created
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields

View file

@ -0,0 +1,10 @@
#################
ManagedBotUpdated
#################
.. automodule:: aiogram.types.managed_bot_updated
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields

View file

@ -0,0 +1,10 @@
###############
PollOptionAdded
###############
.. automodule:: aiogram.types.poll_option_added
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields

View file

@ -0,0 +1,10 @@
#################
PollOptionDeleted
#################
.. automodule:: aiogram.types.poll_option_deleted
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields

View file

@ -0,0 +1,10 @@
######################
PreparedKeyboardButton
######################
.. automodule:: aiogram.types.prepared_keyboard_button
:members:
:member-order: bysource
:undoc-members: True
:exclude-members: model_config,model_fields

View file

@ -24,6 +24,15 @@ class TestDefault:
default = Default("test") default = Default("test")
assert repr(default) == "<Default('test')>" assert repr(default) == "<Default('test')>"
def test_eq_same_name(self):
assert Default("test") == Default("test")
def test_eq_different_name(self):
assert Default("foo") != Default("bar")
def test_hash(self):
assert hash(Default("test")) == hash(Default("test"))
class TestDefaultBotProperties: class TestDefaultBotProperties:
def test_post_init_empty(self): def test_post_init_empty(self):

View file

@ -0,0 +1,11 @@
from aiogram.methods import GetManagedBotToken
from tests.mocked_bot import MockedBot
class TestGetManagedBotToken:
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(GetManagedBotToken, ok=True, result="42:NEW_TOKEN")
response: str = await bot.get_managed_bot_token(user_id=42)
bot.get_request()
assert response == prepare_result.result

View file

@ -0,0 +1,13 @@
from aiogram.methods import ReplaceManagedBotToken
from tests.mocked_bot import MockedBot
class TestReplaceManagedBotToken:
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(
ReplaceManagedBotToken, ok=True, result="42:REPLACED_TOKEN"
)
response: str = await bot.replace_managed_bot_token(user_id=42)
bot.get_request()
assert response == prepare_result.result

View file

@ -0,0 +1,22 @@
from aiogram.methods import SavePreparedKeyboardButton
from aiogram.types import KeyboardButton, KeyboardButtonRequestManagedBot, PreparedKeyboardButton
from tests.mocked_bot import MockedBot
class TestSavePreparedKeyboardButton:
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(
SavePreparedKeyboardButton,
ok=True,
result=PreparedKeyboardButton(id="test-id"),
)
response: PreparedKeyboardButton = await bot.save_prepared_keyboard_button(
user_id=42,
button=KeyboardButton(
text="Create bot",
request_managed_bot=KeyboardButtonRequestManagedBot(request_id=1),
),
)
bot.get_request()
assert response == prepare_result.result

View file

@ -17,13 +17,14 @@ class TestSendPoll:
id="QA", id="QA",
question="Q", question="Q",
options=[ options=[
PollOption(text="A", voter_count=0), PollOption(persistent_id="1", text="A", voter_count=0),
PollOption(text="B", voter_count=0), PollOption(persistent_id="2", text="B", voter_count=0),
], ],
is_closed=False, is_closed=False,
is_anonymous=False, is_anonymous=False,
type="quiz", type="quiz",
allows_multiple_answers=False, allows_multiple_answers=False,
allows_revoting=False,
total_voter_count=0, total_voter_count=0,
correct_option_id=0, correct_option_id=0,
), ),

Some files were not shown because too many files have changed in this diff Show more