mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-12 10:11:52 +00:00
Add class helper ChatAction (#803)
* Add class helper ChatAction * Change using helper to using enum.Enum * Add test for class ChatAction * Use black formatting * Add pull request description to CHANGES * Add test coverage * Use AutoName class for enum values * Move `AutoName` to separate file * Move inheritance from `str` * Fix failing mypy * Delete old actions Co-authored-by: Evgen Fil <evgfilim1@yandex.ru>
This commit is contained in:
parent
bc5b26de5f
commit
851f7a2a37
5 changed files with 56 additions and 0 deletions
3
CHANGES/803.feature
Normal file
3
CHANGES/803.feature
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
Add class helper ChatAction for constants that Telegram BotAPI uses in sendChatAction request.
|
||||||
|
In my opinion, this will help users and will also improve compatibility with 2.x version
|
||||||
|
where similar class was called "ChatActions".
|
||||||
|
|
@ -13,6 +13,7 @@ from .bot_command_scope_default import BotCommandScopeDefault
|
||||||
from .callback_game import CallbackGame
|
from .callback_game import CallbackGame
|
||||||
from .callback_query import CallbackQuery
|
from .callback_query import CallbackQuery
|
||||||
from .chat import Chat
|
from .chat import Chat
|
||||||
|
from .chat_action import ChatAction
|
||||||
from .chat_administrator_rights import ChatAdministratorRights
|
from .chat_administrator_rights import ChatAdministratorRights
|
||||||
from .chat_invite_link import ChatInviteLink
|
from .chat_invite_link import ChatInviteLink
|
||||||
from .chat_join_request import ChatJoinRequest
|
from .chat_join_request import ChatJoinRequest
|
||||||
|
|
@ -275,6 +276,7 @@ __all__ = (
|
||||||
"Game",
|
"Game",
|
||||||
"CallbackGame",
|
"CallbackGame",
|
||||||
"GameHighScore",
|
"GameHighScore",
|
||||||
|
"ChatAction",
|
||||||
)
|
)
|
||||||
|
|
||||||
# Load typing forward refs for every TelegramObject
|
# Load typing forward refs for every TelegramObject
|
||||||
|
|
|
||||||
33
aiogram/types/chat_action.py
Normal file
33
aiogram/types/chat_action.py
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
import enum
|
||||||
|
|
||||||
|
from ..utils.enum import AutoName
|
||||||
|
|
||||||
|
|
||||||
|
class ChatAction(AutoName):
|
||||||
|
"""
|
||||||
|
This object represents bot actions.
|
||||||
|
|
||||||
|
Choose one, depending on what the user is about to receive:
|
||||||
|
• typing for text messages,
|
||||||
|
• upload_photo for photos,
|
||||||
|
• record_video or upload_video for videos,
|
||||||
|
• record_voice or upload_voice for voice notes,
|
||||||
|
• upload_document for general files,
|
||||||
|
• choose_sticker for stickers,
|
||||||
|
• find_location for location data,
|
||||||
|
• record_video_note or upload_video_note for video notes.
|
||||||
|
|
||||||
|
Source: https://core.telegram.org/bots/api#sendchataction
|
||||||
|
"""
|
||||||
|
|
||||||
|
TYPING = enum.auto()
|
||||||
|
UPLOAD_PHOTO = enum.auto()
|
||||||
|
RECORD_VIDEO = enum.auto()
|
||||||
|
UPLOAD_VIDEO = enum.auto()
|
||||||
|
RECORD_VOICE = enum.auto()
|
||||||
|
UPLOAD_VOICE = enum.auto()
|
||||||
|
UPLOAD_DOCUMENT = enum.auto()
|
||||||
|
CHOOSE_STICKER = enum.auto()
|
||||||
|
FIND_LOCATION = enum.auto()
|
||||||
|
RECORD_VIDEO_NOTE = enum.auto()
|
||||||
|
UPLOAD_VIDEO_NOTE = enum.auto()
|
||||||
8
aiogram/utils/enum.py
Normal file
8
aiogram/utils/enum.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
import enum
|
||||||
|
from typing import Any, List
|
||||||
|
|
||||||
|
|
||||||
|
class AutoName(str, enum.Enum):
|
||||||
|
@staticmethod
|
||||||
|
def _generate_next_value_(name: str, start: int, count: int, last_values: List[Any]) -> str:
|
||||||
|
return name.lower()
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from aiogram.methods import Request, SendChatAction
|
from aiogram.methods import Request, SendChatAction
|
||||||
|
from aiogram.types import ChatAction
|
||||||
from tests.mocked_bot import MockedBot
|
from tests.mocked_bot import MockedBot
|
||||||
|
|
||||||
pytestmark = pytest.mark.asyncio
|
pytestmark = pytest.mark.asyncio
|
||||||
|
|
@ -22,3 +23,12 @@ class TestSendChatAction:
|
||||||
request: Request = bot.get_request()
|
request: Request = bot.get_request()
|
||||||
assert request.method == "sendChatAction"
|
assert request.method == "sendChatAction"
|
||||||
assert response == prepare_result.result
|
assert response == prepare_result.result
|
||||||
|
|
||||||
|
async def test_chat_action_class(self, bot: MockedBot):
|
||||||
|
prepare_result = bot.add_result_for(SendChatAction, ok=True, result=True)
|
||||||
|
|
||||||
|
response: bool = await bot.send_chat_action(chat_id=42, action=ChatAction.TYPING)
|
||||||
|
request: Request = bot.get_request()
|
||||||
|
assert request.method == "sendChatAction"
|
||||||
|
assert request.data["action"] == "typing"
|
||||||
|
assert response == prepare_result.result
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue