mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-12 10:11:52 +00:00
[3.0] Bot API 5.1 + FSM + Utils (#525)
* Regenerate corresponding to Bot API 5.1 * Added base of FSM. Markup constructor and small refactoring * Fix dependencies * Fix mypy windows error * Move StatesGroup.get_root() from meta to class * Fixed chat and user constraints * Update pipeline * Remove docs pipeline * Added GLOBAL_USER FSM strategy * Reformat code * Fixed Dispatcher._process_update * Bump Bot API 5.2. Added integration with MagicFilter * Coverage
This commit is contained in:
parent
a6f824a117
commit
0e72d8e65b
265 changed files with 2921 additions and 1324 deletions
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return AddStickerToSet(...)
|
||||
return AddStickerToSet(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return AnswerCallbackQuery(...)
|
||||
return AnswerCallbackQuery(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return AnswerInlineQuery(...)
|
||||
return AnswerInlineQuery(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return AnswerPreCheckoutQuery(...)
|
||||
return AnswerPreCheckoutQuery(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return AnswerShippingQuery(...)
|
||||
return AnswerShippingQuery(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return Close(...)
|
||||
return Close(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return CopyMessage(...)
|
||||
return CopyMessage(...)
|
||||
|
|
|
|||
51
docs2/api/methods/create_chat_invite_link.rst
Normal file
51
docs2/api/methods/create_chat_invite_link.rst
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
####################
|
||||
createChatInviteLink
|
||||
####################
|
||||
|
||||
Returns: :obj:`ChatInviteLink`
|
||||
|
||||
.. automodule:: aiogram.methods.create_chat_invite_link
|
||||
:members:
|
||||
:member-order: bysource
|
||||
:undoc-members: True
|
||||
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
As bot method
|
||||
-------------
|
||||
|
||||
.. code-block::
|
||||
|
||||
result: ChatInviteLink = await bot.create_chat_invite_link(...)
|
||||
|
||||
|
||||
Method as object
|
||||
----------------
|
||||
|
||||
Imports:
|
||||
|
||||
- :code:`from aiogram.methods.create_chat_invite_link import CreateChatInviteLink`
|
||||
- alias: :code:`from aiogram.methods import CreateChatInviteLink`
|
||||
|
||||
In handlers with current bot
|
||||
----------------------------
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
result: ChatInviteLink = await CreateChatInviteLink(...)
|
||||
|
||||
With specific bot
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
result: ChatInviteLink = await bot(CreateChatInviteLink(...))
|
||||
|
||||
As reply into Webhook in handler
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
return CreateChatInviteLink(...)
|
||||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return CreateNewStickerSet(...)
|
||||
return CreateNewStickerSet(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return DeleteChatPhoto(...)
|
||||
return DeleteChatPhoto(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return DeleteChatStickerSet(...)
|
||||
return DeleteChatStickerSet(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return DeleteMessage(...)
|
||||
return DeleteMessage(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return DeleteStickerFromSet(...)
|
||||
return DeleteStickerFromSet(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return DeleteWebhook(...)
|
||||
return DeleteWebhook(...)
|
||||
|
|
|
|||
51
docs2/api/methods/edit_chat_invite_link.rst
Normal file
51
docs2/api/methods/edit_chat_invite_link.rst
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
##################
|
||||
editChatInviteLink
|
||||
##################
|
||||
|
||||
Returns: :obj:`ChatInviteLink`
|
||||
|
||||
.. automodule:: aiogram.methods.edit_chat_invite_link
|
||||
:members:
|
||||
:member-order: bysource
|
||||
:undoc-members: True
|
||||
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
As bot method
|
||||
-------------
|
||||
|
||||
.. code-block::
|
||||
|
||||
result: ChatInviteLink = await bot.edit_chat_invite_link(...)
|
||||
|
||||
|
||||
Method as object
|
||||
----------------
|
||||
|
||||
Imports:
|
||||
|
||||
- :code:`from aiogram.methods.edit_chat_invite_link import EditChatInviteLink`
|
||||
- alias: :code:`from aiogram.methods import EditChatInviteLink`
|
||||
|
||||
In handlers with current bot
|
||||
----------------------------
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
result: ChatInviteLink = await EditChatInviteLink(...)
|
||||
|
||||
With specific bot
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
result: ChatInviteLink = await bot(EditChatInviteLink(...))
|
||||
|
||||
As reply into Webhook in handler
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
return EditChatInviteLink(...)
|
||||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return EditMessageCaption(...)
|
||||
return EditMessageCaption(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return EditMessageLiveLocation(...)
|
||||
return EditMessageLiveLocation(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return EditMessageMedia(...)
|
||||
return EditMessageMedia(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return EditMessageReplyMarkup(...)
|
||||
return EditMessageReplyMarkup(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return EditMessageText(...)
|
||||
return EditMessageText(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return ExportChatInviteLink(...)
|
||||
return ExportChatInviteLink(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return ForwardMessage(...)
|
||||
return ForwardMessage(...)
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: Chat = await bot(GetChat(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: List[ChatMember] = await bot(GetChatAdministrators(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: ChatMember = await bot(GetChatMember(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: int = await bot(GetChatMembersCount(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: File = await bot(GetFile(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: List[GameHighScore] = await bot(GetGameHighScores(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: User = await bot(GetMe(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: List[BotCommand] = await bot(GetMyCommands(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: StickerSet = await bot(GetStickerSet(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: List[Update] = await bot(GetUpdates(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: UserProfilePhotos = await bot(GetUserProfilePhotos(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: WebhookInfo = await bot(GetWebhookInfo(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,9 @@ Available methods
|
|||
set_chat_administrator_custom_title
|
||||
set_chat_permissions
|
||||
export_chat_invite_link
|
||||
create_chat_invite_link
|
||||
edit_chat_invite_link
|
||||
revoke_chat_invite_link
|
||||
set_chat_photo
|
||||
delete_chat_photo
|
||||
set_chat_title
|
||||
|
|
@ -136,4 +139,3 @@ Games
|
|||
send_game
|
||||
set_game_score
|
||||
get_game_high_scores
|
||||
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return KickChatMember(...)
|
||||
return KickChatMember(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return LeaveChat(...)
|
||||
return LeaveChat(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return LogOut(...)
|
||||
return LogOut(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return PinChatMessage(...)
|
||||
return PinChatMessage(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return PromoteChatMember(...)
|
||||
return PromoteChatMember(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return RestrictChatMember(...)
|
||||
return RestrictChatMember(...)
|
||||
|
|
|
|||
51
docs2/api/methods/revoke_chat_invite_link.rst
Normal file
51
docs2/api/methods/revoke_chat_invite_link.rst
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
####################
|
||||
revokeChatInviteLink
|
||||
####################
|
||||
|
||||
Returns: :obj:`ChatInviteLink`
|
||||
|
||||
.. automodule:: aiogram.methods.revoke_chat_invite_link
|
||||
:members:
|
||||
:member-order: bysource
|
||||
:undoc-members: True
|
||||
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
As bot method
|
||||
-------------
|
||||
|
||||
.. code-block::
|
||||
|
||||
result: ChatInviteLink = await bot.revoke_chat_invite_link(...)
|
||||
|
||||
|
||||
Method as object
|
||||
----------------
|
||||
|
||||
Imports:
|
||||
|
||||
- :code:`from aiogram.methods.revoke_chat_invite_link import RevokeChatInviteLink`
|
||||
- alias: :code:`from aiogram.methods import RevokeChatInviteLink`
|
||||
|
||||
In handlers with current bot
|
||||
----------------------------
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
result: ChatInviteLink = await RevokeChatInviteLink(...)
|
||||
|
||||
With specific bot
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
result: ChatInviteLink = await bot(RevokeChatInviteLink(...))
|
||||
|
||||
As reply into Webhook in handler
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
return RevokeChatInviteLink(...)
|
||||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendAnimation(...)
|
||||
return SendAnimation(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendAudio(...)
|
||||
return SendAudio(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendChatAction(...)
|
||||
return SendChatAction(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendContact(...)
|
||||
return SendContact(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendDice(...)
|
||||
return SendDice(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendDocument(...)
|
||||
return SendDocument(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendGame(...)
|
||||
return SendGame(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendInvoice(...)
|
||||
return SendInvoice(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendLocation(...)
|
||||
return SendLocation(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendMediaGroup(...)
|
||||
return SendMediaGroup(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendMessage(...)
|
||||
return SendMessage(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendPhoto(...)
|
||||
return SendPhoto(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendPoll(...)
|
||||
return SendPoll(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendSticker(...)
|
||||
return SendSticker(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendVenue(...)
|
||||
return SendVenue(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendVideo(...)
|
||||
return SendVideo(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendVideoNote(...)
|
||||
return SendVideoNote(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SendVoice(...)
|
||||
return SendVoice(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetChatAdministratorCustomTitle(...)
|
||||
return SetChatAdministratorCustomTitle(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetChatDescription(...)
|
||||
return SetChatDescription(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetChatPermissions(...)
|
||||
return SetChatPermissions(...)
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: bool = await bot(SetChatPhoto(...))
|
||||
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetChatStickerSet(...)
|
||||
return SetChatStickerSet(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetChatTitle(...)
|
||||
return SetChatTitle(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetGameScore(...)
|
||||
return SetGameScore(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetMyCommands(...)
|
||||
return SetMyCommands(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetPassportDataErrors(...)
|
||||
return SetPassportDataErrors(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetStickerPositionInSet(...)
|
||||
return SetStickerPositionInSet(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetStickerSetThumb(...)
|
||||
return SetStickerSetThumb(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return SetWebhook(...)
|
||||
return SetWebhook(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return StopMessageLiveLocation(...)
|
||||
return StopMessageLiveLocation(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return StopPoll(...)
|
||||
return StopPoll(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return UnbanChatMember(...)
|
||||
return UnbanChatMember(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return UnpinAllChatMessages(...)
|
||||
return UnpinAllChatMessages(...)
|
||||
|
|
|
|||
|
|
@ -48,4 +48,4 @@ As reply into Webhook in handler
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
return UnpinChatMessage(...)
|
||||
return UnpinChatMessage(...)
|
||||
|
|
|
|||
|
|
@ -42,4 +42,3 @@ With specific bot
|
|||
.. code-block:: python
|
||||
|
||||
result: File = await bot(UploadStickerFile(...))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue