mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-06-19 03:26:39 +00:00
Get difference for missing entities in channels too
This commit is contained in:
parent
c1880c9191
commit
fee0923dd1
@ -213,7 +213,8 @@ class UpdateMethods(UserMethods):
|
|||||||
self._state_cache.update(update)
|
self._state_cache.update(update)
|
||||||
|
|
||||||
def _process_update(self, update, entities=None):
|
def _process_update(self, update, entities=None):
|
||||||
update._pts_date = self._state_cache[StateCache.get_channel_id(update)]
|
update._channel_id = StateCache.get_channel_id(update)
|
||||||
|
update._pts_date = self._state_cache[update._channel_id]
|
||||||
update._entities = entities or {}
|
update._entities = entities or {}
|
||||||
if self._updates_queue is None:
|
if self._updates_queue is None:
|
||||||
self._loop.create_task(self._dispatch_update(update))
|
self._loop.create_task(self._dispatch_update(update))
|
||||||
@ -395,27 +396,34 @@ class EventBuilderDict:
|
|||||||
(always done by `__call__`) and lets us know about the full entities.
|
(always done by `__call__`) and lets us know about the full entities.
|
||||||
"""
|
"""
|
||||||
# Fetch since the last known pts/date before this update arrived,
|
# Fetch since the last known pts/date before this update arrived,
|
||||||
# in order to fetch this update at full.
|
# in order to fetch this update at full, including its entities.
|
||||||
pts_date = self.update._pts_date
|
|
||||||
if not isinstance(pts_date, tuple):
|
|
||||||
# TODO Handle channels, and handle this more nicely
|
|
||||||
return
|
|
||||||
|
|
||||||
pts, date = pts_date
|
|
||||||
if not pts:
|
|
||||||
return
|
|
||||||
|
|
||||||
# No date known, 1 is the earliest date that works
|
|
||||||
if not date:
|
|
||||||
date = 1
|
|
||||||
|
|
||||||
self.client._log[__name__].debug('Getting difference for entities')
|
self.client._log[__name__].debug('Getting difference for entities')
|
||||||
|
if self.update._channel_id:
|
||||||
|
pts = self.update._pts_date
|
||||||
|
try:
|
||||||
|
where = await self.client.get_input_entity(self.update._channel_id)
|
||||||
|
except ValueError:
|
||||||
|
return
|
||||||
|
|
||||||
|
result = await self.client(functions.updates.GetChannelDifferenceRequest(
|
||||||
|
channel=where,
|
||||||
|
filter=types.ChannelMessagesFilterEmpty(),
|
||||||
|
pts=pts,
|
||||||
|
limit=100,
|
||||||
|
force=True
|
||||||
|
))
|
||||||
|
else:
|
||||||
|
pts, date = self.update._pts_date
|
||||||
result = await self.client(functions.updates.GetDifferenceRequest(
|
result = await self.client(functions.updates.GetDifferenceRequest(
|
||||||
pts - 1, date, 0
|
pts=pts - 1,
|
||||||
|
date=date,
|
||||||
|
qts=0
|
||||||
))
|
))
|
||||||
|
|
||||||
if isinstance(result, (types.updates.Difference,
|
if isinstance(result, (types.updates.Difference,
|
||||||
types.updates.DifferenceSlice)):
|
types.updates.DifferenceSlice,
|
||||||
|
types.updates.ChannelDifference,
|
||||||
|
types.updates.ChannelDifferenceTooLong)):
|
||||||
self.update._entities.update({
|
self.update._entities.update({
|
||||||
utils.get_peer_id(x): x for x in
|
utils.get_peer_id(x): x for x in
|
||||||
itertools.chain(result.users, result.chats)
|
itertools.chain(result.users, result.chats)
|
||||||
|
Loading…
Reference in New Issue
Block a user