mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-07-15 02:22:22 +03:00
Support drop_author flags
This commit is contained in:
parent
2357116f01
commit
c6eb9f90d9
|
@ -144,7 +144,8 @@ class _MessagesIter(requestiter.RequestIter):
|
||||||
and offset_date and not search and not offset_id:
|
and offset_date and not search and not offset_id:
|
||||||
async for m in self.client.get_messages(
|
async for m in self.client.get_messages(
|
||||||
self.entity, 1, offset_date=offset_date):
|
self.entity, 1, offset_date=offset_date):
|
||||||
self.request = dataclasses.replace(self.request, offset_id=m.id + 1)
|
self.request = dataclasses.replace(
|
||||||
|
self.request, offset_id=m.id + 1)
|
||||||
else:
|
else:
|
||||||
self.request = _tl.fn.messages.GetHistory(
|
self.request = _tl.fn.messages.GetHistory(
|
||||||
peer=self.entity,
|
peer=self.entity,
|
||||||
|
@ -180,10 +181,12 @@ class _MessagesIter(requestiter.RequestIter):
|
||||||
self.last_id = 0 if self.reverse else float('inf')
|
self.last_id = 0 if self.reverse else float('inf')
|
||||||
|
|
||||||
async def _load_next_chunk(self):
|
async def _load_next_chunk(self):
|
||||||
self.request = dataclasses.replace(self.request, limit=min(self.left, _MAX_CHUNK_SIZE))
|
self.request = dataclasses.replace(
|
||||||
|
self.request, limit=min(self.left, _MAX_CHUNK_SIZE))
|
||||||
if self.reverse and self.request.limit != _MAX_CHUNK_SIZE:
|
if self.reverse and self.request.limit != _MAX_CHUNK_SIZE:
|
||||||
# Remember that we need -limit when going in reverse
|
# Remember that we need -limit when going in reverse
|
||||||
self.request = dataclasses.replace(self.request, add_offset=self.add_offset - self.request.limit)
|
self.request = dataclasses.replace(
|
||||||
|
self.request, add_offset=self.add_offset - self.request.limit)
|
||||||
|
|
||||||
r = await self.client(self.request)
|
r = await self.client(self.request)
|
||||||
self.total = getattr(r, 'count', len(r.messages))
|
self.total = getattr(r, 'count', len(r.messages))
|
||||||
|
@ -205,7 +208,8 @@ class _MessagesIter(requestiter.RequestIter):
|
||||||
# is an attempt to avoid these duplicates, since the message
|
# is an attempt to avoid these duplicates, since the message
|
||||||
# IDs are returned in descending order (or asc if reverse).
|
# IDs are returned in descending order (or asc if reverse).
|
||||||
self.last_id = message.id
|
self.last_id = message.id
|
||||||
self.buffer.append(_custom.Message._new(self.client, message, entities, self.entity))
|
self.buffer.append(_custom.Message._new(
|
||||||
|
self.client, message, entities, self.entity))
|
||||||
|
|
||||||
if len(r.messages) < self.request.limit:
|
if len(r.messages) < self.request.limit:
|
||||||
return True
|
return True
|
||||||
|
@ -243,10 +247,12 @@ class _MessagesIter(requestiter.RequestIter):
|
||||||
"""
|
"""
|
||||||
After making the request, update its offset with the last message.
|
After making the request, update its offset with the last message.
|
||||||
"""
|
"""
|
||||||
self.request = dataclasses.replace(self.request, offset_id=last_message.id)
|
self.request = dataclasses.replace(
|
||||||
|
self.request, offset_id=last_message.id)
|
||||||
if self.reverse:
|
if self.reverse:
|
||||||
# We want to skip the one we already have
|
# We want to skip the one we already have
|
||||||
self.request = dataclasses.replace(self.request, offset_id=self.request.offset_id + 1)
|
self.request = dataclasses.replace(
|
||||||
|
self.request, offset_id=self.request.offset_id + 1)
|
||||||
|
|
||||||
if isinstance(self.request, _tl.fn.messages.Search):
|
if isinstance(self.request, _tl.fn.messages.Search):
|
||||||
# Unlike getHistory and searchGlobal that use *offset* date,
|
# Unlike getHistory and searchGlobal that use *offset* date,
|
||||||
|
@ -256,15 +262,19 @@ class _MessagesIter(requestiter.RequestIter):
|
||||||
self.request = dataclasses.replace(self.request, max_date=None)
|
self.request = dataclasses.replace(self.request, max_date=None)
|
||||||
else:
|
else:
|
||||||
# getHistory, searchGlobal and getReplies call it offset_date
|
# getHistory, searchGlobal and getReplies call it offset_date
|
||||||
self.request = dataclasses.replace(self.request, offset_date=last_message.date)
|
self.request = dataclasses.replace(
|
||||||
|
self.request, offset_date=last_message.date)
|
||||||
|
|
||||||
if isinstance(self.request, _tl.fn.messages.SearchGlobal):
|
if isinstance(self.request, _tl.fn.messages.SearchGlobal):
|
||||||
if last_message.input_chat:
|
if last_message.input_chat:
|
||||||
self.request = dataclasses.replace(self.request, offset_peer=last_message.input_chat)
|
self.request = dataclasses.replace(
|
||||||
|
self.request, offset_peer=last_message.input_chat)
|
||||||
else:
|
else:
|
||||||
self.request = dataclasses.replace(self.request, offset_peer=_tl.InputPeerEmpty())
|
self.request = dataclasses.replace(
|
||||||
|
self.request, offset_peer=_tl.InputPeerEmpty())
|
||||||
|
|
||||||
self.request = dataclasses.replace(self.request, offset_rate=getattr(response, 'next_rate', 0))
|
self.request = dataclasses.replace(
|
||||||
|
self.request, offset_rate=getattr(response, 'next_rate', 0))
|
||||||
|
|
||||||
|
|
||||||
class _IDsIter(requestiter.RequestIter):
|
class _IDsIter(requestiter.RequestIter):
|
||||||
|
@ -319,7 +329,8 @@ class _IDsIter(requestiter.RequestIter):
|
||||||
from_id and message.peer_id != from_id):
|
from_id and message.peer_id != from_id):
|
||||||
self.buffer.append(None)
|
self.buffer.append(None)
|
||||||
else:
|
else:
|
||||||
self.buffer.append(_custom.Message._new(self.client, message, entities, self._entity))
|
self.buffer.append(_custom.Message._new(
|
||||||
|
self.client, message, entities, self._entity))
|
||||||
|
|
||||||
|
|
||||||
async def _get_peer(self: 'TelegramClient', input_peer: 'hints.DialogLike'):
|
async def _get_peer(self: 'TelegramClient', input_peer: 'hints.DialogLike'):
|
||||||
|
@ -394,6 +405,7 @@ async def _get_comment_data(
|
||||||
chat = next(c for c in r.chats if c.id == m.peer_id.channel_id)
|
chat = next(c for c in r.chats if c.id == m.peer_id.channel_id)
|
||||||
return utils.get_input_peer(chat), m.id
|
return utils.get_input_peer(chat), m.id
|
||||||
|
|
||||||
|
|
||||||
async def send_message(
|
async def send_message(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
dialog: 'hints.DialogLike',
|
dialog: 'hints.DialogLike',
|
||||||
|
@ -464,7 +476,8 @@ async def send_message(
|
||||||
elif isinstance(message, _custom.Message):
|
elif isinstance(message, _custom.Message):
|
||||||
message = message._as_input()
|
message = message._as_input()
|
||||||
elif not isinstance(message, InputMessage):
|
elif not isinstance(message, InputMessage):
|
||||||
raise TypeError(f'message must be either str, Message or InputMessage, but got: {message!r}')
|
raise TypeError(
|
||||||
|
f'message must be either str, Message or InputMessage, but got: {message!r}')
|
||||||
|
|
||||||
entity = await self._get_input_peer(dialog)
|
entity = await self._get_input_peer(dialog)
|
||||||
if comment_to is not None:
|
if comment_to is not None:
|
||||||
|
@ -523,6 +536,7 @@ async def send_message(
|
||||||
|
|
||||||
return self._get_response_message(request, result, entity)
|
return self._get_response_message(request, result, entity)
|
||||||
|
|
||||||
|
|
||||||
async def forward_messages(
|
async def forward_messages(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
dialog: 'hints.DialogLike',
|
dialog: 'hints.DialogLike',
|
||||||
|
@ -535,10 +549,12 @@ async def forward_messages(
|
||||||
as_album: bool = None,
|
as_album: bool = None,
|
||||||
schedule: 'hints.DateLike' = None,
|
schedule: 'hints.DateLike' = None,
|
||||||
noforwards: bool = None,
|
noforwards: bool = None,
|
||||||
send_as: 'hints.DialogLike' = None
|
send_as: 'hints.DialogLike' = None,
|
||||||
|
drop_author: bool = None
|
||||||
) -> 'typing.Sequence[_tl.Message]':
|
) -> 'typing.Sequence[_tl.Message]':
|
||||||
if as_album is not None:
|
if as_album is not None:
|
||||||
warnings.warn('the as_album argument is deprecated and no longer has any effect')
|
warnings.warn(
|
||||||
|
'the as_album argument is deprecated and no longer has any effect')
|
||||||
|
|
||||||
entity = await self._get_input_peer(dialog)
|
entity = await self._get_input_peer(dialog)
|
||||||
|
|
||||||
|
@ -558,7 +574,8 @@ async def forward_messages(
|
||||||
elif isinstance(m, _tl.Message):
|
elif isinstance(m, _tl.Message):
|
||||||
return m.chat_id
|
return m.chat_id
|
||||||
else:
|
else:
|
||||||
raise TypeError('Cannot forward messages of type {}'.format(type(m)))
|
raise TypeError(
|
||||||
|
'Cannot forward messages of type {}'.format(type(m)))
|
||||||
|
|
||||||
sent = []
|
sent = []
|
||||||
for _chat_id, chunk in itertools.groupby(messages, key=get_key):
|
for _chat_id, chunk in itertools.groupby(messages, key=get_key):
|
||||||
|
@ -579,13 +596,16 @@ async def forward_messages(
|
||||||
schedule_date=schedule,
|
schedule_date=schedule,
|
||||||
noforwards=noforwards,
|
noforwards=noforwards,
|
||||||
send_as=send_as,
|
send_as=send_as,
|
||||||
random_id=[int.from_bytes(os.urandom(8), 'big', signed=True) for _ in chunk],
|
random_id=[int.from_bytes(os.urandom(
|
||||||
|
8), 'big', signed=True) for _ in chunk],
|
||||||
|
drop_author=drop_author,
|
||||||
)
|
)
|
||||||
result = await self(req)
|
result = await self(req)
|
||||||
sent.extend(self._get_response_message(req, result, entity))
|
sent.extend(self._get_response_message(req, result, entity))
|
||||||
|
|
||||||
return sent[0] if single else sent
|
return sent[0] if single else sent
|
||||||
|
|
||||||
|
|
||||||
async def edit_message(
|
async def edit_message(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
dialog: 'typing.Union[hints.DialogLike, _tl.Message]',
|
dialog: 'typing.Union[hints.DialogLike, _tl.Message]',
|
||||||
|
@ -646,6 +666,7 @@ async def edit_message(
|
||||||
msg = self._get_response_message(request, await self(request), entity)
|
msg = self._get_response_message(request, await self(request), entity)
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
|
|
||||||
async def delete_messages(
|
async def delete_messages(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
dialog: 'hints.DialogLike',
|
dialog: 'hints.DialogLike',
|
||||||
|
@ -675,6 +696,7 @@ async def delete_messages(
|
||||||
|
|
||||||
return sum(r.pts_count for r in res)
|
return sum(r.pts_count for r in res)
|
||||||
|
|
||||||
|
|
||||||
async def mark_read(
|
async def mark_read(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
dialog: 'hints.DialogLike',
|
dialog: 'hints.DialogLike',
|
||||||
|
@ -705,6 +727,7 @@ async def mark_read(
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
async def pin_message(
|
async def pin_message(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
dialog: 'hints.DialogLike',
|
dialog: 'hints.DialogLike',
|
||||||
|
@ -715,6 +738,7 @@ async def pin_message(
|
||||||
):
|
):
|
||||||
return await _pin(self, dialog, message, unpin=False, notify=notify, pm_oneside=pm_oneside)
|
return await _pin(self, dialog, message, unpin=False, notify=notify, pm_oneside=pm_oneside)
|
||||||
|
|
||||||
|
|
||||||
async def unpin_message(
|
async def unpin_message(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
dialog: 'hints.DialogLike',
|
dialog: 'hints.DialogLike',
|
||||||
|
@ -724,6 +748,7 @@ async def unpin_message(
|
||||||
):
|
):
|
||||||
return await _pin(self, dialog, message, unpin=True, notify=notify)
|
return await _pin(self, dialog, message, unpin=True, notify=notify)
|
||||||
|
|
||||||
|
|
||||||
async def _pin(self, entity, message, *, unpin, notify=False, pm_oneside=False):
|
async def _pin(self, entity, message, *, unpin, notify=False, pm_oneside=False):
|
||||||
message = utils.get_message_id(message) or 0
|
message = utils.get_message_id(message) or 0
|
||||||
entity = await self._get_input_peer(entity)
|
entity = await self._get_input_peer(entity)
|
||||||
|
@ -750,6 +775,7 @@ async def _pin(self, entity, message, *, unpin, notify=False, pm_oneside=False):
|
||||||
# Pinning a message that doesn't exist would RPC-error earlier
|
# Pinning a message that doesn't exist would RPC-error earlier
|
||||||
return self._get_response_message(request, result, entity)
|
return self._get_response_message(request, result, entity)
|
||||||
|
|
||||||
|
|
||||||
async def send_reaction(
|
async def send_reaction(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
entity: 'hints.DialogLike',
|
entity: 'hints.DialogLike',
|
||||||
|
@ -782,6 +808,7 @@ async def send_reaction(
|
||||||
if isinstance(update, _tl.UpdateEditMessage):
|
if isinstance(update, _tl.UpdateEditMessage):
|
||||||
return update.message.reactions
|
return update.message.reactions
|
||||||
|
|
||||||
|
|
||||||
async def set_quick_reaction(
|
async def set_quick_reaction(
|
||||||
self: 'TelegramClient',
|
self: 'TelegramClient',
|
||||||
reaction: str
|
reaction: str
|
||||||
|
|
Loading…
Reference in New Issue
Block a user