Skip to content

Commit cfbc529

Browse files
committed
Remove Messages type
1 parent 797de05 commit cfbc529

13 files changed

Lines changed: 100 additions & 221 deletions

File tree

docs/source/api/types.rst

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ Messages & Media
4040
:columns: 5
4141

4242
- :class:`Message`
43-
- :class:`Messages`
4443
- :class:`MessageEntity`
4544
- :class:`Photo`
4645
- :class:`Thumbnail`
@@ -125,7 +124,6 @@ Details
125124

126125
.. Messages & Media
127126
.. autoclass:: Message()
128-
.. autoclass:: Messages()
129127
.. autoclass:: MessageEntity()
130128
.. autoclass:: Photo()
131129
.. autoclass:: Thumbnail()

pyrogram/client/ext/dispatcher.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from collections import OrderedDict
2222
from queue import Queue
2323
from threading import Thread
24+
from . import utils
2425

2526
import pyrogram
2627
from pyrogram.api import types
@@ -68,7 +69,7 @@ def __init__(self, client, workers: int):
6869
lambda upd, usr, cht: (pyrogram.Message._parse(self.client, upd.message, usr, cht), MessageHandler),
6970

7071
Dispatcher.DELETE_MESSAGES_UPDATES:
71-
lambda upd, usr, cht: (pyrogram.Messages._parse_deleted(self.client, upd), DeletedMessagesHandler),
72+
lambda upd, usr, cht: (utils.parse_deleted_messages(self.client, upd), DeletedMessagesHandler),
7273

7374
Dispatcher.CALLBACK_QUERY_UPDATES:
7475
lambda upd, usr, cht: (pyrogram.CallbackQuery._parse(self.client, upd, usr), CallbackQueryHandler),

pyrogram/client/ext/utils.py

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818

1919
import struct
2020
from base64 import b64decode, b64encode
21-
from typing import Union
21+
from typing import Union, List
2222

23+
import pyrogram
2324
from . import BaseClient
2425
from ...api import types
2526

@@ -135,3 +136,58 @@ def get_input_media_from_file_id(
135136
)
136137

137138
raise ValueError("Unknown media type: {}".format(file_id_str))
139+
140+
141+
def parse_messages(client, messages: types.messages.Messages, replies: int = 1) -> List["pyrogram.Message"]:
142+
users = {i.id: i for i in messages.users}
143+
chats = {i.id: i for i in messages.chats}
144+
145+
if not messages.messages:
146+
return pyrogram.List()
147+
148+
parsed_messages = [
149+
pyrogram.Message._parse(client, message, users, chats, replies=0)
150+
for message in messages.messages
151+
]
152+
153+
if replies:
154+
messages_with_replies = {i.id: getattr(i, "reply_to_msg_id", None) for i in messages.messages}
155+
reply_message_ids = [i[0] for i in filter(lambda x: x[1] is not None, messages_with_replies.items())]
156+
157+
if reply_message_ids:
158+
reply_messages = client.get_messages(
159+
parsed_messages[0].chat.id,
160+
reply_to_message_ids=reply_message_ids,
161+
replies=replies - 1
162+
)
163+
164+
for message in parsed_messages:
165+
reply_id = messages_with_replies[message.message_id]
166+
167+
for reply in reply_messages:
168+
if reply.message_id == reply_id:
169+
message.reply_to_message = reply
170+
171+
return pyrogram.List(parsed_messages)
172+
173+
174+
def parse_deleted_messages(client, update) -> List["pyrogram.Message"]:
175+
messages = update.messages
176+
channel_id = getattr(update, "channel_id", None)
177+
178+
parsed_messages = []
179+
180+
for message in messages:
181+
parsed_messages.append(
182+
pyrogram.Message(
183+
message_id=message,
184+
chat=pyrogram.Chat(
185+
id=int("-100" + str(channel_id)),
186+
type="channel",
187+
client=client
188+
) if channel_id is not None else None,
189+
client=client
190+
)
191+
)
192+
193+
return pyrogram.List(parsed_messages)

pyrogram/client/handlers/deleted_messages_handler.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,15 @@
2020

2121

