Update global search to properly use offset_rate

This commit is contained in:
Lonami Exo 2020-10-01 12:06:51 +02:00
parent 8ce7e776c1
commit 668dcd52ca
2 changed files with 12 additions and 10 deletions

View File

@ -67,16 +67,19 @@ class _MessagesIter(RequestIter):
else: else:
self.from_id = None self.from_id = None
# `messages.searchGlobal` only works with text `search` queries. # `messages.searchGlobal` only works with text `search` or `filter` queries.
# If we want to perform global a search with `from_user` or `filter`, # If we want to perform global a search with `from_user` we have to perform
# we have to perform a normal `messages.search`, *but* we can make the # a normal `messages.search`, *but* we can make the entity be `inputPeerEmpty`.
# entity be `inputPeerEmpty`. if not self.entity and from_user:
if not self.entity and (filter or from_user):
self.entity = types.InputPeerEmpty() self.entity = types.InputPeerEmpty()
if filter is None:
filter = types.InputMessagesFilterEmpty()
if not self.entity: if not self.entity:
self.request = functions.messages.SearchGlobalRequest( self.request = functions.messages.SearchGlobalRequest(
q=search or '', q=search or '',
filter=filter,
min_date=None, min_date=None,
max_date=offset_date, max_date=offset_date,
offset_rate=None, offset_rate=None,
@ -85,9 +88,6 @@ class _MessagesIter(RequestIter):
limit=1 limit=1
) )
elif search is not None or filter or from_user: elif search is not None or filter or from_user:
if filter is None:
filter = types.InputMessagesFilterEmpty()
# Telegram completely ignores `from_id` in private chats # Telegram completely ignores `from_id` in private chats
ty = helpers._entity_type(self.entity) ty = helpers._entity_type(self.entity)
if ty == helpers._EntityType.USER: if ty == helpers._EntityType.USER:
@ -194,7 +194,7 @@ class _MessagesIter(RequestIter):
# Get the last message that's not empty (in some rare cases # Get the last message that's not empty (in some rare cases
# it can happen that the last message is :tl:`MessageEmpty`) # it can happen that the last message is :tl:`MessageEmpty`)
if self.buffer: if self.buffer:
self._update_offset(self.buffer[-1]) self._update_offset(self.buffer[-1], r)
else: else:
# There are some cases where all the messages we get start # There are some cases where all the messages we get start
# being empty. This can happen on migrated mega-groups if # being empty. This can happen on migrated mega-groups if
@ -220,7 +220,7 @@ class _MessagesIter(RequestIter):
return True return True
def _update_offset(self, last_message): def _update_offset(self, last_message, response):
""" """
After making the request, update its offset with the last message. After making the request, update its offset with the last message.
""" """
@ -241,6 +241,7 @@ class _MessagesIter(RequestIter):
if isinstance(self.request, functions.messages.SearchGlobalRequest): if isinstance(self.request, functions.messages.SearchGlobalRequest):
self.request.offset_peer = last_message.input_chat self.request.offset_peer = last_message.input_chat
self.request.offset_rate = getattr(response, 'next_rate', None)
class _IDsIter(RequestIter): class _IDsIter(RequestIter):

View File

@ -84,6 +84,7 @@ class Message(ChatGetter, SenderGetter, TLObject, abc.ABC):
from_id (:tl:`Peer`): from_id (:tl:`Peer`):
The peer who sent this message, which is either The peer who sent this message, which is either
:tl:`PeerUser`, :tl:`PeerChat` or :tl:`PeerChannel`. :tl:`PeerUser`, :tl:`PeerChat` or :tl:`PeerChannel`.
This value will be `None` for anonymous messages.
reply_to (:tl:`MessageReplyHeader`): reply_to (:tl:`MessageReplyHeader`):
The original reply header if this message is replying to another. The original reply header if this message is replying to another.