[3.x] Bot API 6.0 (#890)

* Base implementation

* Bump license

* Revert re-generated tests

* Fix tests, improved docs

* Remove TODO

* Removed unreachable code

* Changed type of `last_synchronization_error_date`

* Fixed wrongly cleaned code
This commit is contained in:
Alex Root Junior 2022-04-19 22:03:24 +03:00 committed by GitHub
parent 286cf39c8a
commit 497436595d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
81 changed files with 1942 additions and 147 deletions

View file

@ -0,0 +1,51 @@
#################
answerWebAppQuery
#################
Returns: :obj:`SentWebAppMessage`
.. automodule:: aiogram.methods.answer_web_app_query
:members:
:member-order: bysource
:undoc-members: True
Usage
=====
As bot method
-------------
.. code-block::
result: SentWebAppMessage = await bot.answer_web_app_query(...)
Method as object
----------------
Imports:
- :code:`from aiogram.methods.answer_web_app_query import AnswerWebAppQuery`
- alias: :code:`from aiogram.methods import AnswerWebAppQuery`
In handlers with current bot
----------------------------
.. code-block:: python
result: SentWebAppMessage = await AnswerWebAppQuery(...)
With specific bot
~~~~~~~~~~~~~~~~~
.. code-block:: python
result: SentWebAppMessage = await bot(AnswerWebAppQuery(...))
As reply into Webhook in handler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
return AnswerWebAppQuery(...)

View file

@ -0,0 +1,44 @@
#################
getChatMenuButton
#################
Returns: :obj:`MenuButton`
.. automodule:: aiogram.methods.get_chat_menu_button
:members:
:member-order: bysource
:undoc-members: True
Usage
=====
As bot method
-------------
.. code-block::
result: MenuButton = await bot.get_chat_menu_button(...)
Method as object
----------------
Imports:
- :code:`from aiogram.methods.get_chat_menu_button import GetChatMenuButton`
- alias: :code:`from aiogram.methods import GetChatMenuButton`
In handlers with current bot
----------------------------
.. code-block:: python
result: MenuButton = await GetChatMenuButton(...)
With specific bot
~~~~~~~~~~~~~~~~~
.. code-block:: python
result: MenuButton = await bot(GetChatMenuButton(...))

View file

@ -0,0 +1,44 @@
###############################
getMyDefaultAdministratorRights
###############################
Returns: :obj:`ChatAdministratorRights`
.. automodule:: aiogram.methods.get_my_default_administrator_rights
:members:
:member-order: bysource
:undoc-members: True
Usage
=====
As bot method
-------------
.. code-block::
result: ChatAdministratorRights = await bot.get_my_default_administrator_rights(...)
Method as object
----------------
Imports:
- :code:`from aiogram.methods.get_my_default_administrator_rights import GetMyDefaultAdministratorRights`
- alias: :code:`from aiogram.methods import GetMyDefaultAdministratorRights`
In handlers with current bot
----------------------------
.. code-block:: python
result: ChatAdministratorRights = await GetMyDefaultAdministratorRights(...)
With specific bot
~~~~~~~~~~~~~~~~~
.. code-block:: python
result: ChatAdministratorRights = await bot(GetMyDefaultAdministratorRights(...))

View file

@ -82,6 +82,10 @@ Available methods
set_my_commands
delete_my_commands
get_my_commands
set_chat_menu_button
get_chat_menu_button
set_my_default_administrator_rights
get_my_default_administrator_rights
Updating messages
=================
@ -118,6 +122,7 @@ Inline mode
:maxdepth: 1
answer_inline_query
answer_web_app_query
Payments
========

View file

@ -0,0 +1,51 @@
#################
setChatMenuButton
#################
Returns: :obj:`bool`
.. automodule:: aiogram.methods.set_chat_menu_button
:members:
:member-order: bysource
:undoc-members: True
Usage
=====
As bot method
-------------
.. code-block::
result: bool = await bot.set_chat_menu_button(...)
Method as object
----------------
Imports:
- :code:`from aiogram.methods.set_chat_menu_button import SetChatMenuButton`
- alias: :code:`from aiogram.methods import SetChatMenuButton`
In handlers with current bot
----------------------------
.. code-block:: python
result: bool = await SetChatMenuButton(...)
With specific bot
~~~~~~~~~~~~~~~~~
.. code-block:: python
result: bool = await bot(SetChatMenuButton(...))
As reply into Webhook in handler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
return SetChatMenuButton(...)

View file

@ -0,0 +1,51 @@
###############################
setMyDefaultAdministratorRights
###############################
Returns: :obj:`bool`
.. automodule:: aiogram.methods.set_my_default_administrator_rights
:members:
:member-order: bysource
:undoc-members: True
Usage
=====
As bot method
-------------
.. code-block::
result: bool = await bot.set_my_default_administrator_rights(...)
Method as object
----------------
Imports:
- :code:`from aiogram.methods.set_my_default_administrator_rights import SetMyDefaultAdministratorRights`
- alias: :code:`from aiogram.methods import SetMyDefaultAdministratorRights`
In handlers with current bot
----------------------------
.. code-block:: python
result: bool = await SetMyDefaultAdministratorRights(...)
With specific bot
~~~~~~~~~~~~~~~~~
.. code-block:: python
result: bool = await bot(SetMyDefaultAdministratorRights(...))
As reply into Webhook in handler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
return SetMyDefaultAdministratorRights(...)

View file

@ -0,0 +1,9 @@
#######################
ChatAdministratorRights
#######################
.. automodule:: aiogram.types.chat_administrator_rights
:members:
:member-order: bysource
:undoc-members: True

View file

@ -40,14 +40,16 @@ Available types
poll
location
venue
web_app_data
proximity_alert_triggered
message_auto_delete_timer_changed
voice_chat_scheduled
voice_chat_started
voice_chat_ended
voice_chat_participants_invited
video_chat_scheduled
video_chat_started
video_chat_ended
video_chat_participants_invited
user_profile_photos
file
web_app_info
reply_keyboard_markup
keyboard_button
keyboard_button_poll_type
@ -59,6 +61,7 @@ Available types
force_reply
chat_photo
chat_invite_link
chat_administrator_rights
chat_member
chat_member_owner
chat_member_administrator
@ -79,6 +82,10 @@ Available types
bot_command_scope_chat
bot_command_scope_chat_administrators
bot_command_scope_chat_member
menu_button
menu_button_commands
menu_button_web_app
menu_button_default
response_parameters
input_media
input_media_photo
@ -135,6 +142,7 @@ Inline mode
input_contact_message_content
input_invoice_message_content
chosen_inline_result
sent_web_app_message
Payments
========

View file

@ -0,0 +1,9 @@
##########
MenuButton
##########
.. automodule:: aiogram.types.menu_button
:members:
:member-order: bysource
:undoc-members: True

View file

@ -1,9 +1,9 @@
##################
VoiceChatScheduled
MenuButtonCommands
##################
.. automodule:: aiogram.types.voice_chat_scheduled
.. automodule:: aiogram.types.menu_button_commands
:members:
:member-order: bysource
:undoc-members: True

View file

@ -0,0 +1,9 @@
#################
MenuButtonDefault
#################
.. automodule:: aiogram.types.menu_button_default
:members:
:member-order: bysource
:undoc-members: True

View file

@ -0,0 +1,9 @@
################
MenuButtonWebApp
################
.. automodule:: aiogram.types.menu_button_web_app
:members:
:member-order: bysource
:undoc-members: True

View file

@ -0,0 +1,9 @@
#################
SentWebAppMessage
#################
.. automodule:: aiogram.types.sent_web_app_message
:members:
:member-order: bysource
:undoc-members: True

View file

@ -1,9 +1,9 @@
##############
VoiceChatEnded
VideoChatEnded
##############
.. automodule:: aiogram.types.voice_chat_ended
.. automodule:: aiogram.types.video_chat_ended
:members:
:member-order: bysource
:undoc-members: True

View file

@ -1,9 +1,9 @@
############################
VoiceChatParticipantsInvited
VideoChatParticipantsInvited
############################
.. automodule:: aiogram.types.voice_chat_participants_invited
.. automodule:: aiogram.types.video_chat_participants_invited
:members:
:member-order: bysource
:undoc-members: True

View file

@ -0,0 +1,9 @@
##################
VideoChatScheduled
##################
.. automodule:: aiogram.types.video_chat_scheduled
:members:
:member-order: bysource
:undoc-members: True

View file

@ -1,9 +1,9 @@
################
VoiceChatStarted
VideoChatStarted
################
.. automodule:: aiogram.types.voice_chat_started
.. automodule:: aiogram.types.video_chat_started
:members:
:member-order: bysource
:undoc-members: True

View file

@ -0,0 +1,9 @@
##########
WebAppData
##########
.. automodule:: aiogram.types.web_app_data
:members:
:member-order: bysource
:undoc-members: True

View file

@ -0,0 +1,9 @@
##########
WebAppInfo
##########
.. automodule:: aiogram.types.web_app_info
:members:
:member-order: bysource
:undoc-members: True

View file

@ -7,3 +7,4 @@ Utils
keyboard
i18n
chat_action
web_app

55
docs/utils/web_app.rst Normal file
View file

@ -0,0 +1,55 @@
======
WebApз
======
Telegram Bot API 6.0 announces a revolution in the development of chatbots using WebApp feature.
You can read more details on it in the official `blog <https://telegram.org/blog/notifications-bots#bot-revolution>`_
and `documentation <https://core.telegram.org/bots/webapps>`_.
`aiogram` implements simple utils to remove headache with the data validation from Telegram WebApp on the backend side.
Usage
=====
For example from frontend you will pass :code:`application/x-www-form-urlencoded` POST request
with :code:`_auth` field in body and wants to return User info inside response as :code:`application/json`
.. code-block:: python
from aiogram.utils.web_app import safe_parse_webapp_init_data
from aiohttp.web_request import Request
from aiohttp.web_response import json_response
async def check_data_handler(request: Request):
bot: Bot = request.app["bot"]
data = await request.post() # application/x-www-form-urlencoded
try:
data = safe_parse_webapp_init_data(token=bot.token, init_data=data["_auth"])
except ValueError:
return json_response({"ok": False, "err": "Unauthorized"}, status=401)
return json_response({"ok": True, "data": data.user.dict()})
Functions
=========
.. autofunction:: aiogram.utils.web_app.check_webapp_signature
.. autofunction:: aiogram.utils.web_app.parse_webapp_init_data
.. autofunction:: aiogram.utils.web_app.safe_parse_webapp_init_data
Types
=====
.. autoclass:: aiogram.utils.web_app.WebAppInitData
:members:
:member-order: bysource
:undoc-members: True
.. autoclass:: aiogram.utils.web_app.WebAppUser
:members:
:member-order: bysource
:undoc-members: True