diff --git a/docs/source/pyrogram/ChatAction.rst b/docs/source/pyrogram/ChatAction.rst
deleted file mode 100644
index dfa56945..00000000
--- a/docs/source/pyrogram/ChatAction.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-ChatAction
-==========
-
-.. autoclass:: pyrogram.ChatAction
- :members:
diff --git a/docs/source/pyrogram/index.rst b/docs/source/pyrogram/index.rst
index 84471e89..5546070d 100644
--- a/docs/source/pyrogram/index.rst
+++ b/docs/source/pyrogram/index.rst
@@ -14,7 +14,6 @@ after the well established Telegram Bot API methods, thus offering a familiar lo
Handlers
Decorators
Filters
- ChatAction
Errors
diff --git a/pyrogram/client/__init__.py b/pyrogram/client/__init__.py
index 584449c7..f4a954c6 100644
--- a/pyrogram/client/__init__.py
+++ b/pyrogram/client/__init__.py
@@ -17,9 +17,9 @@
# along with Pyrogram. If not, see .
from .client import Client
-from .ext import BaseClient, ChatAction, Emoji
+from .ext import BaseClient, Emoji
from .filters import Filters
__all__ = [
- "Client", "BaseClient", "ChatAction", "Emoji", "Filters",
+ "Client", "BaseClient", "Emoji", "Filters",
]
diff --git a/pyrogram/client/ext/__init__.py b/pyrogram/client/ext/__init__.py
index a8e7c794..917c9e62 100644
--- a/pyrogram/client/ext/__init__.py
+++ b/pyrogram/client/ext/__init__.py
@@ -17,7 +17,6 @@
# along with Pyrogram. If not, see .
from .base_client import BaseClient
-from .chat_action import ChatAction
from .dispatcher import Dispatcher
from .emoji import Emoji
from .syncer import Syncer
diff --git a/pyrogram/client/ext/chat_action.py b/pyrogram/client/ext/chat_action.py
deleted file mode 100644
index c0ee0585..00000000
--- a/pyrogram/client/ext/chat_action.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# Pyrogram - Telegram MTProto API Client Library for Python
-# Copyright (C) 2017-2019 Dan Tès
-#
-# This file is part of Pyrogram.
-#
-# Pyrogram is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Pyrogram is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with Pyrogram. If not, see .
-
-from enum import Enum
-
-from pyrogram.api import types
-
-
-class ChatAction(Enum):
- """This enumeration provides a convenient access to all Chat Actions available.
- Chat Actions are intended to be used with
- :meth:`send_chat_action() `.
- """
-
- CANCEL = types.SendMessageCancelAction
- """Cancels any chat action currently displayed."""
-
- TYPING = types.SendMessageTypingAction
- """User is typing a text message."""
-
- PLAYING = types.SendMessageGamePlayAction
- """User is playing a game."""
-
- CHOOSE_CONTACT = types.SendMessageChooseContactAction
- """User is choosing a contact to share."""
-
- UPLOAD_PHOTO = types.SendMessageUploadPhotoAction
- """User is uploading a photo."""
-
- RECORD_VIDEO = types.SendMessageRecordVideoAction
- """User is recording a video."""
-
- UPLOAD_VIDEO = types.SendMessageUploadVideoAction
- """User is uploading a video."""
-
- RECORD_AUDIO = types.SendMessageRecordAudioAction
- """User is recording an audio message."""
-
- UPLOAD_AUDIO = types.SendMessageUploadAudioAction
- """User is uploading an audio message."""
-
- UPLOAD_DOCUMENT = types.SendMessageUploadDocumentAction
- """User is uploading a generic document."""
-
- FIND_LOCATION = types.SendMessageGeoLocationAction
- """User is searching for a location on the map."""
-
- RECORD_VIDEO_NOTE = types.SendMessageRecordRoundAction
- """User is recording a round video note."""
-
- UPLOAD_VIDEO_NOTE = types.SendMessageUploadRoundAction
- """User is uploading a round video note."""
-
- @staticmethod
- def from_string(action: str) -> "ChatAction":
- for a in ChatAction:
- if a.name.lower() == action.lower():
- return a
-
- raise ValueError("Invalid ChatAction: '{}'. Possible types are {}".format(
- action, [x.name.lower() for x in ChatAction]
- ))
diff --git a/pyrogram/client/methods/messages/send_chat_action.py b/pyrogram/client/methods/messages/send_chat_action.py
index 5c50c2cf..1d819747 100644
--- a/pyrogram/client/methods/messages/send_chat_action.py
+++ b/pyrogram/client/methods/messages/send_chat_action.py
@@ -18,17 +18,32 @@
from typing import Union
-from pyrogram.api import functions
-from pyrogram.client.ext import BaseClient, ChatAction
+from pyrogram.api import functions, types
+from pyrogram.client.ext import BaseClient
+import json
+
+
+class ChatAction:
+ TYPING = types.SendMessageTypingAction
+ UPLOAD_PHOTO = types.SendMessageUploadPhotoAction
+ RECORD_VIDEO = types.SendMessageRecordVideoAction
+ UPLOAD_VIDEO = types.SendMessageUploadVideoAction
+ RECORD_AUDIO = types.SendMessageRecordAudioAction
+ UPLOAD_AUDIO = types.SendMessageUploadAudioAction
+ UPLOAD_DOCUMENT = types.SendMessageUploadDocumentAction
+ FIND_LOCATION = types.SendMessageGeoLocationAction
+ RECORD_VIDEO_NOTE = types.SendMessageRecordRoundAction
+ UPLOAD_VIDEO_NOTE = types.SendMessageUploadRoundAction
+ PLAYING = types.SendMessageGamePlayAction
+ CHOOSE_CONTACT = types.SendMessageChooseContactAction
+ CANCEL = types.SendMessageCancelAction
+
+
+POSSIBLE_VALUES = list(map(lambda x: x.lower(), filter(lambda x: not x.startswith("__"), ChatAction.__dict__.keys())))
class SendChatAction(BaseClient):
- def send_chat_action(
- self,
- chat_id: Union[int, str],
- action: Union[ChatAction, str],
- progress: int = 0
- ):
+ def send_chat_action(self, chat_id: Union[int, str], action: str) -> bool:
"""Use this method when you need to tell the other party that something is happening on your side.
Parameters:
@@ -37,15 +52,13 @@ class SendChatAction(BaseClient):
For your personal cloud (Saved Messages) you can simply use "me" or "self".
For a contact that exists in your Telegram address book you can use his phone number (str).
- action (:obj:`ChatAction` | ``str``):
- Type of action to broadcast.
- Choose one from the :class:`ChatAction` enumeration,
- depending on what the user is about to receive.
- You can also provide a string (e.g. "typing", "upload_photo", "record_audio", ...).
-
- progress (``int``, *optional*):
- Progress of the upload process.
- Currently useless because official clients don't seem to be handling this.
+ action (``str``):
+ Type of action to broadcast. 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_audio"* or *"upload_audio"* for audio files, *"upload_document"* for general files,
+ *"find_location"* for location data, *"record_video_note"* or *"upload_video_note"* for video notes,
+ *"choose_contact"* for contacts, *"playing"* for games or *"cancel"* to cancel any chat action currently
+ displayed.
Returns:
``bool``: On success, True is returned.
@@ -55,14 +68,14 @@ class SendChatAction(BaseClient):
ValueError: In case the provided string is not a valid ChatAction.
"""
- # Resolve Enum type
- if isinstance(action, str):
- action = ChatAction.from_string(action).value
- elif isinstance(action, ChatAction):
- action = action.value
+ try:
+ action = ChatAction.__dict__[action.upper()]
+ except KeyError:
+ raise ValueError("Invalid chat action '{}'. Possible values are: {}".format(
+ action, json.dumps(POSSIBLE_VALUES, indent=4))) from None
if "Upload" in action.__name__:
- action = action(progress=progress)
+ action = action(progress=0)
else:
action = action()
diff --git a/pyrogram/client/types/messages_and_media/message.py b/pyrogram/client/types/messages_and_media/message.py
index 648177d4..05ff94f3 100644
--- a/pyrogram/client/types/messages_and_media/message.py
+++ b/pyrogram/client/types/messages_and_media/message.py
@@ -22,7 +22,6 @@ from typing import List, Match, Union
import pyrogram
from pyrogram.api import types
from pyrogram.errors import MessageIdsEmpty
-from pyrogram.client.ext import ChatAction
from pyrogram.client.types.input_media import InputMedia
from .contact import Contact
from .location import Location
@@ -1077,11 +1076,7 @@ class Message(PyrogramType, Update):
reply_markup=reply_markup
)
- def reply_chat_action(
- self,
- action: Union[ChatAction, str],
- progress: int = 0
- ) -> "Message":
+ def reply_chat_action(self, action: str) -> bool:
"""Bound method *reply_chat_action* of :obj:`Message`.
Use as a shortcut for:
@@ -1099,27 +1094,24 @@ class Message(PyrogramType, Update):
message.reply_chat_action("typing")
Parameters:
- action (:obj:`ChatAction ` | ``str``):
- Type of action to broadcast.
- Choose one from the :class:`ChatAction ` enumeration,
- depending on what the user is about to receive.
- You can also provide a string (e.g. "typing", "upload_photo", "record_audio", ...).
-
- progress (``int``, *optional*):
- Progress of the upload process.
- Currently useless because official clients don't seem to be handling this.
+ action (``str``):
+ Type of action to broadcast. 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_audio"* or *"upload_audio"* for audio files, *"upload_document"* for general files,
+ *"find_location"* for location data, *"record_video_note"* or *"upload_video_note"* for video notes,
+ *"choose_contact"* for contacts, *"playing"* for games or *"cancel"* to cancel any chat action currently
+ displayed.
Returns:
- On success, True is returned.
+ ``bool``: On success, True is returned.
Raises:
RPCError: In case of a Telegram RPC error.
- ``ValueError`` if the provided string is not a valid ChatAction.
+ ValueError: In case the provided string is not a valid chat action.
"""
return self._client.send_chat_action(
chat_id=self.chat.id,
- action=action,
- progress=progress
+ action=action
)
def reply_contact(