mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
Webhook docs (#1248)
* Added documentation for polling/webhook modes * Added changelog * Added changelog
This commit is contained in:
parent
62d4b9014c
commit
b311d59fce
37 changed files with 2595 additions and 692 deletions
1
CHANGES/1241.doc.rst
Normal file
1
CHANGES/1241.doc.rst
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Added documentation for webhook and polling modes.
|
||||||
|
|
@ -18,11 +18,11 @@ from aiogram.webhook.security import IPFilter
|
||||||
|
|
||||||
def setup_application(app: Application, dispatcher: Dispatcher, /, **kwargs: Any) -> None:
|
def setup_application(app: Application, dispatcher: Dispatcher, /, **kwargs: Any) -> None:
|
||||||
"""
|
"""
|
||||||
This function helps to configure startup-shutdown process
|
This function helps to configure a startup-shutdown process
|
||||||
|
|
||||||
:param app:
|
:param app: aiohttp application
|
||||||
:param dispatcher:
|
:param dispatcher: aiogram dispatcher
|
||||||
:param kwargs:
|
:param kwargs: additional data
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
workflow_data = {
|
workflow_data = {
|
||||||
|
|
@ -81,11 +81,6 @@ def ip_filter_middleware(
|
||||||
|
|
||||||
|
|
||||||
class BaseRequestHandler(ABC):
|
class BaseRequestHandler(ABC):
|
||||||
"""
|
|
||||||
Base handler that helps to handle incoming request from aiohttp
|
|
||||||
and propagate it to the Dispatcher
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
dispatcher: Dispatcher,
|
dispatcher: Dispatcher,
|
||||||
|
|
@ -93,9 +88,12 @@ class BaseRequestHandler(ABC):
|
||||||
**data: Any,
|
**data: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
|
Base handler that helps to handle incoming request from aiohttp
|
||||||
|
and propagate it to the Dispatcher
|
||||||
|
|
||||||
:param dispatcher: instance of :class:`aiogram.dispatcher.dispatcher.Dispatcher`
|
:param dispatcher: instance of :class:`aiogram.dispatcher.dispatcher.Dispatcher`
|
||||||
:param handle_in_background: immediately respond to the Telegram instead of
|
:param handle_in_background: immediately responds to the Telegram instead of
|
||||||
waiting end of handler process
|
a waiting end of a handler process
|
||||||
"""
|
"""
|
||||||
self.dispatcher = dispatcher
|
self.dispatcher = dispatcher
|
||||||
self.handle_in_background = handle_in_background
|
self.handle_in_background = handle_in_background
|
||||||
|
|
@ -199,10 +197,6 @@ class BaseRequestHandler(ABC):
|
||||||
|
|
||||||
|
|
||||||
class SimpleRequestHandler(BaseRequestHandler):
|
class SimpleRequestHandler(BaseRequestHandler):
|
||||||
"""
|
|
||||||
Handler for single Bot instance
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
dispatcher: Dispatcher,
|
dispatcher: Dispatcher,
|
||||||
|
|
@ -212,9 +206,11 @@ class SimpleRequestHandler(BaseRequestHandler):
|
||||||
**data: Any,
|
**data: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
|
Handler for single Bot instance
|
||||||
|
|
||||||
:param dispatcher: instance of :class:`aiogram.dispatcher.dispatcher.Dispatcher`
|
:param dispatcher: instance of :class:`aiogram.dispatcher.dispatcher.Dispatcher`
|
||||||
:param handle_in_background: immediately respond to the Telegram instead of
|
:param handle_in_background: immediately responds to the Telegram instead of
|
||||||
waiting end of handler process
|
a waiting end of handler process
|
||||||
:param bot: instance of :class:`aiogram.client.bot.Bot`
|
:param bot: instance of :class:`aiogram.client.bot.Bot`
|
||||||
"""
|
"""
|
||||||
super().__init__(dispatcher=dispatcher, handle_in_background=handle_in_background, **data)
|
super().__init__(dispatcher=dispatcher, handle_in_background=handle_in_background, **data)
|
||||||
|
|
@ -237,11 +233,6 @@ class SimpleRequestHandler(BaseRequestHandler):
|
||||||
|
|
||||||
|
|
||||||
class TokenBasedRequestHandler(BaseRequestHandler):
|
class TokenBasedRequestHandler(BaseRequestHandler):
|
||||||
"""
|
|
||||||
Handler that supports multiple bots, the context will be resolved
|
|
||||||
from path variable 'bot_token'
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
dispatcher: Dispatcher,
|
dispatcher: Dispatcher,
|
||||||
|
|
@ -250,9 +241,17 @@ class TokenBasedRequestHandler(BaseRequestHandler):
|
||||||
**data: Any,
|
**data: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
|
Handler that supports multiple bots the context will be resolved
|
||||||
|
from path variable 'bot_token'
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This handler is not recommended in due to token is available in URL
|
||||||
|
and can be logged by reverse proxy server or other middleware.
|
||||||
|
|
||||||
:param dispatcher: instance of :class:`aiogram.dispatcher.dispatcher.Dispatcher`
|
:param dispatcher: instance of :class:`aiogram.dispatcher.dispatcher.Dispatcher`
|
||||||
:param handle_in_background: immediately respond to the Telegram instead of
|
:param handle_in_background: immediately responds to the Telegram instead of
|
||||||
waiting end of handler process
|
a waiting end of handler process
|
||||||
:param bot_settings: kwargs that will be passed to new Bot instance
|
:param bot_settings: kwargs that will be passed to new Bot instance
|
||||||
"""
|
"""
|
||||||
super().__init__(dispatcher=dispatcher, handle_in_background=handle_in_background, **data)
|
super().__init__(dispatcher=dispatcher, handle_in_background=handle_in_background, **data)
|
||||||
|
|
@ -282,7 +281,7 @@ class TokenBasedRequestHandler(BaseRequestHandler):
|
||||||
|
|
||||||
async def resolve_bot(self, request: web.Request) -> Bot:
|
async def resolve_bot(self, request: web.Request) -> Bot:
|
||||||
"""
|
"""
|
||||||
Get bot token from path and create or get from cache Bot instance
|
Get bot token from a path and create or get from cache Bot instance
|
||||||
|
|
||||||
:param request:
|
:param request:
|
||||||
:return:
|
:return:
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,13 @@ With dispatcher you can do:
|
||||||
Dispatcher is also separated into two entities - Router and Dispatcher.
|
Dispatcher is also separated into two entities - Router and Dispatcher.
|
||||||
Dispatcher is subclass of router and should be always is root router.
|
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::
|
.. toctree::
|
||||||
|
|
||||||
router
|
router
|
||||||
|
|
@ -25,3 +32,5 @@ Dispatcher is subclass of router and should be always is root router.
|
||||||
finite_state_machine/index
|
finite_state_machine/index
|
||||||
flags
|
flags
|
||||||
errors
|
errors
|
||||||
|
long_polling
|
||||||
|
webhook
|
||||||
|
|
|
||||||
32
docs/dispatcher/long_polling.rst
Normal file
32
docs/dispatcher/long_polling.rst
Normal 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
125
docs/dispatcher/webhook.rst
Normal 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.
|
||||||
30
docs/locale/en/LC_MESSAGES/api/enums/currency.po
Normal file
30
docs/locale/en/LC_MESSAGES/api/enums/currency.po
Normal 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 ""
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/methods/answer_pre_checkout_query.rst:3
|
||||||
msgid "answerPreCheckoutQuery"
|
msgid "answerPreCheckoutQuery"
|
||||||
|
|
@ -65,36 +65,44 @@ msgid ""
|
||||||
" user."
|
" user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:14
|
#: ../../api/methods/answer_pre_checkout_query.rst:15
|
||||||
msgid "Usage"
|
msgid "Usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:17
|
#: ../../api/methods/answer_pre_checkout_query.rst:18
|
||||||
msgid "As bot method"
|
msgid "As bot method"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:25
|
#: ../../api/methods/answer_pre_checkout_query.rst:26
|
||||||
msgid "Method as object"
|
msgid "Method as object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:27
|
#: ../../api/methods/answer_pre_checkout_query.rst:28
|
||||||
msgid "Imports:"
|
msgid "Imports:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:29
|
#: ../../api/methods/answer_pre_checkout_query.rst:30
|
||||||
msgid ""
|
msgid ""
|
||||||
":code:`from aiogram.methods.answer_pre_checkout_query import "
|
":code:`from aiogram.methods.answer_pre_checkout_query import "
|
||||||
"AnswerPreCheckoutQuery`"
|
"AnswerPreCheckoutQuery`"
|
||||||
msgstr ""
|
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`"
|
msgid "alias: :code:`from aiogram.methods import AnswerPreCheckoutQuery`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:33
|
#: ../../api/methods/answer_pre_checkout_query.rst:34
|
||||||
msgid "With specific bot"
|
msgid "With specific bot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:40
|
#: ../../api/methods/answer_pre_checkout_query.rst:41
|
||||||
msgid "As reply into Webhook in handler"
|
msgid "As reply into Webhook in handler"
|
||||||
msgstr ""
|
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 ""
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/methods/answer_shipping_query.rst:3
|
||||||
msgid "answerShippingQuery"
|
msgid "answerShippingQuery"
|
||||||
|
|
@ -69,36 +69,44 @@ msgid ""
|
||||||
"this message to the user."
|
"this message to the user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:14
|
#: ../../api/methods/answer_shipping_query.rst:15
|
||||||
msgid "Usage"
|
msgid "Usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:17
|
#: ../../api/methods/answer_shipping_query.rst:18
|
||||||
msgid "As bot method"
|
msgid "As bot method"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:25
|
#: ../../api/methods/answer_shipping_query.rst:26
|
||||||
msgid "Method as object"
|
msgid "Method as object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:27
|
#: ../../api/methods/answer_shipping_query.rst:28
|
||||||
msgid "Imports:"
|
msgid "Imports:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:29
|
#: ../../api/methods/answer_shipping_query.rst:30
|
||||||
msgid ""
|
msgid ""
|
||||||
":code:`from aiogram.methods.answer_shipping_query import "
|
":code:`from aiogram.methods.answer_shipping_query import "
|
||||||
"AnswerShippingQuery`"
|
"AnswerShippingQuery`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:30
|
#: ../../api/methods/answer_shipping_query.rst:31
|
||||||
msgid "alias: :code:`from aiogram.methods import AnswerShippingQuery`"
|
msgid "alias: :code:`from aiogram.methods import AnswerShippingQuery`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:33
|
#: ../../api/methods/answer_shipping_query.rst:34
|
||||||
msgid "With specific bot"
|
msgid "With specific bot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:40
|
#: ../../api/methods/answer_shipping_query.rst:41
|
||||||
msgid "As reply into Webhook in handler"
|
msgid "As reply into Webhook in handler"
|
||||||
msgstr ""
|
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 ""
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/methods/edit_message_reply_markup.rst:3
|
||||||
msgid "editMessageReplyMarkup"
|
msgid "editMessageReplyMarkup"
|
||||||
|
|
@ -70,48 +70,52 @@ msgid ""
|
||||||
"<https://core.telegram.org/bots/features#inline-keyboards>`_."
|
"<https://core.telegram.org/bots/features#inline-keyboards>`_."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:14
|
#: ../../api/methods/edit_message_reply_markup.rst:15
|
||||||
msgid "Usage"
|
msgid "Usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:17
|
#: ../../api/methods/edit_message_reply_markup.rst:18
|
||||||
msgid "As bot method"
|
msgid "As bot method"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:25
|
#: ../../api/methods/edit_message_reply_markup.rst:26
|
||||||
msgid "Method as object"
|
msgid "Method as object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:27
|
#: ../../api/methods/edit_message_reply_markup.rst:28
|
||||||
msgid "Imports:"
|
msgid "Imports:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:29
|
#: ../../api/methods/edit_message_reply_markup.rst:30
|
||||||
msgid ""
|
msgid ""
|
||||||
":code:`from aiogram.methods.edit_message_reply_markup import "
|
":code:`from aiogram.methods.edit_message_reply_markup import "
|
||||||
"EditMessageReplyMarkup`"
|
"EditMessageReplyMarkup`"
|
||||||
msgstr ""
|
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`"
|
msgid "alias: :code:`from aiogram.methods import EditMessageReplyMarkup`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:33
|
#: ../../api/methods/edit_message_reply_markup.rst:34
|
||||||
msgid "With specific bot"
|
msgid "With specific bot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:40
|
#: ../../api/methods/edit_message_reply_markup.rst:41
|
||||||
msgid "As reply into Webhook in handler"
|
msgid "As reply into Webhook in handler"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:48
|
#: ../../api/methods/edit_message_reply_markup.rst:49
|
||||||
msgid "As shortcut from received object"
|
msgid "As shortcut from received object"
|
||||||
msgstr ""
|
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`"
|
msgid ":meth:`aiogram.types.message.Message.edit_reply_markup`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../../api/methods/edit_message_reply_markup.rst:52
|
||||||
|
msgid ":meth:`aiogram.types.message.Message.delete_reply_markup`"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "A JSON-serialized object for an "
|
#~ "A JSON-serialized object for an "
|
||||||
#~ "`inline keyboard <https://core.telegram.org/bots"
|
#~ "`inline keyboard <https://core.telegram.org/bots"
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/types/message.rst:3
|
||||||
msgid "Message"
|
msgid "Message"
|
||||||
|
|
@ -437,6 +437,7 @@ msgstr ""
|
||||||
#: aiogram.types.message.Message.answer_video_note:4
|
#: aiogram.types.message.Message.answer_video_note:4
|
||||||
#: aiogram.types.message.Message.answer_voice:4
|
#: aiogram.types.message.Message.answer_voice:4
|
||||||
#: aiogram.types.message.Message.delete: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_caption:4
|
||||||
#: aiogram.types.message.Message.edit_live_location:4
|
#: aiogram.types.message.Message.edit_live_location:4
|
||||||
#: aiogram.types.message.Message.edit_media: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_video_note
|
||||||
#: aiogram.types.message.Message.answer_voice
|
#: aiogram.types.message.Message.answer_voice
|
||||||
#: aiogram.types.message.Message.copy_to
|
#: aiogram.types.message.Message.copy_to
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup
|
||||||
#: aiogram.types.message.Message.edit_caption
|
#: aiogram.types.message.Message.edit_caption
|
||||||
#: aiogram.types.message.Message.edit_live_location
|
#: aiogram.types.message.Message.edit_live_location
|
||||||
#: aiogram.types.message.Message.edit_media
|
#: aiogram.types.message.Message.edit_media
|
||||||
|
|
@ -836,6 +838,7 @@ msgstr ""
|
||||||
#: aiogram.types.message.Message.answer_video_note
|
#: aiogram.types.message.Message.answer_video_note
|
||||||
#: aiogram.types.message.Message.answer_voice
|
#: aiogram.types.message.Message.answer_voice
|
||||||
#: aiogram.types.message.Message.copy_to aiogram.types.message.Message.delete
|
#: 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_caption
|
||||||
#: aiogram.types.message.Message.edit_live_location
|
#: aiogram.types.message.Message.edit_live_location
|
||||||
#: aiogram.types.message.Message.edit_media
|
#: aiogram.types.message.Message.edit_media
|
||||||
|
|
@ -1941,7 +1944,7 @@ msgid "instance of method :class:`aiogram.methods.send_voice.SendVoice`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.send_copy:1 of
|
#: aiogram.types.message.Message.send_copy:1 of
|
||||||
msgid "Send copy of message."
|
msgid "Send copy of a message."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.send_copy:3 of
|
#: aiogram.types.message.Message.send_copy:3 of
|
||||||
|
|
@ -1952,8 +1955,8 @@ msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.send_copy:8 of
|
#: aiogram.types.message.Message.send_copy:8 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"This method don't use the API method named `copyMessage` and historically"
|
"This method doesn't use the API method named `copyMessage` and "
|
||||||
" implemented before the similar method is added to API"
|
"historically implemented before the similar method is added to API"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.copy_to:1 of
|
#: aiogram.types.message.Message.copy_to:1 of
|
||||||
|
|
@ -1969,6 +1972,7 @@ msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.copy_to:5
|
#: aiogram.types.message.Message.copy_to:5
|
||||||
#: aiogram.types.message.Message.delete: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_caption:5
|
||||||
#: aiogram.types.message.Message.edit_live_location:5
|
#: aiogram.types.message.Message.edit_live_location:5
|
||||||
#: aiogram.types.message.Message.edit_media: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"
|
msgid "New text of the message, 1-4096 characters after entities parsing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:12
|
||||||
#: aiogram.types.message.Message.edit_caption:11
|
#: aiogram.types.message.Message.edit_caption:11
|
||||||
#: aiogram.types.message.Message.edit_live_location:13
|
#: aiogram.types.message.Message.edit_live_location:13
|
||||||
#: aiogram.types.message.Message.edit_media:12
|
#: aiogram.types.message.Message.edit_media:12
|
||||||
|
|
@ -2149,6 +2154,7 @@ msgid ""
|
||||||
":class:`aiogram.methods.edit_message_media.EditMessageMedia`"
|
":class:`aiogram.methods.edit_message_media.EditMessageMedia`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:1
|
||||||
#: aiogram.types.message.Message.edit_reply_markup:1 of
|
#: aiogram.types.message.Message.edit_reply_markup:1 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"Shortcut for method "
|
"Shortcut for method "
|
||||||
|
|
@ -2156,6 +2162,7 @@ msgid ""
|
||||||
" will automatically fill method attributes:"
|
" will automatically fill method attributes:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:8
|
||||||
#: aiogram.types.message.Message.edit_reply_markup:7 of
|
#: aiogram.types.message.Message.edit_reply_markup:7 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"Use this method to edit only the reply markup of messages. On success, if"
|
"Use this method to edit only the reply markup of messages. On success, if"
|
||||||
|
|
@ -2164,16 +2171,22 @@ msgid ""
|
||||||
":code:`True` is returned."
|
":code:`True` is returned."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:10
|
||||||
#: aiogram.types.message.Message.edit_reply_markup:9 of
|
#: aiogram.types.message.Message.edit_reply_markup:9 of
|
||||||
msgid "Source: https://core.telegram.org/bots/api#editmessagereplymarkup"
|
msgid "Source: https://core.telegram.org/bots/api#editmessagereplymarkup"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:13
|
||||||
#: aiogram.types.message.Message.edit_reply_markup:13 of
|
#: aiogram.types.message.Message.edit_reply_markup:13 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"instance of method "
|
"instance of method "
|
||||||
":class:`aiogram.methods.edit_message_reply_markup.EditMessageReplyMarkup`"
|
":class:`aiogram.methods.edit_message_reply_markup.EditMessageReplyMarkup`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:6 of
|
||||||
|
msgid ":code:`reply_markup`"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.edit_live_location:1 of
|
#: aiogram.types.message.Message.edit_live_location:1 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"Shortcut for method "
|
"Shortcut for method "
|
||||||
|
|
@ -2562,3 +2575,13 @@ msgstr ""
|
||||||
#~ "/form-data. :ref:`More information on "
|
#~ "/form-data. :ref:`More information on "
|
||||||
#~ "Sending Files » <sending-files>`"
|
#~ "Sending Files » <sending-files>`"
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/types/pre_checkout_query.rst:3
|
||||||
msgid "PreCheckoutQuery"
|
msgid "PreCheckoutQuery"
|
||||||
|
|
@ -71,10 +71,58 @@ msgstr ""
|
||||||
msgid "*Optional*. Order information provided by the user"
|
msgid "*Optional*. Order information provided by the user"
|
||||||
msgstr ""
|
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
|
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer of
|
||||||
msgid "Parameters"
|
msgid "Parameters"
|
||||||
msgstr ""
|
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
|
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer of
|
||||||
msgid "Returns"
|
msgid "Returns"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:12 of
|
||||||
|
msgid ""
|
||||||
|
"instance of method "
|
||||||
|
":class:`aiogram.methods.answer_pre_checkout_query.AnswerPreCheckoutQuery`"
|
||||||
|
msgstr ""
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/types/shipping_query.rst:3
|
||||||
msgid "ShippingQuery"
|
msgid "ShippingQuery"
|
||||||
|
|
@ -47,10 +47,61 @@ msgstr ""
|
||||||
msgid "User specified shipping address"
|
msgid "User specified shipping address"
|
||||||
msgstr ""
|
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
|
#: aiogram.types.shipping_query.ShippingQuery.answer of
|
||||||
msgid "Parameters"
|
msgid "Parameters"
|
||||||
msgstr ""
|
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
|
#: aiogram.types.shipping_query.ShippingQuery.answer of
|
||||||
msgid "Returns"
|
msgid "Returns"
|
||||||
msgstr ""
|
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
22
docs/locale/en/LC_MESSAGES/deployment/index.po
Normal file
22
docs/locale/en/LC_MESSAGES/deployment/index.po
Normal 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 ""
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.10.3\n"
|
"Generated-By: Babel 2.12.1\n"
|
||||||
|
|
||||||
#: ../../dispatcher/index.rst:3
|
#: ../../dispatcher/index.rst:3
|
||||||
msgid "Handling events"
|
msgid "Handling events"
|
||||||
|
|
@ -54,3 +54,23 @@ msgid ""
|
||||||
"Dispatcher is also separated into two entities - Router and Dispatcher. "
|
"Dispatcher is also separated into two entities - Router and Dispatcher. "
|
||||||
"Dispatcher is subclass of router and should be always is root router."
|
"Dispatcher is subclass of router and should be always is root router."
|
||||||
msgstr ""
|
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 ""
|
||||||
|
|
|
||||||
62
docs/locale/en/LC_MESSAGES/dispatcher/long_polling.po
Normal file
62
docs/locale/en/LC_MESSAGES/dispatcher/long_polling.po
Normal 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 ""
|
||||||
303
docs/locale/en/LC_MESSAGES/dispatcher/webhook.po
Normal file
303
docs/locale/en/LC_MESSAGES/dispatcher/webhook.po
Normal 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 ""
|
||||||
|
|
@ -8,58 +8,104 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
msgid "Keyboard builder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:5
|
#: ../../utils/keyboard.rst:6
|
||||||
msgid "Keyboard builder helps to dynamically generate markup."
|
msgid "Keyboard builder helps to dynamically generate markup."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:9
|
#: ../../utils/keyboard.rst:10
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that if you have static markup, it's best to define it explicitly "
|
"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, "
|
"rather than using builder, but if you have dynamic markup configuration, "
|
||||||
"feel free to use builder as you wish."
|
"feel free to use builder as you wish."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:14
|
#: ../../utils/keyboard.rst:15
|
||||||
msgid "Usage example"
|
msgid "Usage example"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:29
|
#: ../../utils/keyboard.rst:17
|
||||||
msgid "Base builder"
|
msgid "For example you want to generate inline keyboard with 10 buttons"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.utils.keyboard.ReplyKeyboardBuilder:1 of
|
#: ../../utils/keyboard.rst:27
|
||||||
msgid "Reply keyboard builder inherits all methods from generic builder"
|
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 ""
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.add:1 of
|
#: aiogram.utils.keyboard.KeyboardBuilder.add:1 of
|
||||||
msgid "Add one or many buttons to markup."
|
msgid "Add one or many buttons to markup."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.utils.keyboard.InlineKeyboardBuilder.from_markup
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.add
|
#: aiogram.utils.keyboard.KeyboardBuilder.add
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
|
#: 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"
|
msgid "Parameters"
|
||||||
msgstr ""
|
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.add
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
|
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.export
|
#: aiogram.utils.keyboard.KeyboardBuilder.export
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.row
|
#: aiogram.utils.keyboard.KeyboardBuilder.row
|
||||||
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons
|
#: 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"
|
msgid "Returns"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -75,10 +121,12 @@ msgid ""
|
||||||
"all sizes"
|
"all sizes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.utils.keyboard.InlineKeyboardBuilder.buttons:1
|
||||||
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons:1 of
|
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons:1 of
|
||||||
msgid "Get flatten set of all buttons"
|
msgid "Get flatten set of all buttons"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.utils.keyboard.InlineKeyboardBuilder.copy:1
|
||||||
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy:1 of
|
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy:1 of
|
||||||
msgid "Make full copy of current builder with markup"
|
msgid "Make full copy of current builder with markup"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -87,6 +135,11 @@ msgstr ""
|
||||||
msgid "Export configured markup as list of lists of buttons"
|
msgid "Export configured markup as list of lists of buttons"
|
||||||
msgstr ""
|
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
|
#: aiogram.utils.keyboard.KeyboardBuilder.row:1 of
|
||||||
msgid "Add row to markup"
|
msgid "Add row to markup"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -95,31 +148,19 @@ msgstr ""
|
||||||
msgid "When too much buttons is passed it will be separated to many rows"
|
msgid "When too much buttons is passed it will be separated to many rows"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:35
|
#: ../../utils/keyboard.rst:77
|
||||||
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
|
|
||||||
msgid "Reply Keyboard"
|
msgid "Reply Keyboard"
|
||||||
msgstr ""
|
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"
|
msgid "Add new button to markup"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:64
|
#: ../../utils/keyboard.rst:90
|
||||||
msgid "Construct an ReplyKeyboardMarkup"
|
msgid "Construct an ReplyKeyboardMarkup"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -132,3 +173,6 @@ msgstr ""
|
||||||
#~ "will be cycled when available more "
|
#~ "will be cycled when available more "
|
||||||
#~ "buttons count than all sizes"
|
#~ "buttons count than all sizes"
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Base builder"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
|
||||||
30
docs/locale/uk_UA/LC_MESSAGES/api/enums/currency.po
Normal file
30
docs/locale/uk_UA/LC_MESSAGES/api/enums/currency.po
Normal 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 ""
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/methods/answer_pre_checkout_query.rst:3
|
||||||
msgid "answerPreCheckoutQuery"
|
msgid "answerPreCheckoutQuery"
|
||||||
|
|
@ -65,36 +65,44 @@ msgid ""
|
||||||
" user."
|
" user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:14
|
#: ../../api/methods/answer_pre_checkout_query.rst:15
|
||||||
msgid "Usage"
|
msgid "Usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:17
|
#: ../../api/methods/answer_pre_checkout_query.rst:18
|
||||||
msgid "As bot method"
|
msgid "As bot method"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:25
|
#: ../../api/methods/answer_pre_checkout_query.rst:26
|
||||||
msgid "Method as object"
|
msgid "Method as object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:27
|
#: ../../api/methods/answer_pre_checkout_query.rst:28
|
||||||
msgid "Imports:"
|
msgid "Imports:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:29
|
#: ../../api/methods/answer_pre_checkout_query.rst:30
|
||||||
msgid ""
|
msgid ""
|
||||||
":code:`from aiogram.methods.answer_pre_checkout_query import "
|
":code:`from aiogram.methods.answer_pre_checkout_query import "
|
||||||
"AnswerPreCheckoutQuery`"
|
"AnswerPreCheckoutQuery`"
|
||||||
msgstr ""
|
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`"
|
msgid "alias: :code:`from aiogram.methods import AnswerPreCheckoutQuery`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:33
|
#: ../../api/methods/answer_pre_checkout_query.rst:34
|
||||||
msgid "With specific bot"
|
msgid "With specific bot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_pre_checkout_query.rst:40
|
#: ../../api/methods/answer_pre_checkout_query.rst:41
|
||||||
msgid "As reply into Webhook in handler"
|
msgid "As reply into Webhook in handler"
|
||||||
msgstr ""
|
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 ""
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/methods/answer_shipping_query.rst:3
|
||||||
msgid "answerShippingQuery"
|
msgid "answerShippingQuery"
|
||||||
|
|
@ -69,36 +69,44 @@ msgid ""
|
||||||
"this message to the user."
|
"this message to the user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:14
|
#: ../../api/methods/answer_shipping_query.rst:15
|
||||||
msgid "Usage"
|
msgid "Usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:17
|
#: ../../api/methods/answer_shipping_query.rst:18
|
||||||
msgid "As bot method"
|
msgid "As bot method"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:25
|
#: ../../api/methods/answer_shipping_query.rst:26
|
||||||
msgid "Method as object"
|
msgid "Method as object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:27
|
#: ../../api/methods/answer_shipping_query.rst:28
|
||||||
msgid "Imports:"
|
msgid "Imports:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:29
|
#: ../../api/methods/answer_shipping_query.rst:30
|
||||||
msgid ""
|
msgid ""
|
||||||
":code:`from aiogram.methods.answer_shipping_query import "
|
":code:`from aiogram.methods.answer_shipping_query import "
|
||||||
"AnswerShippingQuery`"
|
"AnswerShippingQuery`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:30
|
#: ../../api/methods/answer_shipping_query.rst:31
|
||||||
msgid "alias: :code:`from aiogram.methods import AnswerShippingQuery`"
|
msgid "alias: :code:`from aiogram.methods import AnswerShippingQuery`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:33
|
#: ../../api/methods/answer_shipping_query.rst:34
|
||||||
msgid "With specific bot"
|
msgid "With specific bot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/answer_shipping_query.rst:40
|
#: ../../api/methods/answer_shipping_query.rst:41
|
||||||
msgid "As reply into Webhook in handler"
|
msgid "As reply into Webhook in handler"
|
||||||
msgstr ""
|
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 ""
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/methods/edit_message_reply_markup.rst:3
|
||||||
msgid "editMessageReplyMarkup"
|
msgid "editMessageReplyMarkup"
|
||||||
|
|
@ -70,48 +70,52 @@ msgid ""
|
||||||
"<https://core.telegram.org/bots/features#inline-keyboards>`_."
|
"<https://core.telegram.org/bots/features#inline-keyboards>`_."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:14
|
#: ../../api/methods/edit_message_reply_markup.rst:15
|
||||||
msgid "Usage"
|
msgid "Usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:17
|
#: ../../api/methods/edit_message_reply_markup.rst:18
|
||||||
msgid "As bot method"
|
msgid "As bot method"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:25
|
#: ../../api/methods/edit_message_reply_markup.rst:26
|
||||||
msgid "Method as object"
|
msgid "Method as object"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:27
|
#: ../../api/methods/edit_message_reply_markup.rst:28
|
||||||
msgid "Imports:"
|
msgid "Imports:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:29
|
#: ../../api/methods/edit_message_reply_markup.rst:30
|
||||||
msgid ""
|
msgid ""
|
||||||
":code:`from aiogram.methods.edit_message_reply_markup import "
|
":code:`from aiogram.methods.edit_message_reply_markup import "
|
||||||
"EditMessageReplyMarkup`"
|
"EditMessageReplyMarkup`"
|
||||||
msgstr ""
|
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`"
|
msgid "alias: :code:`from aiogram.methods import EditMessageReplyMarkup`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:33
|
#: ../../api/methods/edit_message_reply_markup.rst:34
|
||||||
msgid "With specific bot"
|
msgid "With specific bot"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:40
|
#: ../../api/methods/edit_message_reply_markup.rst:41
|
||||||
msgid "As reply into Webhook in handler"
|
msgid "As reply into Webhook in handler"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../../api/methods/edit_message_reply_markup.rst:48
|
#: ../../api/methods/edit_message_reply_markup.rst:49
|
||||||
msgid "As shortcut from received object"
|
msgid "As shortcut from received object"
|
||||||
msgstr ""
|
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`"
|
msgid ":meth:`aiogram.types.message.Message.edit_reply_markup`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../../api/methods/edit_message_reply_markup.rst:52
|
||||||
|
msgid ":meth:`aiogram.types.message.Message.delete_reply_markup`"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "A JSON-serialized object for an "
|
#~ "A JSON-serialized object for an "
|
||||||
#~ "`inline keyboard <https://core.telegram.org/bots"
|
#~ "`inline keyboard <https://core.telegram.org/bots"
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/types/message.rst:3
|
||||||
msgid "Message"
|
msgid "Message"
|
||||||
|
|
@ -437,6 +437,7 @@ msgstr ""
|
||||||
#: aiogram.types.message.Message.answer_video_note:4
|
#: aiogram.types.message.Message.answer_video_note:4
|
||||||
#: aiogram.types.message.Message.answer_voice:4
|
#: aiogram.types.message.Message.answer_voice:4
|
||||||
#: aiogram.types.message.Message.delete: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_caption:4
|
||||||
#: aiogram.types.message.Message.edit_live_location:4
|
#: aiogram.types.message.Message.edit_live_location:4
|
||||||
#: aiogram.types.message.Message.edit_media: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_video_note
|
||||||
#: aiogram.types.message.Message.answer_voice
|
#: aiogram.types.message.Message.answer_voice
|
||||||
#: aiogram.types.message.Message.copy_to
|
#: aiogram.types.message.Message.copy_to
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup
|
||||||
#: aiogram.types.message.Message.edit_caption
|
#: aiogram.types.message.Message.edit_caption
|
||||||
#: aiogram.types.message.Message.edit_live_location
|
#: aiogram.types.message.Message.edit_live_location
|
||||||
#: aiogram.types.message.Message.edit_media
|
#: aiogram.types.message.Message.edit_media
|
||||||
|
|
@ -836,6 +838,7 @@ msgstr ""
|
||||||
#: aiogram.types.message.Message.answer_video_note
|
#: aiogram.types.message.Message.answer_video_note
|
||||||
#: aiogram.types.message.Message.answer_voice
|
#: aiogram.types.message.Message.answer_voice
|
||||||
#: aiogram.types.message.Message.copy_to aiogram.types.message.Message.delete
|
#: 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_caption
|
||||||
#: aiogram.types.message.Message.edit_live_location
|
#: aiogram.types.message.Message.edit_live_location
|
||||||
#: aiogram.types.message.Message.edit_media
|
#: aiogram.types.message.Message.edit_media
|
||||||
|
|
@ -1941,7 +1944,7 @@ msgid "instance of method :class:`aiogram.methods.send_voice.SendVoice`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.send_copy:1 of
|
#: aiogram.types.message.Message.send_copy:1 of
|
||||||
msgid "Send copy of message."
|
msgid "Send copy of a message."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.send_copy:3 of
|
#: aiogram.types.message.Message.send_copy:3 of
|
||||||
|
|
@ -1952,8 +1955,8 @@ msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.send_copy:8 of
|
#: aiogram.types.message.Message.send_copy:8 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"This method don't use the API method named `copyMessage` and historically"
|
"This method doesn't use the API method named `copyMessage` and "
|
||||||
" implemented before the similar method is added to API"
|
"historically implemented before the similar method is added to API"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.copy_to:1 of
|
#: aiogram.types.message.Message.copy_to:1 of
|
||||||
|
|
@ -1969,6 +1972,7 @@ msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.copy_to:5
|
#: aiogram.types.message.Message.copy_to:5
|
||||||
#: aiogram.types.message.Message.delete: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_caption:5
|
||||||
#: aiogram.types.message.Message.edit_live_location:5
|
#: aiogram.types.message.Message.edit_live_location:5
|
||||||
#: aiogram.types.message.Message.edit_media: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"
|
msgid "New text of the message, 1-4096 characters after entities parsing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:12
|
||||||
#: aiogram.types.message.Message.edit_caption:11
|
#: aiogram.types.message.Message.edit_caption:11
|
||||||
#: aiogram.types.message.Message.edit_live_location:13
|
#: aiogram.types.message.Message.edit_live_location:13
|
||||||
#: aiogram.types.message.Message.edit_media:12
|
#: aiogram.types.message.Message.edit_media:12
|
||||||
|
|
@ -2149,6 +2154,7 @@ msgid ""
|
||||||
":class:`aiogram.methods.edit_message_media.EditMessageMedia`"
|
":class:`aiogram.methods.edit_message_media.EditMessageMedia`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:1
|
||||||
#: aiogram.types.message.Message.edit_reply_markup:1 of
|
#: aiogram.types.message.Message.edit_reply_markup:1 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"Shortcut for method "
|
"Shortcut for method "
|
||||||
|
|
@ -2156,6 +2162,7 @@ msgid ""
|
||||||
" will automatically fill method attributes:"
|
" will automatically fill method attributes:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:8
|
||||||
#: aiogram.types.message.Message.edit_reply_markup:7 of
|
#: aiogram.types.message.Message.edit_reply_markup:7 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"Use this method to edit only the reply markup of messages. On success, if"
|
"Use this method to edit only the reply markup of messages. On success, if"
|
||||||
|
|
@ -2164,16 +2171,22 @@ msgid ""
|
||||||
":code:`True` is returned."
|
":code:`True` is returned."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:10
|
||||||
#: aiogram.types.message.Message.edit_reply_markup:9 of
|
#: aiogram.types.message.Message.edit_reply_markup:9 of
|
||||||
msgid "Source: https://core.telegram.org/bots/api#editmessagereplymarkup"
|
msgid "Source: https://core.telegram.org/bots/api#editmessagereplymarkup"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:13
|
||||||
#: aiogram.types.message.Message.edit_reply_markup:13 of
|
#: aiogram.types.message.Message.edit_reply_markup:13 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"instance of method "
|
"instance of method "
|
||||||
":class:`aiogram.methods.edit_message_reply_markup.EditMessageReplyMarkup`"
|
":class:`aiogram.methods.edit_message_reply_markup.EditMessageReplyMarkup`"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.message.Message.delete_reply_markup:6 of
|
||||||
|
msgid ":code:`reply_markup`"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: aiogram.types.message.Message.edit_live_location:1 of
|
#: aiogram.types.message.Message.edit_live_location:1 of
|
||||||
msgid ""
|
msgid ""
|
||||||
"Shortcut for method "
|
"Shortcut for method "
|
||||||
|
|
@ -2562,3 +2575,13 @@ msgstr ""
|
||||||
#~ "/form-data. :ref:`More information on "
|
#~ "/form-data. :ref:`More information on "
|
||||||
#~ "Sending Files » <sending-files>`"
|
#~ "Sending Files » <sending-files>`"
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/types/pre_checkout_query.rst:3
|
||||||
msgid "PreCheckoutQuery"
|
msgid "PreCheckoutQuery"
|
||||||
|
|
@ -71,10 +71,58 @@ msgstr ""
|
||||||
msgid "*Optional*. Order information provided by the user"
|
msgid "*Optional*. Order information provided by the user"
|
||||||
msgstr ""
|
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
|
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer of
|
||||||
msgid "Parameters"
|
msgid "Parameters"
|
||||||
msgstr ""
|
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
|
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer of
|
||||||
msgid "Returns"
|
msgid "Returns"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: aiogram.types.pre_checkout_query.PreCheckoutQuery.answer:12 of
|
||||||
|
msgid ""
|
||||||
|
"instance of method "
|
||||||
|
":class:`aiogram.methods.answer_pre_checkout_query.AnswerPreCheckoutQuery`"
|
||||||
|
msgstr ""
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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
|
#: ../../api/types/shipping_query.rst:3
|
||||||
msgid "ShippingQuery"
|
msgid "ShippingQuery"
|
||||||
|
|
@ -47,10 +47,61 @@ msgstr ""
|
||||||
msgid "User specified shipping address"
|
msgid "User specified shipping address"
|
||||||
msgstr ""
|
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
|
#: aiogram.types.shipping_query.ShippingQuery.answer of
|
||||||
msgid "Parameters"
|
msgid "Parameters"
|
||||||
msgstr ""
|
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
|
#: aiogram.types.shipping_query.ShippingQuery.answer of
|
||||||
msgid "Returns"
|
msgid "Returns"
|
||||||
msgstr ""
|
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
22
docs/locale/uk_UA/LC_MESSAGES/deployment/index.po
Normal file
22
docs/locale/uk_UA/LC_MESSAGES/deployment/index.po
Normal 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 ""
|
||||||
130
docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/text.po
Normal file
130
docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/text.po
Normal 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 ""
|
||||||
|
|
@ -8,14 +8,14 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram \n"
|
"Project-Id-Version: aiogram \n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.10.3\n"
|
"Generated-By: Babel 2.12.1\n"
|
||||||
|
|
||||||
#: ../../dispatcher/index.rst:3
|
#: ../../dispatcher/index.rst:3
|
||||||
msgid "Handling events"
|
msgid "Handling events"
|
||||||
|
|
@ -54,3 +54,23 @@ msgid ""
|
||||||
"Dispatcher is also separated into two entities - Router and Dispatcher. "
|
"Dispatcher is also separated into two entities - Router and Dispatcher. "
|
||||||
"Dispatcher is subclass of router and should be always is root router."
|
"Dispatcher is subclass of router and should be always is root router."
|
||||||
msgstr ""
|
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 ""
|
||||||
|
|
|
||||||
62
docs/locale/uk_UA/LC_MESSAGES/dispatcher/long_polling.po
Normal file
62
docs/locale/uk_UA/LC_MESSAGES/dispatcher/long_polling.po
Normal 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 ""
|
||||||
303
docs/locale/uk_UA/LC_MESSAGES/dispatcher/webhook.po
Normal file
303
docs/locale/uk_UA/LC_MESSAGES/dispatcher/webhook.po
Normal 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 ""
|
||||||
|
|
@ -7,62 +7,110 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: aiogram\n"
|
"Project-Id-Version: aiogram\n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: 2022-10-13 21:54+0300\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
msgid "Keyboard builder"
|
||||||
msgstr "Конструктор клавіатури"
|
msgstr "Конструктор клавіатури"
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:5
|
#: ../../utils/keyboard.rst:6
|
||||||
msgid "Keyboard builder helps to dynamically generate markup."
|
msgid "Keyboard builder helps to dynamically generate markup."
|
||||||
msgstr "Конструктор клавіатури допомагає динамічно генерувати розмітку"
|
msgstr "Конструктор клавіатури допомагає динамічно генерувати розмітку"
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:9
|
#: ../../utils/keyboard.rst:10
|
||||||
msgid ""
|
msgid ""
|
||||||
"Note that if you have static markup, it's best to define it explicitly "
|
"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, "
|
"rather than using builder, but if you have dynamic markup configuration, "
|
||||||
"feel free to use builder as you wish."
|
"feel free to use builder as you wish."
|
||||||
msgstr "Зауважте, що якщо у вас є статична розмітка, найкраще визначити її явно, "
|
msgstr ""
|
||||||
"а не використовувати конструктор, але якщо у вас є конфігурація динамічної розмітки, "
|
"Зауважте, що якщо у вас є статична розмітка, найкраще визначити її явно, "
|
||||||
"сміливо використовуйте конструктор на свій розсуд."
|
"а не використовувати конструктор, але якщо у вас є конфігурація "
|
||||||
|
"динамічної розмітки, сміливо використовуйте конструктор на свій розсуд."
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:14
|
#: ../../utils/keyboard.rst:15
|
||||||
msgid "Usage example"
|
msgid "Usage example"
|
||||||
msgstr "Приклад використання"
|
msgstr "Приклад використання"
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:29
|
#: ../../utils/keyboard.rst:17
|
||||||
msgid "Base builder"
|
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"
|
|
||||||
msgstr ""
|
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
|
#: aiogram.utils.keyboard.KeyboardBuilder.add:1 of
|
||||||
msgid "Add one or many buttons to markup."
|
msgid "Add one or many buttons to markup."
|
||||||
msgstr "Додавання однієї або кількох кнопок до розмітки."
|
msgstr "Додавання однієї або кількох кнопок до розмітки."
|
||||||
|
|
||||||
|
#: aiogram.utils.keyboard.InlineKeyboardBuilder.from_markup
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.add
|
#: aiogram.utils.keyboard.KeyboardBuilder.add
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
|
#: 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"
|
msgid "Parameters"
|
||||||
msgstr "Параметри"
|
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.add
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
|
#: aiogram.utils.keyboard.KeyboardBuilder.adjust
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.export
|
#: aiogram.utils.keyboard.KeyboardBuilder.export
|
||||||
#: aiogram.utils.keyboard.KeyboardBuilder.row
|
#: aiogram.utils.keyboard.KeyboardBuilder.row
|
||||||
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons
|
#: 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"
|
msgid "Returns"
|
||||||
msgstr "Повертає"
|
msgstr "Повертає"
|
||||||
|
|
||||||
|
|
@ -83,10 +131,12 @@ msgstr ""
|
||||||
"передано параметр repeat=True, усі розміри будуть повторюватися, поки є "
|
"передано параметр repeat=True, усі розміри будуть повторюватися, поки є "
|
||||||
"доступні кнопки"
|
"доступні кнопки"
|
||||||
|
|
||||||
|
#: aiogram.utils.keyboard.InlineKeyboardBuilder.buttons:1
|
||||||
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons:1 of
|
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.buttons:1 of
|
||||||
msgid "Get flatten set of all buttons"
|
msgid "Get flatten set of all buttons"
|
||||||
msgstr "Отримання плоского списку усіх кнопок"
|
msgstr "Отримання плоского списку усіх кнопок"
|
||||||
|
|
||||||
|
#: aiogram.utils.keyboard.InlineKeyboardBuilder.copy:1
|
||||||
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy:1 of
|
#: aiogram.utils.keyboard.ReplyKeyboardBuilder.copy:1 of
|
||||||
msgid "Make full copy of current builder with markup"
|
msgid "Make full copy of current builder with markup"
|
||||||
msgstr "Робить повну копію поточного конструктора з розміткою"
|
msgstr "Робить повну копію поточного конструктора з розміткою"
|
||||||
|
|
@ -95,6 +145,11 @@ msgstr "Робить повну копію поточного конструкт
|
||||||
msgid "Export configured markup as list of lists of buttons"
|
msgid "Export configured markup as list of lists of buttons"
|
||||||
msgstr "Експортує налаштовану розмітку як список списків кнопок"
|
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
|
#: aiogram.utils.keyboard.KeyboardBuilder.row:1 of
|
||||||
msgid "Add row to markup"
|
msgid "Add row to markup"
|
||||||
msgstr "Додає рядок у розмітку"
|
msgstr "Додає рядок у розмітку"
|
||||||
|
|
@ -105,32 +160,23 @@ msgstr ""
|
||||||
"Коли передано занадто багато кнопок, вони будуть розділені на багато "
|
"Коли передано занадто багато кнопок, вони будуть розділені на багато "
|
||||||
"рядків"
|
"рядків"
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:35
|
#: ../../utils/keyboard.rst:77
|
||||||
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
|
|
||||||
msgid "Reply Keyboard"
|
msgid "Reply Keyboard"
|
||||||
msgstr "Клавіатура відповідей"
|
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"
|
msgid "Add new button to markup"
|
||||||
msgstr "Додавання нової кнопки до розмітки"
|
msgstr "Додавання нової кнопки до розмітки"
|
||||||
|
|
||||||
#: ../../utils/keyboard.rst:64
|
#: ../../utils/keyboard.rst:90
|
||||||
msgid "Construct an ReplyKeyboardMarkup"
|
msgid "Construct an ReplyKeyboardMarkup"
|
||||||
msgstr "Створення ReplyKeyboardMarkup"
|
msgstr "Створення ReplyKeyboardMarkup"
|
||||||
|
|
||||||
|
#~ msgid "Base builder"
|
||||||
|
#~ msgstr "Базовий конструктор"
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from aiogram import Bot, Dispatcher, Router, types
|
from aiogram import Bot, Dispatcher, Router, types
|
||||||
|
from aiogram.enums import ParseMode
|
||||||
from aiogram.filters import Command
|
from aiogram.filters import Command
|
||||||
from aiogram.types import Message
|
from aiogram.types import Message
|
||||||
|
|
||||||
|
|
@ -12,10 +13,10 @@ TOKEN = "42:TOKEN"
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
@router.message(Command(commands=["start"]))
|
@router.message(Command("start"))
|
||||||
async def command_start_handler(message: Message) -> None:
|
async def command_start_handler(message: Message) -> None:
|
||||||
"""
|
"""
|
||||||
This handler receive messages with `/start` command
|
This handler receives messages with `/start` command
|
||||||
"""
|
"""
|
||||||
# Most event objects have aliases for API methods that can be called in events' context
|
# Most event objects have aliases for API methods that can be called in events' context
|
||||||
# For example if you want to answer to incoming message you can use `message.answer(...)` alias
|
# For example if you want to answer to incoming message you can use `message.answer(...)` alias
|
||||||
|
|
@ -28,12 +29,12 @@ async def command_start_handler(message: Message) -> None:
|
||||||
@router.message()
|
@router.message()
|
||||||
async def echo_handler(message: types.Message) -> None:
|
async def echo_handler(message: types.Message) -> None:
|
||||||
"""
|
"""
|
||||||
Handler will forward received message back to the sender
|
Handler will forward receive a message back to the sender
|
||||||
|
|
||||||
By default, message handler will handle all message types (like text, photo, sticker and etc.)
|
By default, message handler will handle all message types (like a text, photo, sticker etc.)
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# Send copy of the received message
|
# Send a copy of the received message
|
||||||
await message.send_copy(chat_id=message.chat.id)
|
await message.send_copy(chat_id=message.chat.id)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
# But not all the types is supported to be copied so need to handle it
|
# But not all the types is supported to be copied so need to handle it
|
||||||
|
|
@ -47,7 +48,7 @@ async def main() -> None:
|
||||||
dp.include_router(router)
|
dp.include_router(router)
|
||||||
|
|
||||||
# Initialize Bot instance with a default parse mode which will be passed to all API calls
|
# Initialize Bot instance with a default parse mode which will be passed to all API calls
|
||||||
bot = Bot(TOKEN, parse_mode="HTML")
|
bot = Bot(TOKEN, parse_mode=ParseMode.HTML)
|
||||||
# And the run events dispatching
|
# And the run events dispatching
|
||||||
await dp.start_polling(bot)
|
await dp.start_polling(bot)
|
||||||
|
|
||||||
|
|
|
||||||
104
examples/echo_bot_webhook.py
Normal file
104
examples/echo_bot_webhook.py
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
"""
|
||||||
|
This example shows how to use webhook on behind of any reverse proxy (nginx, traefik, ingress etc.)
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from aiohttp import web
|
||||||
|
|
||||||
|
from aiogram import Bot, Dispatcher, Router, types
|
||||||
|
from aiogram.enums import ParseMode
|
||||||
|
from aiogram.filters import Command
|
||||||
|
from aiogram.types import Message
|
||||||
|
from aiogram.webhook.aiohttp_server import SimpleRequestHandler, setup_application
|
||||||
|
|
||||||
|
# Bot token can be obtained via https://t.me/BotFather
|
||||||
|
TOKEN = "42:TOKEN"
|
||||||
|
|
||||||
|
# Webserver settings
|
||||||
|
# bind localhost only to prevent any external access
|
||||||
|
WEB_SERVER_HOST = "127.0.0.1"
|
||||||
|
# Port for incoming request from reverse proxy. Should be any available port
|
||||||
|
WEB_SERVER_PORT = 8080
|
||||||
|
|
||||||
|
# Path to webhook route, on which Telegram will send requests
|
||||||
|
WEBHOOK_PATH = "/webhook"
|
||||||
|
# Secret key to validate requests from Telegram (optional)
|
||||||
|
WEBHOOK_SECRET = "my-secret"
|
||||||
|
# Base URL for webhook will be used to generate webhook URL for Telegram,
|
||||||
|
# in this example it is used public DNS with HTTPS support
|
||||||
|
BASE_WEBHOOK_URL = "https://aiogram.dev/"
|
||||||
|
|
||||||
|
# All handlers should be attached to the Router (or Dispatcher)
|
||||||
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
|
@router.message(Command(commands=["start"]))
|
||||||
|
async def command_start_handler(message: Message) -> None:
|
||||||
|
"""
|
||||||
|
This handler receives messages with `/start` command
|
||||||
|
"""
|
||||||
|
# Most event objects have aliases for API methods that can be called in events' context
|
||||||
|
# For example if you want to answer to incoming message you can use `message.answer(...)` alias
|
||||||
|
# and the target chat will be passed to :ref:`aiogram.methods.send_message.SendMessage`
|
||||||
|
# method automatically or call API method directly via
|
||||||
|
# Bot instance: `bot.send_message(chat_id=message.chat.id, ...)`
|
||||||
|
await message.answer(f"Hello, <b>{message.from_user.full_name}!</b>")
|
||||||
|
|
||||||
|
|
||||||
|
@router.message()
|
||||||
|
async def echo_handler(message: types.Message) -> None:
|
||||||
|
"""
|
||||||
|
Handler will forward receive a message back to the sender
|
||||||
|
|
||||||
|
By default, message handler will handle all message types (like text, photo, sticker etc.)
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# Send a copy of the received message
|
||||||
|
await message.send_copy(chat_id=message.chat.id)
|
||||||
|
except TypeError:
|
||||||
|
# But not all the types is supported to be copied so need to handle it
|
||||||
|
await message.answer("Nice try!")
|
||||||
|
|
||||||
|
|
||||||
|
async def on_startup(bot: Bot) -> None:
|
||||||
|
# If you have a self-signed SSL certificate, then you will need to send a public
|
||||||
|
# certificate to Telegram
|
||||||
|
await bot.set_webhook(f"{BASE_WEBHOOK_URL}{WEBHOOK_PATH}")
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
# Dispatcher is a root router
|
||||||
|
dp = Dispatcher()
|
||||||
|
# ... and all other routers should be attached to Dispatcher
|
||||||
|
dp.include_router(router)
|
||||||
|
|
||||||
|
# Register startup hook to initialize webhook
|
||||||
|
dp.startup.register(on_startup)
|
||||||
|
|
||||||
|
# Initialize Bot instance with a default parse mode which will be passed to all API calls
|
||||||
|
bot = Bot(TOKEN, parse_mode=ParseMode.HTML)
|
||||||
|
|
||||||
|
# Create aiohttp.web.Application instance
|
||||||
|
app = web.Application()
|
||||||
|
|
||||||
|
# Create an instance of request handler,
|
||||||
|
# aiogram has few implementations for different cases of usage
|
||||||
|
# In this example we use SimpleRequestHandler which is designed to handle simple cases
|
||||||
|
webhook_requests_handler = SimpleRequestHandler(
|
||||||
|
dispatcher=dp,
|
||||||
|
bot=bot,
|
||||||
|
secret_token=WEBHOOK_SECRET,
|
||||||
|
)
|
||||||
|
# Register webhook handler on application
|
||||||
|
webhook_requests_handler.register(app, path=WEBHOOK_PATH)
|
||||||
|
|
||||||
|
# Mount dispatcher startup and shutdown hooks to aiohttp application
|
||||||
|
setup_application(app, dp, bot=bot)
|
||||||
|
|
||||||
|
# And finally start webserver
|
||||||
|
web.run_app(app, host=WEB_SERVER_HOST, port=WEB_SERVER_PORT)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
main()
|
||||||
118
examples/echo_bot_webhook_ssl.py
Normal file
118
examples/echo_bot_webhook_ssl.py
Normal file
|
|
@ -0,0 +1,118 @@
|
||||||
|
"""
|
||||||
|
This example shows how to use webhook with SSL certificate.
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
import ssl
|
||||||
|
|
||||||
|
from aiohttp import web
|
||||||
|
|
||||||
|
from aiogram import Bot, Dispatcher, Router, types
|
||||||
|
from aiogram.enums import ParseMode
|
||||||
|
from aiogram.filters import Command
|
||||||
|
from aiogram.types import FSInputFile, Message
|
||||||
|
from aiogram.webhook.aiohttp_server import SimpleRequestHandler, setup_application
|
||||||
|
|
||||||
|
# Bot token can be obtained via https://t.me/BotFather
|
||||||
|
TOKEN = "42:TOKEN"
|
||||||
|
|
||||||
|
# Webserver settings
|
||||||
|
# bind localhost only to prevent any external access
|
||||||
|
WEB_SERVER_HOST = "127.0.0.1"
|
||||||
|
# Port for incoming request from reverse proxy. Should be any available port
|
||||||
|
WEB_SERVER_PORT = 8080
|
||||||
|
|
||||||
|
# Path to webhook route, on which Telegram will send requests
|
||||||
|
WEBHOOK_PATH = "/webhook"
|
||||||
|
# Secret key to validate requests from Telegram (optional)
|
||||||
|
WEBHOOK_SECRET = "my-secret"
|
||||||
|
# Base URL for webhook will be used to generate webhook URL for Telegram,
|
||||||
|
# in this example it is used public address with TLS support
|
||||||
|
BASE_WEBHOOK_URL = "https://aiogram.dev"
|
||||||
|
|
||||||
|
# Path to SSL certificate and private key for self-signed certificate.
|
||||||
|
WEBHOOK_SSL_CERT = "/path/to/cert.pem"
|
||||||
|
WEBHOOK_SSL_PRIV = "/path/to/private.key"
|
||||||
|
|
||||||
|
# All handlers should be attached to the Router (or Dispatcher)
|
||||||
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
|
@router.message(Command("start"))
|
||||||
|
async def command_start_handler(message: Message) -> None:
|
||||||
|
"""
|
||||||
|
This handler receives messages with `/start` command
|
||||||
|
"""
|
||||||
|
# Most event objects have aliases for API methods that can be called in events' context
|
||||||
|
# For example if you want to answer to incoming message you can use `message.answer(...)` alias
|
||||||
|
# and the target chat will be passed to :ref:`aiogram.methods.send_message.SendMessage`
|
||||||
|
# method automatically or call API method directly via
|
||||||
|
# Bot instance: `bot.send_message(chat_id=message.chat.id, ...)`
|
||||||
|
await message.answer(f"Hello, <b>{message.from_user.full_name}!</b>")
|
||||||
|
|
||||||
|
|
||||||
|
@router.message()
|
||||||
|
async def echo_handler(message: types.Message) -> None:
|
||||||
|
"""
|
||||||
|
Handler will forward receive a message back to the sender
|
||||||
|
|
||||||
|
By default, message handler will handle all message types (like text, photo, sticker etc.)
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# Send a copy of the received message
|
||||||
|
await message.send_copy(chat_id=message.chat.id)
|
||||||
|
except TypeError:
|
||||||
|
# But not all the types is supported to be copied so need to handle it
|
||||||
|
await message.answer("Nice try!")
|
||||||
|
|
||||||
|
|
||||||
|
async def on_startup(bot: Bot) -> None:
|
||||||
|
# In case when you have a self-signed SSL certificate, you need to send the certificate
|
||||||
|
# itself to Telegram servers for validation purposes
|
||||||
|
# (see https://core.telegram.org/bots/self-signed)
|
||||||
|
# But if you have a valid SSL certificate, you SHOULD NOT send it to Telegram servers.
|
||||||
|
await bot.set_webhook(
|
||||||
|
f"{BASE_WEBHOOK_URL}{WEBHOOK_PATH}",
|
||||||
|
certificate=FSInputFile(WEBHOOK_SSL_CERT),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
# Dispatcher is a root router
|
||||||
|
dp = Dispatcher()
|
||||||
|
# ... and all other routers should be attached to Dispatcher
|
||||||
|
dp.include_router(router)
|
||||||
|
|
||||||
|
# Register startup hook to initialize webhook
|
||||||
|
dp.startup.register(on_startup)
|
||||||
|
|
||||||
|
# Initialize Bot instance with a default parse mode which will be passed to all API calls
|
||||||
|
bot = Bot(TOKEN, parse_mode=ParseMode.HTML)
|
||||||
|
|
||||||
|
# Create aiohttp.web.Application instance
|
||||||
|
app = web.Application()
|
||||||
|
|
||||||
|
# Create an instance of request handler,
|
||||||
|
# aiogram has few implementations for different cases of usage
|
||||||
|
# In this example we use SimpleRequestHandler which is designed to handle simple cases
|
||||||
|
webhook_requests_handler = SimpleRequestHandler(
|
||||||
|
dispatcher=dp,
|
||||||
|
bot=bot,
|
||||||
|
secret_token=WEBHOOK_SECRET,
|
||||||
|
)
|
||||||
|
# Register webhook handler on application
|
||||||
|
webhook_requests_handler.register(app, path=WEBHOOK_PATH)
|
||||||
|
|
||||||
|
# Mount dispatcher startup and shutdown hooks to aiohttp application
|
||||||
|
setup_application(app, dp, bot=bot)
|
||||||
|
|
||||||
|
# Generate SSL context
|
||||||
|
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
|
||||||
|
context.load_cert_chain(WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV)
|
||||||
|
|
||||||
|
# And finally start webserver
|
||||||
|
web.run_app(app, host=WEB_SERVER_HOST, port=WEB_SERVER_PORT, ssl_context=context)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
main()
|
||||||
|
|
@ -39,7 +39,7 @@ def is_bot_token(value: str) -> Union[bool, Dict[str, Any]]:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@main_router.message(Command(commands=["add"], magic=F.args.func(is_bot_token)))
|
@main_router.message(Command("add", magic=F.args.func(is_bot_token)))
|
||||||
async def command_add_bot(message: Message, command: CommandObject, bot: Bot) -> Any:
|
async def command_add_bot(message: Message, command: CommandObject, bot: Bot) -> Any:
|
||||||
new_bot = Bot(token=command.args, session=bot.session)
|
new_bot = Bot(token=command.args, session=bot.session)
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,10 @@ logging.basicConfig(level=logging.INFO)
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
@router.message(Command(commands=["start"]))
|
@router.message(Command("start"))
|
||||||
async def command_start_handler(message: Message) -> None:
|
async def command_start_handler(message: Message) -> None:
|
||||||
"""
|
"""
|
||||||
This handler receive messages with `/start` command
|
This handler receives messages with `/start` command
|
||||||
"""
|
"""
|
||||||
|
|
||||||
await message.answer(
|
await message.answer(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue