mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-04-22 10:02:03 +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:
|
||||
async for m in self.client.get_messages(
|
||||
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:
|
||||
self.request = _tl.fn.messages.GetHistory(
|
||||
peer=self.entity,
|
||||
|
@ -180,10 +181,12 @@ class _MessagesIter(requestiter.RequestIter):
|
|||
self.last_id = 0 if self.reverse else float('inf')
|
||||
|
||||
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:
|
||||
# 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)
|
||||
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
|
||||
# IDs are returned in descending order (or asc if reverse).
|
||||
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:
|
||||
return True
|
||||
|
@ -243,10 +247,12 @@ class _MessagesIter(requestiter.RequestIter):
|
|||
"""
|
||||
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:
|
||||
# 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):
|
||||
# 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)
|
||||
else:
|
||||
# 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 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:
|
||||
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):
|
||||
|
@ -319,7 +329,8 @@ class _IDsIter(requestiter.RequestIter):
|
|||
from_id and message.peer_id != from_id):
|
||||
self.buffer.append(None)
|
||||
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'):
|
||||
|
@ -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)
|
||||
return utils.get_input_peer(chat), m.id
|
||||
|
||||
|
||||
async def send_message(
|
||||
self: 'TelegramClient',
|
||||
dialog: 'hints.DialogLike',
|
||||
|
@ -464,7 +476,8 @@ async def send_message(
|
|||
elif isinstance(message, _custom.Message):
|
||||
message = message._as_input()
|
||||
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)
|
||||
if comment_to is not None:
|
||||
|
@ -523,6 +536,7 @@ async def send_message(
|
|||
|
||||
return self._get_response_message(request, result, entity)
|
||||
|
||||
|
||||
async def forward_messages(
|
||||
self: 'TelegramClient',
|
||||
dialog: 'hints.DialogLike',
|
||||
|
@ -535,10 +549,12 @@ async def forward_messages(
|
|||
as_album: bool = None,
|
||||
schedule: 'hints.DateLike' = None,
|
||||
noforwards: bool = None,
|
||||
send_as: 'hints.DialogLike' = None
|
||||
send_as: 'hints.DialogLike' = None,
|
||||
drop_author: bool = None
|
||||
) -> 'typing.Sequence[_tl.Message]':
|
||||
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)
|
||||
|
||||
|
@ -558,7 +574,8 @@ async def forward_messages(
|
|||
elif isinstance(m, _tl.Message):
|
||||
return m.chat_id
|
||||
else:
|
||||
raise TypeError('Cannot forward messages of type {}'.format(type(m)))
|
||||
raise TypeError(
|
||||
'Cannot forward messages of type {}'.format(type(m)))
|
||||
|
||||
sent = []
|
||||
for _chat_id, chunk in itertools.groupby(messages, key=get_key):
|
||||
|
@ -579,13 +596,16 @@ async def forward_messages(
|
|||
schedule_date=schedule,
|
||||
noforwards=noforwards,
|
||||
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)
|
||||
sent.extend(self._get_response_message(req, result, entity))
|
||||
|
||||
return sent[0] if single else sent
|
||||
|
||||
|
||||
async def edit_message(
|
||||
self: 'TelegramClient',
|
||||
dialog: 'typing.Union[hints.DialogLike, _tl.Message]',
|
||||
|
@ -606,10 +626,10 @@ async def edit_message(
|
|||
if formatting_entities is None:
|
||||
text, formatting_entities = await self._parse_message_text(text, parse_mode)
|
||||
file_handle, media, image = await self._file_to_media(file,
|
||||
supports_streaming=supports_streaming,
|
||||
thumb=thumb,
|
||||
attributes=attributes,
|
||||
force_document=force_document)
|
||||
supports_streaming=supports_streaming,
|
||||
thumb=thumb,
|
||||
attributes=attributes,
|
||||
force_document=force_document)
|
||||
|
||||
if isinstance(message, _tl.InputBotInlineMessageID):
|
||||
request = _tl.fn.messages.EditInlineBotMessage(
|
||||
|
@ -646,6 +666,7 @@ async def edit_message(
|
|||
msg = self._get_response_message(request, await self(request), entity)
|
||||
return msg
|
||||
|
||||
|
||||
async def delete_messages(
|
||||
self: 'TelegramClient',
|
||||
dialog: 'hints.DialogLike',
|
||||
|
@ -668,13 +689,14 @@ async def delete_messages(
|
|||
|
||||
if ty == helpers._EntityType.CHANNEL:
|
||||
res = await self([_tl.fn.channels.DeleteMessages(
|
||||
entity, list(c)) for c in utils.chunks(messages)])
|
||||
entity, list(c)) for c in utils.chunks(messages)])
|
||||
else:
|
||||
res = await self([_tl.fn.messages.DeleteMessages(
|
||||
list(c), revoke) for c in utils.chunks(messages)])
|
||||
|
||||
return sum(r.pts_count for r in res)
|
||||
|
||||
|
||||
async def mark_read(
|
||||
self: 'TelegramClient',
|
||||
dialog: 'hints.DialogLike',
|
||||
|
@ -705,6 +727,7 @@ async def mark_read(
|
|||
|
||||
return False
|
||||
|
||||
|
||||
async def pin_message(
|
||||
self: 'TelegramClient',
|
||||
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)
|
||||
|
||||
|
||||
async def unpin_message(
|
||||
self: 'TelegramClient',
|
||||
dialog: 'hints.DialogLike',
|
||||
|
@ -724,6 +748,7 @@ async def unpin_message(
|
|||
):
|
||||
return await _pin(self, dialog, message, unpin=True, notify=notify)
|
||||
|
||||
|
||||
async def _pin(self, entity, message, *, unpin, notify=False, pm_oneside=False):
|
||||
message = utils.get_message_id(message) or 0
|
||||
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
|
||||
return self._get_response_message(request, result, entity)
|
||||
|
||||
|
||||
async def send_reaction(
|
||||
self: 'TelegramClient',
|
||||
entity: 'hints.DialogLike',
|
||||
|
@ -782,6 +808,7 @@ async def send_reaction(
|
|||
if isinstance(update, _tl.UpdateEditMessage):
|
||||
return update.message.reactions
|
||||
|
||||
|
||||
async def set_quick_reaction(
|
||||
self: 'TelegramClient',
|
||||
reaction: str
|
||||
|
|
Loading…
Reference in New Issue
Block a user