1818
1919import base64
2020import struct
21- from typing import Union , List
21+ from typing import List
22+ from typing import Union
2223
2324import pyrogram
24-
25+ from pyrogram . api . types import PeerUser , PeerChat , PeerChannel
2526from . import BaseClient
2627from ...api import types
2728
@@ -62,23 +63,6 @@ def encode(s: bytes) -> str:
6263 return base64 .urlsafe_b64encode (r ).decode ().rstrip ("=" )
6364
6465
65- def get_peer_id (input_peer ) -> int :
66- return (
67- input_peer .user_id if isinstance (input_peer , types .InputPeerUser )
68- else - input_peer .chat_id if isinstance (input_peer , types .InputPeerChat )
69- else int ("-100" + str (input_peer .channel_id ))
70- )
71-
72-
73- def get_input_peer (peer_id : int , access_hash : int ):
74- return (
75- types .InputPeerUser (user_id = peer_id , access_hash = access_hash ) if peer_id > 0
76- else types .InputPeerChannel (channel_id = int (str (peer_id )[4 :]), access_hash = access_hash )
77- if (str (peer_id ).startswith ("-100" ) and access_hash )
78- else types .InputPeerChat (chat_id = - peer_id )
79- )
80-
81-
8266def get_offset_date (dialogs ):
8367 for m in reversed (dialogs .messages ):
8468 if isinstance (m , types .MessageEmpty ):
@@ -183,7 +167,7 @@ def parse_deleted_messages(client, update) -> List["pyrogram.Message"]:
183167 pyrogram .Message (
184168 message_id = message ,
185169 chat = pyrogram .Chat (
186- id = int ( "-100" + str ( channel_id ) ),
170+ id = get_channel_id ( channel_id ),
187171 type = "channel" ,
188172 client = client
189173 ) if channel_id is not None else None ,
@@ -203,3 +187,39 @@ def unpack_inline_message_id(inline_message_id: str) -> types.InputBotInlineMess
203187 id = r [1 ],
204188 access_hash = r [2 ]
205189 )
190+
191+
192+ MIN_CHANNEL_ID = - 1002147483647
193+ MAX_CHANNEL_ID = - 1000000000000
194+ MIN_CHAT_ID = - 2147483647
195+ MAX_USER_ID = 2147483647
196+
197+
198+ def get_peer_id (peer : Union [PeerUser , PeerChat , PeerChannel ]) -> int :
199+ if isinstance (peer , PeerUser ):
200+ return peer .user_id
201+
202+ if isinstance (peer , PeerChat ):
203+ return - peer .chat_id
204+
205+ if isinstance (peer , PeerChannel ):
206+ return MAX_CHANNEL_ID - peer .channel_id
207+
208+ raise ValueError ("Peer type invalid: {}" .format (peer ))
209+
210+
211+ def get_type (peer_id : int ) -> str :
212+ if peer_id < 0 :
213+ if MIN_CHAT_ID <= peer_id :
214+ return "chat"
215+
216+ if MIN_CHANNEL_ID <= peer_id < MAX_CHANNEL_ID :
217+ return "channel"
218+ elif 0 < peer_id <= MAX_USER_ID :
219+ return "user"
220+
221+ raise ValueError ("Peer id invalid: {}" .format (peer_id ))
222+
223+
224+ def get_channel_id (peer_id : int ) -> int :
225+ return MAX_CHANNEL_ID - peer_id
0 commit comments