mirror of
https://github.com/pyrogram/pyrogram
synced 2025-08-28 21:07:59 +00:00
Add fetch_peers method
This commit is contained in:
parent
0f45cacefa
commit
9a912192f0
@ -198,6 +198,67 @@ class Client:
|
|||||||
for i in range(self.workers):
|
for i in range(self.workers):
|
||||||
self.event_queue.put(None)
|
self.event_queue.put(None)
|
||||||
|
|
||||||
|
def fetch_peers(self, entities: list):
|
||||||
|
for entity in entities:
|
||||||
|
if isinstance(entity, User):
|
||||||
|
user_id = entity.id
|
||||||
|
|
||||||
|
if user_id in self.peers_by_id:
|
||||||
|
continue
|
||||||
|
|
||||||
|
access_hash = entity.access_hash
|
||||||
|
|
||||||
|
if access_hash is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
username = entity.username
|
||||||
|
|
||||||
|
input_peer = InputPeerUser(
|
||||||
|
user_id=user_id,
|
||||||
|
access_hash=access_hash
|
||||||
|
)
|
||||||
|
|
||||||
|
self.peers_by_id[user_id] = input_peer
|
||||||
|
|
||||||
|
if username is not None:
|
||||||
|
self.peers_by_id[username] = input_peer
|
||||||
|
|
||||||
|
if isinstance(entity, Chat):
|
||||||
|
chat_id = entity.id
|
||||||
|
|
||||||
|
if chat_id in self.peers_by_id:
|
||||||
|
continue
|
||||||
|
|
||||||
|
input_peer = InputPeerChat(
|
||||||
|
chat_id=chat_id
|
||||||
|
)
|
||||||
|
|
||||||
|
self.peers_by_id[chat_id] = input_peer
|
||||||
|
|
||||||
|
if isinstance(entity, Channel):
|
||||||
|
channel_id = entity.id
|
||||||
|
peer_id = int("-100" + str(channel_id))
|
||||||
|
|
||||||
|
if peer_id in self.peers_by_id:
|
||||||
|
continue
|
||||||
|
|
||||||
|
access_hash = entity.access_hash
|
||||||
|
|
||||||
|
if access_hash is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
username = entity.username
|
||||||
|
|
||||||
|
input_peer = InputPeerChannel(
|
||||||
|
channel_id=channel_id,
|
||||||
|
access_hash=access_hash
|
||||||
|
)
|
||||||
|
|
||||||
|
self.peers_by_id[peer_id] = input_peer
|
||||||
|
|
||||||
|
if username is not None:
|
||||||
|
self.peers_by_username[username] = input_peer
|
||||||
|
|
||||||
def update_worker(self):
|
def update_worker(self):
|
||||||
name = threading.current_thread().name
|
name = threading.current_thread().name
|
||||||
log.debug("{} started".format(name))
|
log.debug("{} started".format(name))
|
||||||
@ -209,16 +270,41 @@ class Client:
|
|||||||
break
|
break
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# TODO: Fetch users and chats
|
|
||||||
if isinstance(update, (types.Update, types.UpdatesCombined)):
|
if isinstance(update, (types.Update, types.UpdatesCombined)):
|
||||||
|
self.fetch_peers(update.users)
|
||||||
|
self.fetch_peers(update.chats)
|
||||||
|
|
||||||
for i in update.updates:
|
for i in update.updates:
|
||||||
self.event_queue.put(i)
|
self.event_queue.put(i)
|
||||||
elif isinstance(update, (types.UpdateShortMessage, types.UpdateShortChatMessage)):
|
elif isinstance(update, types.UpdateShortMessage):
|
||||||
|
if update.user_id not in self.peers_by_id:
|
||||||
|
diff = self.send(
|
||||||
|
functions.updates.GetDifference(
|
||||||
|
pts=update.pts - 1,
|
||||||
|
date=update.date,
|
||||||
|
qts=-1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.fetch_peers(diff.users)
|
||||||
|
|
||||||
|
self.event_queue.put(update)
|
||||||
|
elif isinstance(update, types.UpdateShortChatMessage):
|
||||||
|
if update.chat_id not in self.peers_by_id:
|
||||||
|
diff = self.send(
|
||||||
|
functions.updates.GetDifference(
|
||||||
|
pts=update.pts - 1,
|
||||||
|
date=update.date,
|
||||||
|
qts=-1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
self.fetch_peers(diff.users)
|
||||||
|
self.fetch_peers(diff.chats)
|
||||||
|
|
||||||
self.event_queue.put(update)
|
self.event_queue.put(update)
|
||||||
elif isinstance(update, types.UpdateShort):
|
elif isinstance(update, types.UpdateShort):
|
||||||
self.event_queue.put(update.update)
|
self.event_queue.put(update.update)
|
||||||
else:
|
|
||||||
print(">>>>>", type(update))
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(e, exc_info=True)
|
log.error(e, exc_info=True)
|
||||||
|
|
||||||
@ -235,7 +321,8 @@ class Client:
|
|||||||
break
|
break
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.event_handler(self, event)
|
if self.event_handler:
|
||||||
|
self.event_handler(self, event)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(e, exc_info=True)
|
log.error(e, exc_info=True)
|
||||||
|
|
||||||
@ -264,7 +351,7 @@ class Client:
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
callback (:obj:`callable`):
|
callback (:obj:`callable`):
|
||||||
A callback function that accepts a single argument: the event (update) object.
|
A callback function that accepts two arguments: the Client itself and the event (update) object.
|
||||||
"""
|
"""
|
||||||
self.event_handler = callback
|
self.event_handler = callback
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user