diff --git a/pyrogram/client/methods/messages/__init__.py b/pyrogram/client/methods/messages/__init__.py
index dde50b7b..d26c51cc 100644
--- a/pyrogram/client/methods/messages/__init__.py
+++ b/pyrogram/client/methods/messages/__init__.py
@@ -16,7 +16,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see .
-from .close_poll import ClosePoll
+from .stop_poll import StopPoll
from .delete_messages import DeleteMessages
from .download_media import DownloadMedia
from .edit_message_caption import EditMessageCaption
@@ -72,7 +72,7 @@ class Messages(
SendVoice,
SendPoll,
VotePoll,
- ClosePoll,
+ StopPoll,
RetractVote,
DownloadMedia,
IterHistory,
diff --git a/pyrogram/client/methods/messages/retract_vote.py b/pyrogram/client/methods/messages/retract_vote.py
index 8fa8996c..ce8a0140 100644
--- a/pyrogram/client/methods/messages/retract_vote.py
+++ b/pyrogram/client/methods/messages/retract_vote.py
@@ -18,6 +18,7 @@
from typing import Union
+import pyrogram
from pyrogram.api import functions
from pyrogram.client.ext import BaseClient
@@ -26,8 +27,8 @@ class RetractVote(BaseClient):
def retract_vote(
self,
chat_id: Union[int, str],
- message_id: id
- ) -> bool:
+ message_id: int
+ ) -> "pyrogram.Poll":
"""Use this method to retract your vote in a poll.
Args:
@@ -37,15 +38,15 @@ class RetractVote(BaseClient):
For a contact that exists in your Telegram address book you can use his phone number (str).
message_id (``int``):
- Unique poll message identifier inside this chat.
+ Identifier of the original message with the poll.
Returns:
- On success, True is returned.
+ On success, the :obj:`Poll ` with the retracted vote is returned.
Raises:
:class:`RPCError ` in case of a Telegram RPC error.
"""
- self.send(
+ r = self.send(
functions.messages.SendVote(
peer=self.resolve_peer(chat_id),
msg_id=message_id,
@@ -53,4 +54,4 @@ class RetractVote(BaseClient):
)
)
- return True
+ return pyrogram.Poll._parse(self, r.updates[0])
diff --git a/pyrogram/client/methods/messages/send_poll.py b/pyrogram/client/methods/messages/send_poll.py
index 13e55b08..6b4e227a 100644
--- a/pyrogram/client/methods/messages/send_poll.py
+++ b/pyrogram/client/methods/messages/send_poll.py
@@ -47,10 +47,10 @@ class SendPoll(BaseClient):
For a contact that exists in your Telegram address book you can use his phone number (str).
question (``str``):
- The poll question, as string.
+ Poll question, 1-255 characters.
options (List of ``str``):
- The poll options, as list of strings (2 to 10 options are allowed).
+ List of answer options, 2-10 strings 1-100 characters each.
disable_notification (``bool``, *optional*):
Sends the message silently.
diff --git a/pyrogram/client/methods/messages/close_poll.py b/pyrogram/client/methods/messages/stop_poll.py
similarity index 71%
rename from pyrogram/client/methods/messages/close_poll.py
rename to pyrogram/client/methods/messages/stop_poll.py
index 1b1164c2..a5a4ecc8 100644
--- a/pyrogram/client/methods/messages/close_poll.py
+++ b/pyrogram/client/methods/messages/stop_poll.py
@@ -18,19 +18,21 @@
from typing import Union
+import pyrogram
from pyrogram.api import functions, types
from pyrogram.client.ext import BaseClient
-class ClosePoll(BaseClient):
- def close_poll(
+class StopPoll(BaseClient):
+ def stop_poll(
self,
chat_id: Union[int, str],
- message_id: id
- ) -> bool:
- """Use this method to close (stop) a poll.
+ message_id: int,
+ reply_markup: "pyrogram.InlineKeyboardMarkup" = None
+ ) -> "pyrogram.Poll":
+ """Use this method to stop a poll which was sent by you.
- Closed polls can't be reopened and nobody will be able to vote in it anymore.
+ Stopped polls can't be reopened and nobody will be able to vote in it anymore.
Args:
chat_id (``int`` | ``str``):
@@ -39,17 +41,20 @@ class ClosePoll(BaseClient):
For a contact that exists in your Telegram address book you can use his phone number (str).
message_id (``int``):
- Unique poll message identifier inside this chat.
+ Identifier of the original message with the poll.
+
+ reply_markup (:obj:`InlineKeyboardMarkup`, *optional*):
+ An InlineKeyboardMarkup object.
Returns:
- On success, True is returned.
+ On success, the stopped :obj:`Poll ` with the final results is returned.
Raises:
:class:`RPCError ` in case of a Telegram RPC error.
"""
poll = self.get_messages(chat_id, message_id).poll
- self.send(
+ r = self.send(
functions.messages.EditMessage(
peer=self.resolve_peer(chat_id),
id=message_id,
@@ -60,8 +65,9 @@ class ClosePoll(BaseClient):
question="",
answers=[]
)
- )
+ ),
+ reply_markup=reply_markup.write() if reply_markup else None
)
)
- return True
+ return pyrogram.Poll._parse(self, r.updates[0])
diff --git a/pyrogram/client/methods/messages/vote_poll.py b/pyrogram/client/methods/messages/vote_poll.py
index 2a9de874..58f21a6c 100644
--- a/pyrogram/client/methods/messages/vote_poll.py
+++ b/pyrogram/client/methods/messages/vote_poll.py
@@ -18,6 +18,7 @@
from typing import Union
+import pyrogram
from pyrogram.api import functions
from pyrogram.client.ext import BaseClient
@@ -28,7 +29,7 @@ class VotePoll(BaseClient):
chat_id: Union[int, str],
message_id: id,
option: int
- ) -> bool:
+ ) -> "pyrogram.Poll":
"""Use this method to vote a poll.
Args:
@@ -38,25 +39,26 @@ class VotePoll(BaseClient):
For a contact that exists in your Telegram address book you can use his phone number (str).
message_id (``int``):
- Unique poll message identifier inside this chat.
+ Identifier of the original message with the poll.
option (``int``):
Index of the poll option you want to vote for (0 to 9).
Returns:
- On success, True is returned.
+ On success, the :obj:`Poll ` with the chosen option is returned.
Raises:
:class:`RPCError ` in case of a Telegram RPC error.
"""
+
poll = self.get_messages(chat_id, message_id).poll
- self.send(
+ r = self.send(
functions.messages.SendVote(
peer=self.resolve_peer(chat_id),
msg_id=message_id,
- options=[poll.options[option].data]
+ options=[poll.options[option]._data]
)
)
- return True
+ return pyrogram.Poll._parse(self, r.updates[0])
diff --git a/pyrogram/client/types/messages_and_media/poll.py b/pyrogram/client/types/messages_and_media/poll.py
index 68667334..dfe7daa9 100644
--- a/pyrogram/client/types/messages_and_media/poll.py
+++ b/pyrogram/client/types/messages_and_media/poll.py
@@ -29,78 +29,80 @@ class Poll(PyrogramType):
Args:
id (``int``):
- The poll id in this chat.
-
- closed (``bool``):
- Whether the poll is closed or not.
+ Unique poll identifier.
question (``str``):
- Poll question.
+ Poll question, 1-255 characters.
options (List of :obj:`PollOption`):
- The available poll options.
+ List of poll options.
+
+ is_closed (``bool``):
+ True, if the poll is closed.
total_voters (``int``):
- Total amount of voters for this poll.
+ Total count of voters for this poll.
- option_chosen (``int``, *optional*):
- The index of your chosen option (in case you voted already), None otherwise.
+ chosen_option (``int``, *optional*):
+ Index of your chosen option (0-9), None in case you haven't voted yet.
"""
- __slots__ = ["id", "closed", "question", "options", "total_voters", "option_chosen"]
+ __slots__ = ["id", "question", "options", "is_closed", "total_voters", "chosen_option"]
def __init__(
self,
*,
client: "pyrogram.client.ext.BaseClient",
id: int,
- closed: bool,
question: str,
options: List[PollOption],
+ is_closed: bool,
total_voters: int,
- option_chosen: int = None
+ chosen_option: int = None
):
super().__init__(client)
self.id = id
- self.closed = closed
self.question = question
self.options = options
+ self.is_closed = is_closed
self.total_voters = total_voters
- self.option_chosen = option_chosen
+ self.chosen_option = chosen_option
@staticmethod
def _parse(client, media_poll: types.MessageMediaPoll) -> "Poll":
poll = media_poll.poll
results = media_poll.results.results
total_voters = media_poll.results.total_voters
- option_chosen = None
+ chosen_option = None
options = []
for i, answer in enumerate(poll.answers):
- voters = 0
+ voter_count = 0
if results:
result = results[i]
- voters = result.voters
+ voter_count = result.voters
if result.chosen:
- option_chosen = i
+ chosen_option = i
- options.append(PollOption(
- text=answer.text,
- voters=voters,
- data=answer.option,
- client=client
- ))
+ options.append(
+ PollOption(
+ text=answer.text,
+ voter_count=voter_count,
+ data=answer.option,
+ client=client
+ )
+ )
return Poll(
id=poll.id,
- closed=poll.closed,
question=poll.question,
options=options,
+ is_closed=poll.closed,
total_voters=total_voters,
- option_chosen=option_chosen,
+ chosen_option=chosen_option,
client=client
)
diff --git a/pyrogram/client/types/messages_and_media/poll_option.py b/pyrogram/client/types/messages_and_media/poll_option.py
index c45c1db2..4b32623a 100644
--- a/pyrogram/client/types/messages_and_media/poll_option.py
+++ b/pyrogram/client/types/messages_and_media/poll_option.py
@@ -21,32 +21,29 @@ from ..pyrogram_type import PyrogramType
class PollOption(PyrogramType):
- """This object represents a Poll Option.
+ """This object contains information about one answer option in a poll.
Args:
text (``str``):
- Text of the poll option.
+ Option text, 1-100 characters.
- voters (``int``):
- The number of users who voted this option.
- It will be 0 until you vote for the poll.
-
- data (``bytes``):
- Unique data that identifies this option among all the other options in a poll.
+ voter_count (``int``):
+ Number of users that voted for this option.
+ Equals to 0 until you vote.
"""
- __slots__ = ["text", "voters", "data"]
+ __slots__ = ["text", "voter_count", "_data"]
def __init__(
self,
*,
client: "pyrogram.client.ext.BaseClient",
text: str,
- voters: int,
+ voter_count: int,
data: bytes
):
super().__init__(client)
self.text = text
- self.voters = voters
- self.data = data
+ self.voter_count = voter_count
+ self._data = data # Hidden
diff --git a/pyrogram/client/types/pyrogram_type.py b/pyrogram/client/types/pyrogram_type.py
index af828926..5f757d43 100644
--- a/pyrogram/client/types/pyrogram_type.py
+++ b/pyrogram/client/types/pyrogram_type.py
@@ -51,7 +51,7 @@ def default(o: PyrogramType):
return remove_none(
OrderedDict(
[("_", "pyrogram." + o.__class__.__name__)]
- + [i for i in content.items()]
+ + [i for i in content.items() if not i[0].startswith("_")]
)
)
except AttributeError: