Skip to content

Commit 4c860ec

Browse files
authored
Add overloads for get_messages to correctly IDE hints (#281)
1 parent d5dbaf1 commit 4c860ec

1 file changed

Lines changed: 105 additions & 7 deletions

File tree

pyrogram/methods/messages/get_messages.py

Lines changed: 105 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,122 @@
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-
import logging
20-
from typing import Iterable, List, Optional, Union
19+
from typing import Iterable, List, Optional, Union, overload
2120
import re
2221
import pyrogram
2322
from pyrogram import raw, types, utils
2423

25-
log = logging.getLogger(__name__)
26-
2724

2825
class GetMessages:
26+
# Invalid arguments (chat and string message_id provided)
27+
@overload
28+
async def get_messages(
29+
self: "pyrogram.Client",
30+
chat_id: Union[int, str],
31+
message_ids: str,
32+
reply: None = None,
33+
pinned: None = None,
34+
replies: int = 1,
35+
) -> Optional["types.Message"]: ...
36+
# Invalid arguments (only message_ids with type int or Iterable of int provided)
37+
@overload
38+
async def get_messages(
39+
self: "pyrogram.Client",
40+
chat_id: None = None,
41+
message_ids: Union[int, Iterable[int]] = 0,
42+
reply: None = None,
43+
pinned: None = None,
44+
replies: int = 1,
45+
) -> None: ...
46+
# Invalid arguments (only chat provided)
47+
@overload
48+
async def get_messages(
49+
self: "pyrogram.Client",
50+
chat_id: Union[int, str],
51+
message_ids: None = None,
52+
reply: None = None,
53+
pinned: None = None,
54+
replies: int = 1,
55+
) -> None: ...
56+
# Invalid arguments (only pinned provided)
57+
@overload
58+
async def get_messages(
59+
self: "pyrogram.Client",
60+
chat_id: None = None,
61+
message_ids: None = None,
62+
reply: None = None,
63+
pinned: bool = True,
64+
replies: int = 1,
65+
) -> None: ...
66+
# Invalid arguments (nothing provided)
67+
@overload
68+
async def get_messages(
69+
self: "pyrogram.Client",
70+
chat_id: None = None,
71+
message_ids: None = None,
72+
reply: None = None,
73+
pinned: None = None,
74+
replies: int = 1,
75+
) -> None: ...
76+
# One message
77+
@overload
78+
async def get_messages(
79+
self: "pyrogram.Client",
80+
chat_id: Union[int, str],
81+
message_ids: Union[int, str],
82+
reply: Optional[bool] = None,
83+
pinned: Optional[bool] = None,
84+
replies: int = 1,
85+
) -> Optional["types.Message"]: ...
86+
# One message with string
87+
@overload
88+
async def get_messages(
89+
self: "pyrogram.Client",
90+
chat_id: None = None,
91+
message_ids: str = "",
92+
reply: Optional[bool] = None,
93+
pinned: Optional[bool] = None,
94+
replies: int = 1,
95+
) -> Optional["types.Message"]: ...
96+
# Many messages
97+
@overload
98+
async def get_messages(
99+
self: "pyrogram.Client",
100+
chat_id: Union[int, str],
101+
message_ids: Iterable[int],
102+
reply: Optional[bool] = None,
103+
pinned: Optional[bool] = None,
104+
replies: int = 1,
105+
) -> List["types.Message"]: ...
106+
# Pinned message
107+
@overload
108+
async def get_messages(
109+
self: "pyrogram.Client",
110+
chat_id: Union[int, str],
111+
message_ids: None = None,
112+
reply: Optional[bool] = None,
113+
pinned: bool = False,
114+
replies: int = 1,
115+
) -> Optional["types.Message"]: ...
116+
# Pinned message with provided message ids
117+
# - message ids will not affect result
118+
@overload
119+
async def get_messages(
120+
self: "pyrogram.Client",
121+
chat_id: Union[int, str],
122+
message_ids: Optional[Union[int, Iterable[int], str]] = None,
123+
reply: Optional[bool] = None,
124+
pinned: bool = False,
125+
replies: int = 1,
126+
) -> Optional["types.Message"]: ...
29127
async def get_messages(
30128
self: "pyrogram.Client",
31129
chat_id: Optional[Union[int, str]] = None,
32130
message_ids: Optional[Union[int, Iterable[int], str]] = None,
33131
reply: Optional[bool] = None,
34132
pinned: Optional[bool] = None,
35-
replies: int = 1
36-
) -> Optional[Union["types.Message", List["types.Message"]]]:
133+
replies: int = 1,
134+
) -> Union[Optional["types.Message"], List["types.Message"]]:
37135
"""Get one or more messages from a chat by using message identifiers or link.
38136
39137
You can retrieve up to 200 messages at once.
@@ -55,7 +153,7 @@ async def get_messages(
55153
the previous message you replied to using this message.
56154
57155
pinned (``bool``, *optional*):
58-
If True, you will get pinned message.
156+
If True, you will get last pinned message.
59157
60158
replies (``int``, *optional*):
61159
The number of subsequent replies to get for each message.

0 commit comments

Comments
 (0)