Webhook docs (#1248)

* Added documentation for polling/webhook modes

* Added changelog

* Added changelog
This commit is contained in:
Alex Root Junior 2023-08-06 16:59:29 +03:00 committed by GitHub
parent 62d4b9014c
commit b311d59fce
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
37 changed files with 2595 additions and 692 deletions

View file

@ -15,6 +15,13 @@ With dispatcher you can do:
Dispatcher is also separated into two entities - Router and Dispatcher.
Dispatcher is subclass of router and should be always is root router.
Telegram supports two ways of receiving updates:
- :ref:`Webhook <webhook>` - you should configure your web server to receive updates from Telegram;
- :ref:`Long polling <long-polling>` - you should request updates from Telegram.
So, you can use both of them with *aiogram*.
.. toctree::
router
@ -25,3 +32,5 @@ Dispatcher is subclass of router and should be always is root router.
finite_state_machine/index
flags
errors
long_polling
webhook

View file

@ -0,0 +1,32 @@
.. _long-polling:
############
Long-polling
############
Long-polling is a technology that allows a Telegram server to send updates in case
when you don't have dedicated IP address or port to receive webhooks for example
on a developer machine.
To use long-polling mode you should use :meth:`aiogram.dispatcher.dispatcher.Dispatcher.start_polling`
or :meth:`aiogram.dispatcher.dispatcher.Dispatcher.run_polling` methods.
.. note::
You can use polling from only one polling process per single Bot token,
in other case Telegram server will return an error.
.. note::
If you will need to scale your bot, you should use webhooks instead of long-polling.
.. note::
If you will use multibot mode, you should use webhook mode for all bots.
Example
=======
This example will show you how to create simple echo bot based on long-polling.
.. literalinclude:: ../../examples/echo_bot.py

125
docs/dispatcher/webhook.rst Normal file
View file

@ -0,0 +1,125 @@
.. _webhook:
#######
Webhook
#######
Telegram Bot API supports webhook.
If you set webhook for your bot, Telegram will send updates to the specified url.
You can use :meth:`aiogram.methods.set_webhook.SetWebhook` method to specify a url
and receive incoming updates on it.
.. note::
If you use webhook, you can't use long polling at the same time.
Before start i'll recommend you to read `official Telegram's documentation about webhook <https://core.telegram.org/bots/webhooks>`_
After you read it, you can start to read this section.
Generally to use webhook with aiogram you should use any async web framework.
Buy out of the box aiogram has an aiohttp integration, so we'll use it.
.. note::
You can use any async web framework you want, but you should write your own integration if you don't use aiohttp.
aiohttp integration
===================
Out of the box aiogram has aiohttp integration, so you can use it.
Here is available few ways to do it using different implementations of the webhook controller:
- :class:`aiogram.webhook.aiohttp_server.BaseRequestHandler` - Abstract class for aiohttp webhook controller
- :class:`aiogram.webhook.aiohttp_server.SimpleRequestHandler` - Simple webhook controller, uses single Bot instance
- :class:`aiogram.webhook.aiohttp_server.TokenBasedRequestHandler` - Token based webhook controller, uses multiple Bot instances and tokens
You can use it as is or inherit from it and override some methods.
.. autoclass:: aiogram.webhook.aiohttp_server.BaseRequestHandler
:members: __init__, register, close, resolve_bot, verify_secret, handle
.. autoclass:: aiogram.webhook.aiohttp_server.SimpleRequestHandler
:members: __init__, register, close, resolve_bot, verify_secret, handle
.. autoclass:: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler
:members: __init__, register, close, resolve_bot, verify_secret, handle
Security
--------
Telegram supports two methods to verify incoming requests that they are from Telegram:
Using a secret token
~~~~~~~~~~~~~~~~~~~~
When you set webhook, you can specify a secret token and then use it to verify incoming requests.
Using IP filtering
~~~~~~~~~~~~~~~~~~
You can specify a list of IP addresses from which you expect incoming requests, and then use it to verify incoming requests.
It can be acy using firewall rules or nginx configuration or middleware on application level.
So, aiogram has an implementation of the IP filtering middleware for aiohttp.
.. autofunction:: aiogram.webhook.aiohttp_server.ip_filter_middleware
.. autoclass:: aiogram.webhook.security.IPFilter
:members: __init__, allow, allow_ip, default, check
Examples
--------
Behind reverse proxy
~~~~~~~~~~~~~~~~~~~~
In this example we'll use aiohttp as web framework and nginx as reverse proxy.
.. literalinclude:: ../../examples/echo_bot_webhook.py
When you use nginx as reverse proxy, you should set `proxy_pass` to your aiohttp server address.
.. code-block:: nginx
location /webhook {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://127.0.0.1:8080;
}
Without reverse proxy (not recommended)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In case you want can't use reverse proxy, you can use aiohttp's ssl context.
Also this example contains usage with self-signed certificate.
.. literalinclude:: ../../examples/echo_bot_webhook_ssl.py
With using other web framework
==============================
You can pass incoming request to aiogram's webhook controller from any web framework you want.
Read more about it in :meth:`aiogram.dispatcher.dispatcher.Dispatcher.feed_webhook_update`
or :meth:`aiogram.dispatcher.dispatcher.Dispatcher.feed_update` methods.
.. code-block:: python
update = Update.model_validate(await request.json(), context={"bot": bot})
await dispatcher.feed_update(update)
.. note::
If you want to use reply into webhook, you should check that result of the :code:`feed_update`
methods is an instance of API method and build :code:`multipart/form-data`
or :code:`application/json` response body manually.

View file

@ -0,0 +1,30 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/enums/currency.rst:3
msgid "Currency"
msgstr ""
#: aiogram.enums.currency.Currency:1 of
msgid "Currencies supported by Telegram Bot API"
msgstr ""
#: aiogram.enums.currency.Currency:3 of
msgid "Source: https://core.telegram.org/bots/payments#supported-currencies"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/methods/answer_pre_checkout_query.rst:3
msgid "answerPreCheckoutQuery"
@ -65,36 +65,44 @@ msgid ""
" user."
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:14
#: ../../api/methods/answer_pre_checkout_query.rst:15
msgid "Usage"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:17
#: ../../api/methods/answer_pre_checkout_query.rst:18
msgid "As bot method"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:25
#: ../../api/methods/answer_pre_checkout_query.rst:26
msgid "Method as object"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:27
#: ../../api/methods/answer_pre_checkout_query.rst:28
msgid "Imports:"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:29
#: ../../api/methods/answer_pre_checkout_query.rst:30
msgid ""
":code:`from aiogram.methods.answer_pre_checkout_query import "
"AnswerPreCheckoutQuery`"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:30
#: ../../api/methods/answer_pre_checkout_query.rst:31
msgid "alias: :code:`from aiogram.methods import AnswerPreCheckoutQuery`"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:33
#: ../../api/methods/answer_pre_checkout_query.rst:34
msgid "With specific bot"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:40
#: ../../api/methods/answer_pre_checkout_query.rst:41
msgid "As reply into Webhook in handler"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:49
msgid "As shortcut from received object"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:51
msgid ":meth:`aiogram.types.pre_checkout_query.PreCheckoutQuery.answer`"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/methods/answer_shipping_query.rst:3
msgid "answerShippingQuery"
@ -69,36 +69,44 @@ msgid ""
"this message to the user."
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:14
#: ../../api/methods/answer_shipping_query.rst:15
msgid "Usage"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:17
#: ../../api/methods/answer_shipping_query.rst:18
msgid "As bot method"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:25
#: ../../api/methods/answer_shipping_query.rst:26
msgid "Method as object"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:27
#: ../../api/methods/answer_shipping_query.rst:28
msgid "Imports:"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:29
#: ../../api/methods/answer_shipping_query.rst:30
msgid ""
":code:`from aiogram.methods.answer_shipping_query import "
"AnswerShippingQuery`"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:30
#: ../../api/methods/answer_shipping_query.rst:31
msgid "alias: :code:`from aiogram.methods import AnswerShippingQuery`"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:33
#: ../../api/methods/answer_shipping_query.rst:34
msgid "With specific bot"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:40
#: ../../api/methods/answer_shipping_query.rst:41
msgid "As reply into Webhook in handler"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:49
msgid "As shortcut from received object"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:51
msgid ":meth:`aiogram.types.shipping_query.ShippingQuery.answer`"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-11-23 00:47+0200\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/methods/edit_message_reply_markup.rst:3
msgid "editMessageReplyMarkup"
@ -70,48 +70,52 @@ msgid ""
"<https://core.telegram.org/bots/features#inline-keyboards>`_."
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:14
#: ../../api/methods/edit_message_reply_markup.rst:15
msgid "Usage"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:17
#: ../../api/methods/edit_message_reply_markup.rst:18
msgid "As bot method"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:25
#: ../../api/methods/edit_message_reply_markup.rst:26
msgid "Method as object"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:27
#: ../../api/methods/edit_message_reply_markup.rst:28
msgid "Imports:"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:29
#: ../../api/methods/edit_message_reply_markup.rst:30
msgid ""
":code:`from aiogram.methods.edit_message_reply_markup import "
"EditMessageReplyMarkup`"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:30
#: ../../api/methods/edit_message_reply_markup.rst:31
msgid "alias: :code:`from aiogram.methods import EditMessageReplyMarkup`"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:33
#: ../../api/methods/edit_message_reply_markup.rst:34
msgid "With specific bot"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:40
#: ../../api/methods/edit_message_reply_markup.rst:41
msgid "As reply into Webhook in handler"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:48
#: ../../api/methods/edit_message_reply_markup.rst:49
msgid "As shortcut from received object"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:50
#: ../../api/methods/edit_message_reply_markup.rst:51
msgid ":meth:`aiogram.types.message.Message.edit_reply_markup`"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:52
msgid ":meth:`aiogram.types.message.Message.delete_reply_markup`"
msgstr ""
#~ msgid ""
#~ "A JSON-serialized object for an "
#~ "`inline keyboard <https://core.telegram.org/bots"

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-03-11 01:52+0200\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/types/message.rst:3
msgid "Message"
@ -437,6 +437,7 @@ msgstr ""
#: aiogram.types.message.Message.answer_video_note:4
#: aiogram.types.message.Message.answer_voice:4
#: aiogram.types.message.Message.delete:4
#: aiogram.types.message.Message.delete_reply_markup:4
#: aiogram.types.message.Message.edit_caption:4
#: aiogram.types.message.Message.edit_live_location:4
#: aiogram.types.message.Message.edit_media:4
@ -554,6 +555,7 @@ msgstr ""
#: aiogram.types.message.Message.answer_video_note
#: aiogram.types.message.Message.answer_voice
#: aiogram.types.message.Message.copy_to
#: aiogram.types.message.Message.delete_reply_markup
#: aiogram.types.message.Message.edit_caption
#: aiogram.types.message.Message.edit_live_location
#: aiogram.types.message.Message.edit_media
@ -836,6 +838,7 @@ msgstr ""
#: aiogram.types.message.Message.answer_video_note
#: aiogram.types.message.Message.answer_voice
#: aiogram.types.message.Message.copy_to aiogram.types.message.Message.delete
#: aiogram.types.message.Message.delete_reply_markup
#: aiogram.types.message.Message.edit_caption
#: aiogram.types.message.Message.edit_live_location
#: aiogram.types.message.Message.edit_media
@ -1941,7 +1944,7 @@ msgid "instance of method :class:`aiogram.methods.send_voice.SendVoice`"
msgstr ""
#: aiogram.types.message.Message.send_copy:1 of
msgid "Send copy of message."
msgid "Send copy of a message."
msgstr ""
#: aiogram.types.message.Message.send_copy:3 of
@ -1952,8 +1955,8 @@ msgstr ""
#: aiogram.types.message.Message.send_copy:8 of
msgid ""
"This method don't use the API method named `copyMessage` and historically"
" implemented before the similar method is added to API"
"This method doesn't use the API method named `copyMessage` and "
"historically implemented before the similar method is added to API"
msgstr ""
#: aiogram.types.message.Message.copy_to:1 of
@ -1969,6 +1972,7 @@ msgstr ""
#: aiogram.types.message.Message.copy_to:5
#: aiogram.types.message.Message.delete:5
#: aiogram.types.message.Message.delete_reply_markup:5
#: aiogram.types.message.Message.edit_caption:5
#: aiogram.types.message.Message.edit_live_location:5
#: aiogram.types.message.Message.edit_media:5
@ -2057,6 +2061,7 @@ msgstr ""
msgid "New text of the message, 1-4096 characters after entities parsing"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:12
#: aiogram.types.message.Message.edit_caption:11
#: aiogram.types.message.Message.edit_live_location:13
#: aiogram.types.message.Message.edit_media:12
@ -2149,6 +2154,7 @@ msgid ""
":class:`aiogram.methods.edit_message_media.EditMessageMedia`"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:1
#: aiogram.types.message.Message.edit_reply_markup:1 of
msgid ""
"Shortcut for method "
@ -2156,6 +2162,7 @@ msgid ""
" will automatically fill method attributes:"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:8
#: aiogram.types.message.Message.edit_reply_markup:7 of
msgid ""
"Use this method to edit only the reply markup of messages. On success, if"
@ -2164,16 +2171,22 @@ msgid ""
":code:`True` is returned."
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:10
#: aiogram.types.message.Message.edit_reply_markup:9 of
msgid "Source: https://core.telegram.org/bots/api#editmessagereplymarkup"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:13
#: aiogram.types.message.Message.edit_reply_markup:13 of
msgid ""
"instance of method "
":class:`aiogram.methods.edit_message_reply_markup.EditMessageReplyMarkup`"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:6 of
msgid ":code:`reply_markup`"
msgstr ""
#: aiogram.types.message.Message.edit_live_location:1 of
msgid ""
"Shortcut for method "
@ -2562,3 +2575,13 @@ msgstr ""
#~ "/form-data. :ref:`More information on "
#~ "Sending Files » <sending-files>`"
#~ msgstr ""
#~ msgid "Send copy of message."
#~ msgstr ""
#~ msgid ""
#~ "This method don't use the API "
#~ "method named `copyMessage` and historically"
#~ " implemented before the similar method "
#~ "is added to API"
#~ msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/types/pre_checkout_query.rst:3
msgid "PreCheckoutQuery"
@ -71,10 +71,58 @@ msgstr ""
msgid "*Optional*. Order information provided by the user"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:1 of
msgid ""
"Shortcut for method "
":class:`aiogram.methods.answer_pre_checkout_query.AnswerPreCheckoutQuery`"
" will automatically fill method attributes:"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:4 of
msgid ":code:`pre_checkout_query_id`"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:6 of
msgid ""
"Once the user has confirmed their payment and shipping details, the Bot "
"API sends the final confirmation in the form of an "
":class:`aiogram.types.update.Update` with the field *pre_checkout_query*."
" Use this method to respond to such pre-checkout queries. On success, "
":code:`True` is returned. **Note:** The Bot API must receive an answer "
"within 10 seconds after the pre-checkout query was sent."
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:8 of
msgid "Source: https://core.telegram.org/bots/api#answerprecheckoutquery"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer of
msgid "Parameters"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:10 of
msgid ""
"Specify :code:`True` if everything is alright (goods are available, etc.)"
" and the bot is ready to proceed with the order. Use :code:`False` if "
"there are any problems."
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:11 of
msgid ""
"Required if *ok* is :code:`False`. Error message in human readable form "
"that explains the reason for failure to proceed with the checkout (e.g. "
"\"Sorry, somebody just bought the last of our amazing black T-shirts "
"while you were busy filling out your payment details. Please choose a "
"different color or garment!\"). Telegram will display this message to the"
" user."
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer of
msgid "Returns"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:12 of
msgid ""
"instance of method "
":class:`aiogram.methods.answer_pre_checkout_query.AnswerPreCheckoutQuery`"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/types/shipping_query.rst:3
msgid "ShippingQuery"
@ -47,10 +47,61 @@ msgstr ""
msgid "User specified shipping address"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:1 of
msgid ""
"Shortcut for method "
":class:`aiogram.methods.answer_shipping_query.AnswerShippingQuery` will "
"automatically fill method attributes:"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:4 of
msgid ":code:`shipping_query_id`"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:6 of
msgid ""
"If you sent an invoice requesting a shipping address and the parameter "
"*is_flexible* was specified, the Bot API will send an "
":class:`aiogram.types.update.Update` with a *shipping_query* field to the"
" bot. Use this method to reply to shipping queries. On success, "
":code:`True` is returned."
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:8 of
msgid "Source: https://core.telegram.org/bots/api#answershippingquery"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer of
msgid "Parameters"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:10 of
msgid ""
"Pass :code:`True` if delivery to the specified address is possible and "
":code:`False` if there are any problems (for example, if delivery to the "
"specified address is not possible)"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:11 of
msgid ""
"Required if *ok* is :code:`True`. A JSON-serialized array of available "
"shipping options."
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:12 of
msgid ""
"Required if *ok* is :code:`False`. Error message in human readable form "
"that explains why it is impossible to complete the order (e.g. \"Sorry, "
"delivery to your desired address is unavailable'). Telegram will display "
"this message to the user."
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer of
msgid "Returns"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:13 of
msgid ""
"instance of method "
":class:`aiogram.methods.answer_shipping_query.AnswerShippingQuery`"
msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,22 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../deployment/index.rst:3
msgid "Deployment"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../dispatcher/index.rst:3
msgid "Handling events"
@ -54,3 +54,23 @@ msgid ""
"Dispatcher is also separated into two entities - Router and Dispatcher. "
"Dispatcher is subclass of router and should be always is root router."
msgstr ""
#: ../../dispatcher/index.rst:18
msgid "Telegram supports two ways of receiving updates:"
msgstr ""
#: ../../dispatcher/index.rst:20
msgid ""
":ref:`Webhook <webhook>` - you should configure your web server to "
"receive updates from Telegram;"
msgstr ""
#: ../../dispatcher/index.rst:21
msgid ""
":ref:`Long polling <long-polling>` - you should request updates from "
"Telegram."
msgstr ""
#: ../../dispatcher/index.rst:23
msgid "So, you can use both of them with *aiogram*."
msgstr ""

View file

@ -0,0 +1,62 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../dispatcher/long_polling.rst:5
msgid "Long-polling"
msgstr ""
#: ../../dispatcher/long_polling.rst:7
msgid ""
"Long-polling is a technology that allows a Telegram server to send "
"updates in case when you don't have dedicated IP address or port to "
"receive webhooks for example on a developer machine."
msgstr ""
#: ../../dispatcher/long_polling.rst:11
msgid ""
"To use long-polling mode you should use "
":meth:`aiogram.dispatcher.dispatcher.Dispatcher.start_polling` or "
":meth:`aiogram.dispatcher.dispatcher.Dispatcher.run_polling` methods."
msgstr ""
#: ../../dispatcher/long_polling.rst:16
msgid ""
"You can use polling from only one polling process per single Bot token, "
"in other case Telegram server will return an error."
msgstr ""
#: ../../dispatcher/long_polling.rst:21
msgid ""
"If you will need to scale your bot, you should use webhooks instead of "
"long-polling."
msgstr ""
#: ../../dispatcher/long_polling.rst:25
msgid "If you will use multibot mode, you should use webhook mode for all bots."
msgstr ""
#: ../../dispatcher/long_polling.rst:28
msgid "Example"
msgstr ""
#: ../../dispatcher/long_polling.rst:30
msgid ""
"This example will show you how to create simple echo bot based on long-"
"polling."
msgstr ""

View file

@ -0,0 +1,303 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../dispatcher/webhook.rst:5
msgid "Webhook"
msgstr ""
#: ../../dispatcher/webhook.rst:7
msgid ""
"Telegram Bot API supports webhook. If you set webhook for your bot, "
"Telegram will send updates to the specified url. You can use "
":meth:`aiogram.methods.set_webhook.SetWebhook` method to specify a url "
"and receive incoming updates on it."
msgstr ""
#: ../../dispatcher/webhook.rst:14
msgid "If you use webhook, you can't use long polling at the same time."
msgstr ""
#: ../../dispatcher/webhook.rst:16
msgid ""
"Before start i'll recommend you to read `official Telegram's "
"documentation about webhook <https://core.telegram.org/bots/webhooks>`_"
msgstr ""
#: ../../dispatcher/webhook.rst:18
msgid "After you read it, you can start to read this section."
msgstr ""
#: ../../dispatcher/webhook.rst:20
msgid ""
"Generally to use webhook with aiogram you should use any async web "
"framework. Buy out of the box aiogram has an aiohttp integration, so "
"we'll use it."
msgstr ""
#: ../../dispatcher/webhook.rst:25
msgid ""
"You can use any async web framework you want, but you should write your "
"own integration if you don't use aiohttp."
msgstr ""
#: ../../dispatcher/webhook.rst:29
msgid "aiohttp integration"
msgstr ""
#: ../../dispatcher/webhook.rst:31
msgid "Out of the box aiogram has aiohttp integration, so you can use it."
msgstr ""
#: ../../dispatcher/webhook.rst:33
msgid ""
"Here is available few ways to do it using different implementations of "
"the webhook controller:"
msgstr ""
#: ../../dispatcher/webhook.rst:35
msgid ""
":class:`aiogram.webhook.aiohttp_server.BaseRequestHandler` - Abstract "
"class for aiohttp webhook controller"
msgstr ""
#: ../../dispatcher/webhook.rst:36
msgid ""
":class:`aiogram.webhook.aiohttp_server.SimpleRequestHandler` - Simple "
"webhook controller, uses single Bot instance"
msgstr ""
#: ../../dispatcher/webhook.rst:37
msgid ""
":class:`aiogram.webhook.aiohttp_server.TokenBasedRequestHandler` - Token"
" based webhook controller, uses multiple Bot instances and tokens"
msgstr ""
#: ../../dispatcher/webhook.rst:39
msgid "You can use it as is or inherit from it and override some methods."
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.__init__:1 of
msgid ""
"Base handler that helps to handle incoming request from aiohttp and "
"propagate it to the Dispatcher"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.__init__
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.register
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.register
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.ip_filter_middleware of
msgid "Parameters"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.__init__:4
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__:3
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:9 of
msgid "instance of :class:`aiogram.dispatcher.dispatcher.Dispatcher`"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.__init__:5 of
msgid ""
"immediately responds to the Telegram instead of a waiting end of a "
"handler process"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.register:1 of
msgid "Register route and shutdown callback"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.register:3
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.register:3 of
msgid "instance of aiohttp Application"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.register:4
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.register:4 of
msgid "route path"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot:1
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot:1 of
msgid "This method should be implemented in subclasses of this class."
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot:3
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot:3 of
msgid "Resolve Bot instance from request."
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.ip_filter_middleware of
msgid "Returns"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot:6
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot:6 of
msgid "Bot instance"
msgstr ""
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__:1 of
msgid "Handler for single Bot instance"
msgstr ""
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__:4
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:10 of
msgid ""
"immediately responds to the Telegram instead of a waiting end of handler "
"process"
msgstr ""
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__:6 of
msgid "instance of :class:`aiogram.client.bot.Bot`"
msgstr ""
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.close:1 of
msgid "Close bot session"
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:1 of
msgid ""
"Handler that supports multiple bots the context will be resolved from "
"path variable 'bot_token'"
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:6 of
msgid ""
"This handler is not recommended in due to token is available in URL and "
"can be logged by reverse proxy server or other middleware."
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:12 of
msgid "kwargs that will be passed to new Bot instance"
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.register:1 of
msgid "Validate path, register route and shutdown callback"
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.resolve_bot:1 of
msgid "Get bot token from a path and create or get from cache Bot instance"
msgstr ""
#: ../../dispatcher/webhook.rst:51
msgid "Security"
msgstr ""
#: ../../dispatcher/webhook.rst:53
msgid ""
"Telegram supports two methods to verify incoming requests that they are "
"from Telegram:"
msgstr ""
#: ../../dispatcher/webhook.rst:56
msgid "Using a secret token"
msgstr ""
#: ../../dispatcher/webhook.rst:58
msgid ""
"When you set webhook, you can specify a secret token and then use it to "
"verify incoming requests."
msgstr ""
#: ../../dispatcher/webhook.rst:61
msgid "Using IP filtering"
msgstr ""
#: ../../dispatcher/webhook.rst:63
msgid ""
"You can specify a list of IP addresses from which you expect incoming "
"requests, and then use it to verify incoming requests."
msgstr ""
#: ../../dispatcher/webhook.rst:65
msgid ""
"It can be acy using firewall rules or nginx configuration or middleware "
"on application level."
msgstr ""
#: ../../dispatcher/webhook.rst:67
msgid ""
"So, aiogram has an implementation of the IP filtering middleware for "
"aiohttp."
msgstr ""
#: ../../dispatcher/webhook.rst:75
msgid "Examples"
msgstr ""
#: ../../dispatcher/webhook.rst:78
msgid "Behind reverse proxy"
msgstr ""
#: ../../dispatcher/webhook.rst:80
msgid ""
"In this example we'll use aiohttp as web framework and nginx as reverse "
"proxy."
msgstr ""
#: ../../dispatcher/webhook.rst:84
msgid ""
"When you use nginx as reverse proxy, you should set `proxy_pass` to your "
"aiohttp server address."
msgstr ""
#: ../../dispatcher/webhook.rst:98
msgid "Without reverse proxy (not recommended)"
msgstr ""
#: ../../dispatcher/webhook.rst:100
msgid ""
"In case you want can't use reverse proxy, you can use aiohttp's ssl "
"context."
msgstr ""
#: ../../dispatcher/webhook.rst:102
msgid "Also this example contains usage with self-signed certificate."
msgstr ""
#: ../../dispatcher/webhook.rst:108
msgid "With using other web framework"
msgstr ""
#: ../../dispatcher/webhook.rst:110
msgid ""
"You can pass incoming request to aiogram's webhook controller from any "
"web framework you want."
msgstr ""
#: ../../dispatcher/webhook.rst:112
msgid ""
"Read more about it in "
":meth:`aiogram.dispatcher.dispatcher.Dispatcher.feed_webhook_update` or "
":meth:`aiogram.dispatcher.dispatcher.Dispatcher.feed_update` methods."
msgstr ""
#: ../../dispatcher/webhook.rst:123
msgid ""
"If you want to use reply into webhook, you should check that result of "
"the :code:`feed_update` methods is an instance of API method and build "
":code:`multipart/form-data` or :code:`application/json` response body "
"manually."
msgstr ""

View file

@ -8,58 +8,104 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-07 23:24+0200\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../utils/keyboard.rst:3
#: ../../utils/keyboard.rst:4
msgid "Keyboard builder"
msgstr ""
#: ../../utils/keyboard.rst:5
#: ../../utils/keyboard.rst:6
msgid "Keyboard builder helps to dynamically generate markup."
msgstr ""
#: ../../utils/keyboard.rst:9
#: ../../utils/keyboard.rst:10
msgid ""
"Note that if you have static markup, it's best to define it explicitly "
"rather than using builder, but if you have dynamic markup configuration, "
"feel free to use builder as you wish."
msgstr ""
#: ../../utils/keyboard.rst:14
#: ../../utils/keyboard.rst:15
msgid "Usage example"
msgstr ""
#: ../../utils/keyboard.rst:29
msgid "Base builder"
#: ../../utils/keyboard.rst:17
msgid "For example you want to generate inline keyboard with 10 buttons"
msgstr ""
#: aiogram.utils.keyboard.ReplyKeyboardBuilder:1 of
msgid "Reply keyboard builder inherits all methods from generic builder"
#: ../../utils/keyboard.rst:27
msgid ""
"then adjust this buttons to some grid, for example first line will have 3"
" buttons, the next lines will have 2 buttons"
msgstr ""
#: ../../utils/keyboard.rst:33
msgid "also you can attach another builder to this one"
msgstr ""
#: ../../utils/keyboard.rst:40
msgid "or you can attach some already generated markup"
msgstr ""
#: ../../utils/keyboard.rst:47
msgid "and finally you can export this markup to use it in your message"
msgstr ""
#: ../../utils/keyboard.rst:53
msgid "Reply keyboard builder has the same interface"
msgstr ""
#: ../../utils/keyboard.rst:57
msgid ""
"Note that you can't attach reply keyboard builder to inline keyboard "
"builder and vice versa"
msgstr ""
#: ../../utils/keyboard.rst:61
msgid "Inline Keyboard"
msgstr ""
#: aiogram.utils.keyboard.InlineKeyboardBuilder:1 of
msgid "Inline keyboard builder inherits all methods from generic builder"
msgstr ""
#: ../../utils/keyboard.rst:69
msgid "Add new inline button to markup"
msgstr ""
#: ../../utils/keyboard.rst:74
msgid "Construct an InlineKeyboardMarkup"
msgstr ""
#: aiogram.utils.keyboard.KeyboardBuilder.add:1 of
msgid "Add one or many buttons to markup."
msgstr ""
#: aiogram.utils.keyboard.InlineKeyboardBuilder.from_markup
#: aiogram.utils.keyboard.KeyboardBuilder.add
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
#: aiogram.utils.keyboard.KeyboardBuilder.row of
#: aiogram.utils.keyboard.KeyboardBuilder.row
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.from_markup of
msgid "Parameters"
msgstr ""
#: aiogram.utils.keyboard.InlineKeyboardBuilder.buttons
#: aiogram.utils.keyboard.InlineKeyboardBuilder.copy
#: aiogram.utils.keyboard.InlineKeyboardBuilder.from_markup
#: aiogram.utils.keyboard.KeyboardBuilder.add
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
#: aiogram.utils.keyboard.KeyboardBuilder.export
#: aiogram.utils.keyboard.KeyboardBuilder.row
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy of
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.from_markup of
msgid "Returns"
msgstr ""
@ -75,10 +121,12 @@ msgid ""
"all sizes"
msgstr ""
#: aiogram.utils.keyboard.InlineKeyboardBuilder.buttons:1
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons:1 of
msgid "Get flatten set of all buttons"
msgstr ""
#: aiogram.utils.keyboard.InlineKeyboardBuilder.copy:1
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy:1 of
msgid "Make full copy of current builder with markup"
msgstr ""
@ -87,6 +135,11 @@ msgstr ""
msgid "Export configured markup as list of lists of buttons"
msgstr ""
#: aiogram.utils.keyboard.InlineKeyboardBuilder.from_markup:1
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.from_markup:1 of
msgid "Create builder from existing markup"
msgstr ""
#: aiogram.utils.keyboard.KeyboardBuilder.row:1 of
msgid "Add row to markup"
msgstr ""
@ -95,31 +148,19 @@ msgstr ""
msgid "When too much buttons is passed it will be separated to many rows"
msgstr ""
#: ../../utils/keyboard.rst:35
msgid "Inline Keyboard"
msgstr ""
#: aiogram.utils.keyboard.InlineKeyboardBuilder:1 of
msgid "Inline keyboard builder inherits all methods from generic builder"
msgstr ""
#: ../../utils/keyboard.rst:43
msgid "Add new inline button to markup"
msgstr ""
#: ../../utils/keyboard.rst:48
msgid "Construct an InlineKeyboardMarkup"
msgstr ""
#: ../../utils/keyboard.rst:51
#: ../../utils/keyboard.rst:77
msgid "Reply Keyboard"
msgstr ""
#: ../../utils/keyboard.rst:59
#: aiogram.utils.keyboard.ReplyKeyboardBuilder:1 of
msgid "Reply keyboard builder inherits all methods from generic builder"
msgstr ""
#: ../../utils/keyboard.rst:85
msgid "Add new button to markup"
msgstr ""
#: ../../utils/keyboard.rst:64
#: ../../utils/keyboard.rst:90
msgid "Construct an ReplyKeyboardMarkup"
msgstr ""
@ -132,3 +173,6 @@ msgstr ""
#~ "will be cycled when available more "
#~ "buttons count than all sizes"
#~ msgstr ""
#~ msgid "Base builder"
#~ msgstr ""

View file

@ -0,0 +1,30 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/enums/currency.rst:3
msgid "Currency"
msgstr ""
#: aiogram.enums.currency.Currency:1 of
msgid "Currencies supported by Telegram Bot API"
msgstr ""
#: aiogram.enums.currency.Currency:3 of
msgid "Source: https://core.telegram.org/bots/payments#supported-currencies"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/methods/answer_pre_checkout_query.rst:3
msgid "answerPreCheckoutQuery"
@ -65,36 +65,44 @@ msgid ""
" user."
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:14
#: ../../api/methods/answer_pre_checkout_query.rst:15
msgid "Usage"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:17
#: ../../api/methods/answer_pre_checkout_query.rst:18
msgid "As bot method"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:25
#: ../../api/methods/answer_pre_checkout_query.rst:26
msgid "Method as object"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:27
#: ../../api/methods/answer_pre_checkout_query.rst:28
msgid "Imports:"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:29
#: ../../api/methods/answer_pre_checkout_query.rst:30
msgid ""
":code:`from aiogram.methods.answer_pre_checkout_query import "
"AnswerPreCheckoutQuery`"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:30
#: ../../api/methods/answer_pre_checkout_query.rst:31
msgid "alias: :code:`from aiogram.methods import AnswerPreCheckoutQuery`"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:33
#: ../../api/methods/answer_pre_checkout_query.rst:34
msgid "With specific bot"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:40
#: ../../api/methods/answer_pre_checkout_query.rst:41
msgid "As reply into Webhook in handler"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:49
msgid "As shortcut from received object"
msgstr ""
#: ../../api/methods/answer_pre_checkout_query.rst:51
msgid ":meth:`aiogram.types.pre_checkout_query.PreCheckoutQuery.answer`"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/methods/answer_shipping_query.rst:3
msgid "answerShippingQuery"
@ -69,36 +69,44 @@ msgid ""
"this message to the user."
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:14
#: ../../api/methods/answer_shipping_query.rst:15
msgid "Usage"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:17
#: ../../api/methods/answer_shipping_query.rst:18
msgid "As bot method"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:25
#: ../../api/methods/answer_shipping_query.rst:26
msgid "Method as object"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:27
#: ../../api/methods/answer_shipping_query.rst:28
msgid "Imports:"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:29
#: ../../api/methods/answer_shipping_query.rst:30
msgid ""
":code:`from aiogram.methods.answer_shipping_query import "
"AnswerShippingQuery`"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:30
#: ../../api/methods/answer_shipping_query.rst:31
msgid "alias: :code:`from aiogram.methods import AnswerShippingQuery`"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:33
#: ../../api/methods/answer_shipping_query.rst:34
msgid "With specific bot"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:40
#: ../../api/methods/answer_shipping_query.rst:41
msgid "As reply into Webhook in handler"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:49
msgid "As shortcut from received object"
msgstr ""
#: ../../api/methods/answer_shipping_query.rst:51
msgid ":meth:`aiogram.types.shipping_query.ShippingQuery.answer`"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-11-23 00:47+0200\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/methods/edit_message_reply_markup.rst:3
msgid "editMessageReplyMarkup"
@ -70,48 +70,52 @@ msgid ""
"<https://core.telegram.org/bots/features#inline-keyboards>`_."
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:14
#: ../../api/methods/edit_message_reply_markup.rst:15
msgid "Usage"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:17
#: ../../api/methods/edit_message_reply_markup.rst:18
msgid "As bot method"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:25
#: ../../api/methods/edit_message_reply_markup.rst:26
msgid "Method as object"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:27
#: ../../api/methods/edit_message_reply_markup.rst:28
msgid "Imports:"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:29
#: ../../api/methods/edit_message_reply_markup.rst:30
msgid ""
":code:`from aiogram.methods.edit_message_reply_markup import "
"EditMessageReplyMarkup`"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:30
#: ../../api/methods/edit_message_reply_markup.rst:31
msgid "alias: :code:`from aiogram.methods import EditMessageReplyMarkup`"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:33
#: ../../api/methods/edit_message_reply_markup.rst:34
msgid "With specific bot"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:40
#: ../../api/methods/edit_message_reply_markup.rst:41
msgid "As reply into Webhook in handler"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:48
#: ../../api/methods/edit_message_reply_markup.rst:49
msgid "As shortcut from received object"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:50
#: ../../api/methods/edit_message_reply_markup.rst:51
msgid ":meth:`aiogram.types.message.Message.edit_reply_markup`"
msgstr ""
#: ../../api/methods/edit_message_reply_markup.rst:52
msgid ":meth:`aiogram.types.message.Message.delete_reply_markup`"
msgstr ""
#~ msgid ""
#~ "A JSON-serialized object for an "
#~ "`inline keyboard <https://core.telegram.org/bots"

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-03-11 01:52+0200\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.11.0\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/types/message.rst:3
msgid "Message"
@ -437,6 +437,7 @@ msgstr ""
#: aiogram.types.message.Message.answer_video_note:4
#: aiogram.types.message.Message.answer_voice:4
#: aiogram.types.message.Message.delete:4
#: aiogram.types.message.Message.delete_reply_markup:4
#: aiogram.types.message.Message.edit_caption:4
#: aiogram.types.message.Message.edit_live_location:4
#: aiogram.types.message.Message.edit_media:4
@ -554,6 +555,7 @@ msgstr ""
#: aiogram.types.message.Message.answer_video_note
#: aiogram.types.message.Message.answer_voice
#: aiogram.types.message.Message.copy_to
#: aiogram.types.message.Message.delete_reply_markup
#: aiogram.types.message.Message.edit_caption
#: aiogram.types.message.Message.edit_live_location
#: aiogram.types.message.Message.edit_media
@ -836,6 +838,7 @@ msgstr ""
#: aiogram.types.message.Message.answer_video_note
#: aiogram.types.message.Message.answer_voice
#: aiogram.types.message.Message.copy_to aiogram.types.message.Message.delete
#: aiogram.types.message.Message.delete_reply_markup
#: aiogram.types.message.Message.edit_caption
#: aiogram.types.message.Message.edit_live_location
#: aiogram.types.message.Message.edit_media
@ -1941,7 +1944,7 @@ msgid "instance of method :class:`aiogram.methods.send_voice.SendVoice`"
msgstr ""
#: aiogram.types.message.Message.send_copy:1 of
msgid "Send copy of message."
msgid "Send copy of a message."
msgstr ""
#: aiogram.types.message.Message.send_copy:3 of
@ -1952,8 +1955,8 @@ msgstr ""
#: aiogram.types.message.Message.send_copy:8 of
msgid ""
"This method don't use the API method named `copyMessage` and historically"
" implemented before the similar method is added to API"
"This method doesn't use the API method named `copyMessage` and "
"historically implemented before the similar method is added to API"
msgstr ""
#: aiogram.types.message.Message.copy_to:1 of
@ -1969,6 +1972,7 @@ msgstr ""
#: aiogram.types.message.Message.copy_to:5
#: aiogram.types.message.Message.delete:5
#: aiogram.types.message.Message.delete_reply_markup:5
#: aiogram.types.message.Message.edit_caption:5
#: aiogram.types.message.Message.edit_live_location:5
#: aiogram.types.message.Message.edit_media:5
@ -2057,6 +2061,7 @@ msgstr ""
msgid "New text of the message, 1-4096 characters after entities parsing"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:12
#: aiogram.types.message.Message.edit_caption:11
#: aiogram.types.message.Message.edit_live_location:13
#: aiogram.types.message.Message.edit_media:12
@ -2149,6 +2154,7 @@ msgid ""
":class:`aiogram.methods.edit_message_media.EditMessageMedia`"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:1
#: aiogram.types.message.Message.edit_reply_markup:1 of
msgid ""
"Shortcut for method "
@ -2156,6 +2162,7 @@ msgid ""
" will automatically fill method attributes:"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:8
#: aiogram.types.message.Message.edit_reply_markup:7 of
msgid ""
"Use this method to edit only the reply markup of messages. On success, if"
@ -2164,16 +2171,22 @@ msgid ""
":code:`True` is returned."
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:10
#: aiogram.types.message.Message.edit_reply_markup:9 of
msgid "Source: https://core.telegram.org/bots/api#editmessagereplymarkup"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:13
#: aiogram.types.message.Message.edit_reply_markup:13 of
msgid ""
"instance of method "
":class:`aiogram.methods.edit_message_reply_markup.EditMessageReplyMarkup`"
msgstr ""
#: aiogram.types.message.Message.delete_reply_markup:6 of
msgid ":code:`reply_markup`"
msgstr ""
#: aiogram.types.message.Message.edit_live_location:1 of
msgid ""
"Shortcut for method "
@ -2562,3 +2575,13 @@ msgstr ""
#~ "/form-data. :ref:`More information on "
#~ "Sending Files » <sending-files>`"
#~ msgstr ""
#~ msgid "Send copy of message."
#~ msgstr ""
#~ msgid ""
#~ "This method don't use the API "
#~ "method named `copyMessage` and historically"
#~ " implemented before the similar method "
#~ "is added to API"
#~ msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/types/pre_checkout_query.rst:3
msgid "PreCheckoutQuery"
@ -71,10 +71,58 @@ msgstr ""
msgid "*Optional*. Order information provided by the user"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:1 of
msgid ""
"Shortcut for method "
":class:`aiogram.methods.answer_pre_checkout_query.AnswerPreCheckoutQuery`"
" will automatically fill method attributes:"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:4 of
msgid ":code:`pre_checkout_query_id`"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:6 of
msgid ""
"Once the user has confirmed their payment and shipping details, the Bot "
"API sends the final confirmation in the form of an "
":class:`aiogram.types.update.Update` with the field *pre_checkout_query*."
" Use this method to respond to such pre-checkout queries. On success, "
":code:`True` is returned. **Note:** The Bot API must receive an answer "
"within 10 seconds after the pre-checkout query was sent."
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:8 of
msgid "Source: https://core.telegram.org/bots/api#answerprecheckoutquery"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer of
msgid "Parameters"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:10 of
msgid ""
"Specify :code:`True` if everything is alright (goods are available, etc.)"
" and the bot is ready to proceed with the order. Use :code:`False` if "
"there are any problems."
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:11 of
msgid ""
"Required if *ok* is :code:`False`. Error message in human readable form "
"that explains the reason for failure to proceed with the checkout (e.g. "
"\"Sorry, somebody just bought the last of our amazing black T-shirts "
"while you were busy filling out your payment details. Please choose a "
"different color or garment!\"). Telegram will display this message to the"
" user."
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer of
msgid "Returns"
msgstr ""
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:12 of
msgid ""
"instance of method "
":class:`aiogram.methods.answer_pre_checkout_query.AnswerPreCheckoutQuery`"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../api/types/shipping_query.rst:3
msgid "ShippingQuery"
@ -47,10 +47,61 @@ msgstr ""
msgid "User specified shipping address"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:1 of
msgid ""
"Shortcut for method "
":class:`aiogram.methods.answer_shipping_query.AnswerShippingQuery` will "
"automatically fill method attributes:"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:4 of
msgid ":code:`shipping_query_id`"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:6 of
msgid ""
"If you sent an invoice requesting a shipping address and the parameter "
"*is_flexible* was specified, the Bot API will send an "
":class:`aiogram.types.update.Update` with a *shipping_query* field to the"
" bot. Use this method to reply to shipping queries. On success, "
":code:`True` is returned."
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:8 of
msgid "Source: https://core.telegram.org/bots/api#answershippingquery"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer of
msgid "Parameters"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:10 of
msgid ""
"Pass :code:`True` if delivery to the specified address is possible and "
":code:`False` if there are any problems (for example, if delivery to the "
"specified address is not possible)"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:11 of
msgid ""
"Required if *ok* is :code:`True`. A JSON-serialized array of available "
"shipping options."
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:12 of
msgid ""
"Required if *ok* is :code:`False`. Error message in human readable form "
"that explains why it is impossible to complete the order (e.g. \"Sorry, "
"delivery to your desired address is unavailable'). Telegram will display "
"this message to the user."
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer of
msgid "Returns"
msgstr ""
#: aiogram.types.shipping_query.ShippingQuery.answer:13 of
msgid ""
"instance of method "
":class:`aiogram.methods.answer_shipping_query.AnswerShippingQuery`"
msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,22 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../deployment/index.rst:3
msgid "Deployment"
msgstr ""

View file

@ -0,0 +1,130 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-07 23:01+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../dispatcher/filters/text.rst:3
msgid "Text"
msgstr ""
#: aiogram.filters.text.Text:1 of
msgid ""
"Is useful for filtering text :class:`aiogram.types.message.Message`, any "
":class:`aiogram.types.callback_query.CallbackQuery` with `data`, "
":class:`aiogram.types.inline_query.InlineQuery` or "
":class:`aiogram.types.poll.Poll` question."
msgstr ""
#: aiogram.filters.text.Text:7 of
msgid ""
"Only one of `text`, `contains`, `startswith` or `endswith` argument can "
"be used at once. Any of that arguments can be string, list, set or tuple "
"of strings."
msgstr ""
#: aiogram.filters.text.Text:12 of
msgid ""
"use :ref:`magic-filter <magic-filters>`. For example do :pycode:`F.text "
"== \"text\"` instead"
msgstr ""
#: ../../dispatcher/filters/text.rst:10
msgid "Can be imported:"
msgstr ""
#: ../../dispatcher/filters/text.rst:12
msgid ":code:`from aiogram.filters.text import Text`"
msgstr ""
#: ../../dispatcher/filters/text.rst:13
msgid ":code:`from aiogram.filters import Text`"
msgstr ""
#: ../../dispatcher/filters/text.rst:16
msgid "Usage"
msgstr ""
#: ../../dispatcher/filters/text.rst:18
msgid ""
"Text equals with the specified value: :code:`Text(text=\"text\") # value"
" == 'text'`"
msgstr ""
#: ../../dispatcher/filters/text.rst:19
msgid ""
"Text starts with the specified value: :code:`Text(startswith=\"text\") #"
" value.startswith('text')`"
msgstr ""
#: ../../dispatcher/filters/text.rst:20
msgid ""
"Text ends with the specified value: :code:`Text(endswith=\"text\") # "
"value.endswith('text')`"
msgstr ""
#: ../../dispatcher/filters/text.rst:21
msgid ""
"Text contains the specified value: :code:`Text(contains=\"text\") # "
"value in 'text'`"
msgstr ""
#: ../../dispatcher/filters/text.rst:22
msgid ""
"Any of previous listed filters can be list, set or tuple of strings "
"that's mean any of listed value should be "
"equals/startswith/endswith/contains: :code:`Text(text=[\"text\", "
"\"spam\"])`"
msgstr ""
#: ../../dispatcher/filters/text.rst:23
msgid ""
"Ignore case can be combined with any previous listed filter: "
":code:`Text(text=\"Text\", ignore_case=True) # value.lower() == "
"'text'.lower()`"
msgstr ""
#: ../../dispatcher/filters/text.rst:26
msgid "Allowed handlers"
msgstr ""
#: ../../dispatcher/filters/text.rst:28
msgid "Allowed update types for this filter:"
msgstr ""
#: ../../dispatcher/filters/text.rst:30
msgid ":code:`message`"
msgstr ""
#: ../../dispatcher/filters/text.rst:31
msgid ":code:`edited_message`"
msgstr ""
#: ../../dispatcher/filters/text.rst:32
msgid ":code:`channel_post`"
msgstr ""
#: ../../dispatcher/filters/text.rst:33
msgid ":code:`edited_channel_post`"
msgstr ""
#: ../../dispatcher/filters/text.rst:34
msgid ":code:`inline_query`"
msgstr ""
#: ../../dispatcher/filters/text.rst:35
msgid ":code:`callback_query`"
msgstr ""

View file

@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-10-01 22:51+0300\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../dispatcher/index.rst:3
msgid "Handling events"
@ -54,3 +54,23 @@ msgid ""
"Dispatcher is also separated into two entities - Router and Dispatcher. "
"Dispatcher is subclass of router and should be always is root router."
msgstr ""
#: ../../dispatcher/index.rst:18
msgid "Telegram supports two ways of receiving updates:"
msgstr ""
#: ../../dispatcher/index.rst:20
msgid ""
":ref:`Webhook <webhook>` - you should configure your web server to "
"receive updates from Telegram;"
msgstr ""
#: ../../dispatcher/index.rst:21
msgid ""
":ref:`Long polling <long-polling>` - you should request updates from "
"Telegram."
msgstr ""
#: ../../dispatcher/index.rst:23
msgid "So, you can use both of them with *aiogram*."
msgstr ""

View file

@ -0,0 +1,62 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../dispatcher/long_polling.rst:5
msgid "Long-polling"
msgstr ""
#: ../../dispatcher/long_polling.rst:7
msgid ""
"Long-polling is a technology that allows a Telegram server to send "
"updates in case when you don't have dedicated IP address or port to "
"receive webhooks for example on a developer machine."
msgstr ""
#: ../../dispatcher/long_polling.rst:11
msgid ""
"To use long-polling mode you should use "
":meth:`aiogram.dispatcher.dispatcher.Dispatcher.start_polling` or "
":meth:`aiogram.dispatcher.dispatcher.Dispatcher.run_polling` methods."
msgstr ""
#: ../../dispatcher/long_polling.rst:16
msgid ""
"You can use polling from only one polling process per single Bot token, "
"in other case Telegram server will return an error."
msgstr ""
#: ../../dispatcher/long_polling.rst:21
msgid ""
"If you will need to scale your bot, you should use webhooks instead of "
"long-polling."
msgstr ""
#: ../../dispatcher/long_polling.rst:25
msgid "If you will use multibot mode, you should use webhook mode for all bots."
msgstr ""
#: ../../dispatcher/long_polling.rst:28
msgid "Example"
msgstr ""
#: ../../dispatcher/long_polling.rst:30
msgid ""
"This example will show you how to create simple echo bot based on long-"
"polling."
msgstr ""

View file

@ -0,0 +1,303 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2023, aiogram Team
# This file is distributed under the same license as the aiogram package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2023.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: aiogram \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.12.1\n"
#: ../../dispatcher/webhook.rst:5
msgid "Webhook"
msgstr ""
#: ../../dispatcher/webhook.rst:7
msgid ""
"Telegram Bot API supports webhook. If you set webhook for your bot, "
"Telegram will send updates to the specified url. You can use "
":meth:`aiogram.methods.set_webhook.SetWebhook` method to specify a url "
"and receive incoming updates on it."
msgstr ""
#: ../../dispatcher/webhook.rst:14
msgid "If you use webhook, you can't use long polling at the same time."
msgstr ""
#: ../../dispatcher/webhook.rst:16
msgid ""
"Before start i'll recommend you to read `official Telegram's "
"documentation about webhook <https://core.telegram.org/bots/webhooks>`_"
msgstr ""
#: ../../dispatcher/webhook.rst:18
msgid "After you read it, you can start to read this section."
msgstr ""
#: ../../dispatcher/webhook.rst:20
msgid ""
"Generally to use webhook with aiogram you should use any async web "
"framework. Buy out of the box aiogram has an aiohttp integration, so "
"we'll use it."
msgstr ""
#: ../../dispatcher/webhook.rst:25
msgid ""
"You can use any async web framework you want, but you should write your "
"own integration if you don't use aiohttp."
msgstr ""
#: ../../dispatcher/webhook.rst:29
msgid "aiohttp integration"
msgstr ""
#: ../../dispatcher/webhook.rst:31
msgid "Out of the box aiogram has aiohttp integration, so you can use it."
msgstr ""
#: ../../dispatcher/webhook.rst:33
msgid ""
"Here is available few ways to do it using different implementations of "
"the webhook controller:"
msgstr ""
#: ../../dispatcher/webhook.rst:35
msgid ""
":class:`aiogram.webhook.aiohttp_server.BaseRequestHandler` - Abstract "
"class for aiohttp webhook controller"
msgstr ""
#: ../../dispatcher/webhook.rst:36
msgid ""
":class:`aiogram.webhook.aiohttp_server.SimpleRequestHandler` - Simple "
"webhook controller, uses single Bot instance"
msgstr ""
#: ../../dispatcher/webhook.rst:37
msgid ""
":class:`aiogram.webhook.aiohttp_server.TokenBasedRequestHandler` - Token"
" based webhook controller, uses multiple Bot instances and tokens"
msgstr ""
#: ../../dispatcher/webhook.rst:39
msgid "You can use it as is or inherit from it and override some methods."
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.__init__:1 of
msgid ""
"Base handler that helps to handle incoming request from aiohttp and "
"propagate it to the Dispatcher"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.__init__
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.register
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.register
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.ip_filter_middleware of
msgid "Parameters"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.__init__:4
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__:3
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:9 of
msgid "instance of :class:`aiogram.dispatcher.dispatcher.Dispatcher`"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.__init__:5 of
msgid ""
"immediately responds to the Telegram instead of a waiting end of a "
"handler process"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.register:1 of
msgid "Register route and shutdown callback"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.register:3
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.register:3 of
msgid "instance of aiohttp Application"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.register:4
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.register:4 of
msgid "route path"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot:1
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot:1 of
msgid "This method should be implemented in subclasses of this class."
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot:3
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot:3 of
msgid "Resolve Bot instance from request."
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.resolve_bot
#: aiogram.webhook.aiohttp_server.ip_filter_middleware of
msgid "Returns"
msgstr ""
#: aiogram.webhook.aiohttp_server.BaseRequestHandler.resolve_bot:6
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.resolve_bot:6 of
msgid "Bot instance"
msgstr ""
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__:1 of
msgid "Handler for single Bot instance"
msgstr ""
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__:4
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:10 of
msgid ""
"immediately responds to the Telegram instead of a waiting end of handler "
"process"
msgstr ""
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.__init__:6 of
msgid "instance of :class:`aiogram.client.bot.Bot`"
msgstr ""
#: aiogram.webhook.aiohttp_server.SimpleRequestHandler.close:1 of
msgid "Close bot session"
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:1 of
msgid ""
"Handler that supports multiple bots the context will be resolved from "
"path variable 'bot_token'"
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:6 of
msgid ""
"This handler is not recommended in due to token is available in URL and "
"can be logged by reverse proxy server or other middleware."
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.__init__:12 of
msgid "kwargs that will be passed to new Bot instance"
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.register:1 of
msgid "Validate path, register route and shutdown callback"
msgstr ""
#: aiogram.webhook.aiohttp_server.TokenBasedRequestHandler.resolve_bot:1 of
msgid "Get bot token from a path and create or get from cache Bot instance"
msgstr ""
#: ../../dispatcher/webhook.rst:51
msgid "Security"
msgstr ""
#: ../../dispatcher/webhook.rst:53
msgid ""
"Telegram supports two methods to verify incoming requests that they are "
"from Telegram:"
msgstr ""
#: ../../dispatcher/webhook.rst:56
msgid "Using a secret token"
msgstr ""
#: ../../dispatcher/webhook.rst:58
msgid ""
"When you set webhook, you can specify a secret token and then use it to "
"verify incoming requests."
msgstr ""
#: ../../dispatcher/webhook.rst:61
msgid "Using IP filtering"
msgstr ""
#: ../../dispatcher/webhook.rst:63
msgid ""
"You can specify a list of IP addresses from which you expect incoming "
"requests, and then use it to verify incoming requests."
msgstr ""
#: ../../dispatcher/webhook.rst:65
msgid ""
"It can be acy using firewall rules or nginx configuration or middleware "
"on application level."
msgstr ""
#: ../../dispatcher/webhook.rst:67
msgid ""
"So, aiogram has an implementation of the IP filtering middleware for "
"aiohttp."
msgstr ""
#: ../../dispatcher/webhook.rst:75
msgid "Examples"
msgstr ""
#: ../../dispatcher/webhook.rst:78
msgid "Behind reverse proxy"
msgstr ""
#: ../../dispatcher/webhook.rst:80
msgid ""
"In this example we'll use aiohttp as web framework and nginx as reverse "
"proxy."
msgstr ""
#: ../../dispatcher/webhook.rst:84
msgid ""
"When you use nginx as reverse proxy, you should set `proxy_pass` to your "
"aiohttp server address."
msgstr ""
#: ../../dispatcher/webhook.rst:98
msgid "Without reverse proxy (not recommended)"
msgstr ""
#: ../../dispatcher/webhook.rst:100
msgid ""
"In case you want can't use reverse proxy, you can use aiohttp's ssl "
"context."
msgstr ""
#: ../../dispatcher/webhook.rst:102
msgid "Also this example contains usage with self-signed certificate."
msgstr ""
#: ../../dispatcher/webhook.rst:108
msgid "With using other web framework"
msgstr ""
#: ../../dispatcher/webhook.rst:110
msgid ""
"You can pass incoming request to aiogram's webhook controller from any "
"web framework you want."
msgstr ""
#: ../../dispatcher/webhook.rst:112
msgid ""
"Read more about it in "
":meth:`aiogram.dispatcher.dispatcher.Dispatcher.feed_webhook_update` or "
":meth:`aiogram.dispatcher.dispatcher.Dispatcher.feed_update` methods."
msgstr ""
#: ../../dispatcher/webhook.rst:123
msgid ""
"If you want to use reply into webhook, you should check that result of "
"the :code:`feed_update` methods is an instance of API method and build "
":code:`multipart/form-data` or :code:`application/json` response body "
"manually."
msgstr ""

View file

@ -7,62 +7,110 @@ msgid ""
msgstr ""
"Project-Id-Version: aiogram\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-07 23:24+0200\n"
"POT-Creation-Date: 2023-08-06 16:52+0300\n"
"PO-Revision-Date: 2022-10-13 21:54+0300\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.10.3\n"
"Generated-By: Babel 2.12.1\n"
#: ../../utils/keyboard.rst:3
#: ../../utils/keyboard.rst:4
msgid "Keyboard builder"
msgstr "Конструктор клавіатури"
#: ../../utils/keyboard.rst:5
#: ../../utils/keyboard.rst:6
msgid "Keyboard builder helps to dynamically generate markup."
msgstr "Конструктор клавіатури допомагає динамічно генерувати розмітку"
#: ../../utils/keyboard.rst:9
#: ../../utils/keyboard.rst:10
msgid ""
"Note that if you have static markup, it's best to define it explicitly "
"rather than using builder, but if you have dynamic markup configuration, "
"feel free to use builder as you wish."
msgstr "Зауважте, що якщо у вас є статична розмітка, найкраще визначити її явно, "
"а не використовувати конструктор, але якщо у вас є конфігурація динамічної розмітки, "
"сміливо використовуйте конструктор на свій розсуд."
msgstr ""
"Зауважте, що якщо у вас є статична розмітка, найкраще визначити її явно, "
"а не використовувати конструктор, але якщо у вас є конфігурація "
"динамічної розмітки, сміливо використовуйте конструктор на свій розсуд."
#: ../../utils/keyboard.rst:14
#: ../../utils/keyboard.rst:15
msgid "Usage example"
msgstr "Приклад використання"
#: ../../utils/keyboard.rst:29
msgid "Base builder"
msgstr "Базовий конструктор"
#: aiogram.utils.keyboard.ReplyKeyboardBuilder:1 of
msgid "Reply keyboard builder inherits all methods from generic builder"
#: ../../utils/keyboard.rst:17
msgid "For example you want to generate inline keyboard with 10 buttons"
msgstr ""
"Конструктор клавіатури відповідей успадковує всі методи від "
#: ../../utils/keyboard.rst:27
msgid ""
"then adjust this buttons to some grid, for example first line will have 3"
" buttons, the next lines will have 2 buttons"
msgstr ""
#: ../../utils/keyboard.rst:33
msgid "also you can attach another builder to this one"
msgstr ""
#: ../../utils/keyboard.rst:40
msgid "or you can attach some already generated markup"
msgstr ""
#: ../../utils/keyboard.rst:47
msgid "and finally you can export this markup to use it in your message"
msgstr ""
#: ../../utils/keyboard.rst:53
#, fuzzy
msgid "Reply keyboard builder has the same interface"
msgstr "Конструктор клавіатури допомагає динамічно генерувати розмітку"
#: ../../utils/keyboard.rst:57
msgid ""
"Note that you can't attach reply keyboard builder to inline keyboard "
"builder and vice versa"
msgstr ""
#: ../../utils/keyboard.rst:61
msgid "Inline Keyboard"
msgstr "Клавіатура під повідомленням(Inline Keyboard)"
#: aiogram.utils.keyboard.InlineKeyboardBuilder:1 of
msgid "Inline keyboard builder inherits all methods from generic builder"
msgstr ""
"Конструктор клавіатури під повідомленням успадковує всі методи від "
"універсального конструктора"
#: ../../utils/keyboard.rst:69
msgid "Add new inline button to markup"
msgstr "Додавання нової кнопки до розмітки"
#: ../../utils/keyboard.rst:74
msgid "Construct an InlineKeyboardMarkup"
msgstr "Створення InlineKeyboardMarkup"
#: aiogram.utils.keyboard.KeyboardBuilder.add:1 of
msgid "Add one or many buttons to markup."
msgstr "Додавання однієї або кількох кнопок до розмітки."
#: aiogram.utils.keyboard.InlineKeyboardBuilder.from_markup
#: aiogram.utils.keyboard.KeyboardBuilder.add
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
#: aiogram.utils.keyboard.KeyboardBuilder.row of
#: aiogram.utils.keyboard.KeyboardBuilder.row
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.from_markup of
msgid "Parameters"
msgstr "Параметри"
#: aiogram.utils.keyboard.InlineKeyboardBuilder.buttons
#: aiogram.utils.keyboard.InlineKeyboardBuilder.copy
#: aiogram.utils.keyboard.InlineKeyboardBuilder.from_markup
#: aiogram.utils.keyboard.KeyboardBuilder.add
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
#: aiogram.utils.keyboard.KeyboardBuilder.export
#: aiogram.utils.keyboard.KeyboardBuilder.row
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy of
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.from_markup of
msgid "Returns"
msgstr "Повертає"
@ -83,10 +131,12 @@ msgstr ""
"передано параметр repeat=True, усі розміри будуть повторюватися, поки є "
"доступні кнопки"
#: aiogram.utils.keyboard.InlineKeyboardBuilder.buttons:1
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons:1 of
msgid "Get flatten set of all buttons"
msgstr "Отримання плоского списку усіх кнопок"
#: aiogram.utils.keyboard.InlineKeyboardBuilder.copy:1
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy:1 of
msgid "Make full copy of current builder with markup"
msgstr "Робить повну копію поточного конструктора з розміткою"
@ -95,6 +145,11 @@ msgstr "Робить повну копію поточного конструкт
msgid "Export configured markup as list of lists of buttons"
msgstr "Експортує налаштовану розмітку як список списків кнопок"
#: aiogram.utils.keyboard.InlineKeyboardBuilder.from_markup:1
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.from_markup:1 of
msgid "Create builder from existing markup"
msgstr ""
#: aiogram.utils.keyboard.KeyboardBuilder.row:1 of
msgid "Add row to markup"
msgstr "Додає рядок у розмітку"
@ -105,32 +160,23 @@ msgstr ""
"Коли передано занадто багато кнопок, вони будуть розділені на багато "
"рядків"
#: ../../utils/keyboard.rst:35
msgid "Inline Keyboard"
msgstr "Клавіатура під повідомленням(Inline Keyboard)"
#: aiogram.utils.keyboard.InlineKeyboardBuilder:1 of
msgid "Inline keyboard builder inherits all methods from generic builder"
msgstr ""
"Конструктор клавіатури під повідомленням успадковує всі методи від "
"універсального конструктора"
#: ../../utils/keyboard.rst:43
msgid "Add new inline button to markup"
msgstr "Додавання нової кнопки до розмітки"
#: ../../utils/keyboard.rst:48
msgid "Construct an InlineKeyboardMarkup"
msgstr "Створення InlineKeyboardMarkup"
#: ../../utils/keyboard.rst:51
#: ../../utils/keyboard.rst:77
msgid "Reply Keyboard"
msgstr "Клавіатура відповідей"
#: ../../utils/keyboard.rst:59
#: aiogram.utils.keyboard.ReplyKeyboardBuilder:1 of
msgid "Reply keyboard builder inherits all methods from generic builder"
msgstr ""
"Конструктор клавіатури відповідей успадковує всі методи від "
"універсального конструктора"
#: ../../utils/keyboard.rst:85
msgid "Add new button to markup"
msgstr "Додавання нової кнопки до розмітки"
#: ../../utils/keyboard.rst:64
#: ../../utils/keyboard.rst:90
msgid "Construct an ReplyKeyboardMarkup"
msgstr "Створення ReplyKeyboardMarkup"
#~ msgid "Base builder"
#~ msgstr "Базовий конструктор"