Skip to content

Commit a21858a

Browse files
authored
Merge pull request pyrogram#251 from pyrogram/types-revamp
Types revamp
2 parents 684aef3 + b9b50ba commit a21858a

41 files changed

Lines changed: 206 additions & 579 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

compiler/error/source/500_INTERNAL_SERVER_ERROR.tsv

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ REG_ID_GENERATE_FAILED Telegram is having internal problems. Please try again la
88
RANDOM_ID_DUPLICATE Telegram is having internal problems. Please try again later
99
WORKER_BUSY_TOO_LONG_RETRY Telegram is having internal problems. Please try again later
1010
INTERDC_X_CALL_ERROR Telegram is having internal problems. Please try again later
11-
INTERDC_X_CALL_RICH_ERROR Telegram is having internal problems. Please try again later
11+
INTERDC_X_CALL_RICH_ERROR Telegram is having internal problems. Please try again later
12+
FOLDER_DEAC_AUTOFIX_ALL Telegram is having internal problems. Please try again later

docs/source/api/types.rst

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,8 @@ Users & Chats
3030
- :class:`ChatPreview`
3131
- :class:`ChatPhoto`
3232
- :class:`ChatMember`
33-
- :class:`ChatMembers`
3433
- :class:`ChatPermissions`
3534
- :class:`Dialog`
36-
- :class:`Dialogs`
3735

3836
Messages & Media
3937
^^^^^^^^^^^^^^^^
@@ -42,10 +40,8 @@ Messages & Media
4240
:columns: 5
4341

4442
- :class:`Message`
45-
- :class:`Messages`
4643
- :class:`MessageEntity`
4744
- :class:`Photo`
48-
- :class:`ProfilePhotos`
4945
- :class:`Thumbnail`
5046
- :class:`Audio`
5147
- :class:`Document`
@@ -61,8 +57,8 @@ Messages & Media
6157
- :class:`Poll`
6258
- :class:`PollOption`
6359

64-
Keyboards
65-
^^^^^^^^^
60+
Bots & Keyboards
61+
^^^^^^^^^^^^^^^^
6662

6763
.. hlist::
6864
:columns: 4
@@ -75,7 +71,6 @@ Keyboards
7571
- :class:`ForceReply`
7672
- :class:`CallbackQuery`
7773
- :class:`GameHighScore`
78-
- :class:`GameHighScores`
7974
- :class:`CallbackGame`
8075

8176
Input Media
@@ -123,17 +118,13 @@ Details
123118
.. autoclass:: ChatPreview()
124119
.. autoclass:: ChatPhoto()
125120
.. autoclass:: ChatMember()
126-
.. autoclass:: ChatMembers()
127121
.. autoclass:: ChatPermissions()
128122
.. autoclass:: Dialog()
129-
.. autoclass:: Dialogs()
130123

131124
.. Messages & Media
132125
.. autoclass:: Message()
133-
.. autoclass:: Messages()
134126
.. autoclass:: MessageEntity()
135127
.. autoclass:: Photo()
136-
.. autoclass:: ProfilePhotos()
137128
.. autoclass:: Thumbnail()
138129
.. autoclass:: Audio()
139130
.. autoclass:: Document()
@@ -149,7 +140,7 @@ Details
149140
.. autoclass:: Poll()
150141
.. autoclass:: PollOption()
151142

152-
.. Keyboards
143+
.. Bots & Keyboards
153144
.. autoclass:: ReplyKeyboardMarkup()
154145
.. autoclass:: KeyboardButton()
155146
.. autoclass:: ReplyKeyboardRemove()
@@ -158,7 +149,6 @@ Details
158149
.. autoclass:: ForceReply()
159150
.. autoclass:: CallbackQuery()
160151
.. autoclass:: GameHighScore()
161-
.. autoclass:: GameHighScores()
162152
.. autoclass:: CallbackGame()
163153

164154
.. Input Media

pyrogram/client/ext/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,5 @@
1919
from .base_client import BaseClient
2020
from .dispatcher import Dispatcher
2121
from .emoji import Emoji
22-
from .syncer import Syncer
2322
from .file_data import FileData
24-
23+
from .syncer import Syncer

pyrogram/client/ext/dispatcher.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import pyrogram
2626
from pyrogram.api import types
27+
from . import utils
2728
from ..handlers import (
2829
CallbackQueryHandler, MessageHandler, DeletedMessagesHandler,
2930
UserStatusHandler, RawUpdateHandler, InlineQueryHandler, PollHandler
@@ -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/filters/filters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import re
2020

2121
from .filter import Filter
22-
from ..types.keyboards import InlineKeyboardMarkup, ReplyKeyboardMarkup
22+
from ..types.bots_and_keyboards import InlineKeyboardMarkup, ReplyKeyboardMarkup
2323

2424

2525
def create(name: str, func: callable, **kwargs) -> type:

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/bots/get_game_high_scores.py

Lines changed: 10 additions & 11 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
19+
from typing import Union, List
2020

2121
import pyrogram
2222
from pyrogram.api import functions
@@ -29,7 +29,7 @@ def get_game_high_scores(
2929
user_id: Union[int, str],
3030
chat_id: Union[int, str],
3131
message_id: int = None
32-
) -> "pyrogram.GameHighScores":
32+
) -> List["pyrogram.GameHighScore"]:
3333
"""Get data for high score tables.
3434
3535
Parameters:
@@ -49,20 +49,19 @@ def get_game_high_scores(
4949
Required if inline_message_id is not specified.
5050
5151
Returns:
52-
:obj:`GameHighScores`: On success.
52+
List of :obj:`GameHighScore`: On success.
5353
5454
Raises:
5555
RPCError: In case of a Telegram RPC error.
5656
"""
5757
# TODO: inline_message_id
5858

59-
return pyrogram.GameHighScores._parse(
60-
self,
61-
self.send(
62-
functions.messages.GetGameHighScores(
63-
peer=self.resolve_peer(chat_id),
64-
id=message_id,
65-
user_id=self.resolve_peer(user_id)
66-
)
59+
r = self.send(
60+
functions.messages.GetGameHighScores(
61+
peer=self.resolve_peer(chat_id),
62+
id=message_id,
63+
user_id=self.resolve_peer(user_id)
6764
)
6865
)
66+
67+
return pyrogram.List(pyrogram.GameHighScore._parse(self, score, r.users) for score in r.scores)

pyrogram/client/methods/chats/get_chat_member.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,18 @@ def get_chat_member(
5151
user = self.resolve_peer(user_id)
5252

5353
if isinstance(chat, types.InputPeerChat):
54-
full_chat = self.send(
54+
r = self.send(
5555
functions.messages.GetFullChat(
5656
chat_id=chat.chat_id
5757
)
5858
)
5959

60-
for member in pyrogram.ChatMembers._parse(self, full_chat).chat_members:
60+
members = r.full_chat.participants.participants
61+
users = {i.id: i for i in r.users}
62+
63+
for member in members:
64+
member = pyrogram.ChatMember._parse(self, member, users)
65+
6166
if isinstance(user, types.InputPeerSelf):
6267
if member.user.is_self:
6368
return member

0 commit comments

Comments
 (0)