2222
class DeletedMessagesHandler(Handler):
23-
"""The deleted Messages handler class. Used to handle deleted messages coming from any chat
24-
(private, group, channel). It is intended to be used with
25-
:meth:`~Client.add_handler`
23+
"""The deleted messages handler class. Used to handle deleted messages coming from any chat
24+
(private, group, channel). It is intended to be used with :meth:`~Client.add_handler`
2625
2726
For a nicer way to register this handler, have a look at the
2827
:meth:`~Client.on_deleted_messages` decorator.
2928
3029
Parameters:
3130
callback (``callable``):
32-
Pass a function that will be called when one or more Messages have been deleted.
31+
Pass a function that will be called when one or more messages have been deleted.
3332
It takes *(client, messages)* as positional arguments (look at the section below for a detailed description).
3433
3534
filters (:obj:`Filters`):
@@ -40,12 +39,12 @@ class DeletedMessagesHandler(Handler):
4039
client (:obj:`Client`):
4140
The Client itself, useful when you want to call other API methods inside the message handler.
4241
43-
messages (:obj:`Messages`):
44-
The deleted messages.
42+
messages (List of :obj:`Message`):
43+
The deleted messages, as list.
4544
"""
4645

4746
def __init__(self, callback: callable, filters=None):
4847
super().__init__(callback, filters)
4948

5049
def check(self, messages):
51-
return super().check(messages.messages[0])
50+
return super().check(messages[0])

pyrogram/client/methods/messages/forward_messages.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
# You should have received a copy of the GNU Lesser General Public License
1717
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
1818

19-
from typing import Union, Iterable
19+
from typing import Union, Iterable, List
2020

2121
import pyrogram
2222
from pyrogram.api import functions, types
@@ -32,7 +32,7 @@ def forward_messages(
3232
disable_notification: bool = None,
3333
as_copy: bool = False,
3434
remove_caption: bool = False
35-
) -> "pyrogram.Messages":
35+
) -> List["pyrogram.Message"]:
3636
"""Forward messages of any kind.
3737
3838
Parameters:
@@ -64,9 +64,9 @@ def forward_messages(
6464
Defaults to False.
6565
6666
Returns:
67-
:obj:`Message` | :obj:`Messages`: In case *message_ids* was an integer, the single forwarded message is
68-
returned, otherwise, in case *message_ids* was an iterable, the returned value will be an object containing
69-
a list of messages, even if such iterable contained just a single element.
67+
:obj:`Message` | List of :obj:`Message`: In case *message_ids* was an integer, the single forwarded message
68+
is returned, otherwise, in case *message_ids* was an iterable, the returned value will be a list of
69+
messages, even if such iterable contained just a single element.
7070
7171
Raises:
7272
RPCError: In case of a Telegram RPC error.
@@ -79,9 +79,9 @@ def forward_messages(
7979
forwarded_messages = []
8080

8181
for chunk in [message_ids[i:i + 200] for i in range(0, len(message_ids), 200)]:
82-
messages = self.get_messages(chat_id=from_chat_id, message_ids=chunk) # type: pyrogram.Messages
82+
messages = self.get_messages(chat_id=from_chat_id, message_ids=chunk)
8383

84-
for message in messages.messages:
84+
for message in messages:
8585
forwarded_messages.append(
8686
message.forward(
8787
chat_id,
@@ -91,11 +91,7 @@ def forward_messages(
9191
)
9292
)
9393

94-
return pyrogram.Messages(
95-
client=self,
96-
total_count=len(forwarded_messages),
97-
messages=forwarded_messages
98-
) if is_iterable else forwarded_messages[0]
94+
return pyrogram.List(forwarded_messages) if is_iterable else forwarded_messages[0]
9995
else:
10096
r = self.send(
10197
functions.messages.ForwardMessages(
@@ -121,8 +117,4 @@ def forward_messages(
121117
)
122118
)
123119

124-
return pyrogram.Messages(
125-
client=self,
126-
total_count=len(forwarded_messages),
127-
messages=forwarded_messages
128-
) if is_iterable else forwarded_messages[0]
120+
return pyrogram.List(forwarded_messages) if is_iterable else forwarded_messages[0]

pyrogram/client/methods/messages/get_history.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818

1919
import logging
2020
import time
21-
from typing import Union
21+
from typing import Union, List
2222

2323
import pyrogram
2424
from pyrogram.api import functions
25+
from pyrogram.client.ext import utils
2526
from pyrogram.errors import FloodWait
2627
from ...ext import BaseClient
2728

@@ -37,7 +38,7 @@ def get_history(
3738
offset_id: int = 0,
3839
offset_date: int = 0,
3940
reverse: bool = False
40-
) -> "pyrogram.Messages":
41+
) -> List["pyrogram.Message"]:
4142
"""Retrieve a chunk of the history of a chat.
4243
4344
You can get up to 100 messages at once.
@@ -67,15 +68,17 @@ def get_history(
6768
Pass True to retrieve the messages in reversed order (from older to most recent).
6869
6970
Returns:
70-
:obj:`Messages` - On success, an object containing a list of the retrieved messages.
71+
List of :obj:`Message` - On success, a list of the retrieved messages is returned.
7172
7273
Raises:
7374
RPCError: In case of a Telegram RPC error.
7475
"""
7576

77+
offset_id = offset_id or (1 if reverse else 0)
78+
7679
while True:
7780
try:
78-
messages = pyrogram.Messages._parse(
81+
messages = utils.parse_messages(
7982
self,
8083
self.send(
8184
functions.messages.GetHistory(
@@ -97,6 +100,6 @@ def get_history(
97100
break
98101

99102
if reverse:
100-
messages.messages.reverse()
103+
messages.reverse()
101104

102105
return messages

pyrogram/client/methods/messages/get_messages.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818

1919
import logging
2020
import time
21-
from typing import Union, Iterable
21+
from typing import Union, Iterable, List
2222

2323
import pyrogram
2424
from pyrogram.api import functions, types
2525
from pyrogram.errors import FloodWait
26-
from ...ext import BaseClient
26+
from ...ext import BaseClient, utils
2727

2828
log = logging.getLogger(__name__)
2929

@@ -35,7 +35,7 @@ def get_messages(
3535
message_ids: Union[int, Iterable[int]] = None,
3636
reply_to_message_ids: Union[int, Iterable[int]] = None,
3737
replies: int = 1
38-
) -> Union["pyrogram.Message", "pyrogram.Messages"]:
38+
) -> Union["pyrogram.Message", List["pyrogram.Message"]]:
3939
"""Get one or more messages that belong to a specific chat.
4040
You can retrieve up to 200 messages at once.
4141
@@ -60,9 +60,9 @@ def get_messages(
6060
Defaults to 1.
6161
6262
Returns:
63-
:obj:`Message` | :obj:`Messages`: In case *message_ids* was an integer, the single requested message is
64-
returned, otherwise, in case *message_ids* was an iterable, the returned value will be an object containing
65-
a list of messages, even if such iterable contained just a single element.
63+
:obj:`Message` | List of :obj:`Message`: In case *message_ids* was an integer, the single requested message is
64+
returned, otherwise, in case *message_ids* was an iterable, the returned value will be a list of messages,
65+
even if such iterable contained just a single element.
6666
6767
Raises:
6868
RPCError: In case of a Telegram RPC error.
@@ -99,6 +99,6 @@ def get_messages(
9999
else:
100100
break
101101

102-
messages = pyrogram.Messages._parse(self, r, replies=replies)
102+
messages = utils.parse_messages(self, r, replies=replies)
103103

104-
return messages if is_iterable else messages.messages[0]
104+
return messages if is_iterable else messages[0]

pyrogram/client/methods/messages/iter_history.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def iter_history(
8080
offset_id=offset_id,
8181
offset_date=offset_date,
8282
reverse=reverse
83-
).messages
83+
)
8484

8585
if not messages:
8686
return

pyrogram/client/methods/messages/send_media_group.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def send_media_group(
3838
media: List[Union["pyrogram.InputMediaPhoto", "pyrogram.InputMediaVideo"]],
3939
disable_notification: bool = None,
4040
reply_to_message_id: int = None
41-
):
41+
) -> List["pyrogram.Message"]:
4242
"""Send a group of photos or videos as an album.
4343
4444
Parameters:
@@ -58,7 +58,7 @@ def send_media_group(
5858
If the message is a reply, ID of the original message.
5959
6060
Returns:
61-
:obj:`Messages`: On success, an object is returned containing all the single messages sent.
61+
List of :obj:`Message`: On success, a list of the sent messages is returned.
6262
6363
Raises:
6464
RPCError: In case of a Telegram RPC error.
@@ -158,7 +158,7 @@ def send_media_group(
158158
else:
159159
break
160160

161-
return pyrogram.Messages._parse(
161+
return utils.parse_messages(
162162
self,
163163
types.messages.Messages(
164164
messages=[m.message for m in filter(

pyrogram/client/methods/users/get_profile_photos.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import pyrogram
2222
from pyrogram.api import functions, types
23+
from pyrogram.client.ext import utils
2324
from ...ext import BaseClient
2425

2526

@@ -66,7 +67,7 @@ def get_profile_photos(
6667

6768
return pyrogram.List(pyrogram.Photo._parse(self, photo) for photo in r.photos)
6869
else:
69-
new_chat_photos = pyrogram.Messages._parse(
70+
r = utils.parse_messages(
7071
self,
7172
self.send(
7273
functions.messages.Search(
@@ -85,4 +86,4 @@ def get_profile_photos(
8586
)
8687
)
8788

88-
return pyrogram.List([m.new_chat_photo for m in new_chat_photos.messages][:limit])
89+
return pyrogram.List([message.new_chat_photo for message in r][:limit])

0 commit comments

Comments
 (0)