From c69eb02f2adf1b7dec6fb280869653b8b5c26996 Mon Sep 17 00:00:00 2001 From: JosXa Date: Sun, 1 Oct 2017 21:17:38 +0200 Subject: [PATCH] Implemented delete_messages --- telethon/telegram_client.py | 48 ++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/telethon/telegram_client.py b/telethon/telegram_client.py index 57d8b759..0c8cfc64 100644 --- a/telethon/telegram_client.py +++ b/telethon/telegram_client.py @@ -1,9 +1,11 @@ import os +import re from datetime import datetime, timedelta from functools import lru_cache from mimetypes import guess_type -import re +from .tl.functions import channels +from .tl.functions import messages try: import socks @@ -346,6 +348,40 @@ class TelegramClient(TelegramBareClient): return None # Should not happen + def delete_messages(self, entity, message_ids, revoke=True): + """ + Deletes a message from a chat, optionally "for everyone" with argument + `revoke` set to `True`. + + The `revoke` argument has no effect for Channels and Supergroups, + where it inherently behaves as being `True`. + + Note: The `entity` argument can be `None` for normal chats, but it's + mandatory to delete messages from Channels and Supergroups. It is also + possible to supply a chat_id which will be automatically resolved to + the right type of InputPeer. + + :param entity: ID or Entity of the chat + :param list message_ids: IDs (or a single ID) of the message to delete + :param revoke: Delete the message for everyone or just this client + :returns messages.AffectedMessages: Messages affected by deletion. + """ + + if not isinstance(message_ids, list): + message_ids = [message_ids] + + if entity is None: + return self(messages.DeleteMessagesRequest(message_ids, revoke=revoke)) + + entity = self.get_input_entity(entity) + + if isinstance(entity, InputPeerChannel): + return self(channels.DeleteMessagesRequest(entity, message_ids)) + else: + return self(messages.DeleteMessagesRequest(message_ids, revoke=revoke)) + + + def get_message_history(self, entity, limit=20, @@ -394,7 +430,7 @@ class TelegramClient(TelegramBareClient): utils.find_user_or_chat(m.to_id, result.users, result.chats) for m in result.messages - ] + ] return total_messages, result.messages, entities @@ -435,7 +471,7 @@ class TelegramClient(TelegramBareClient): return reply_to if isinstance(reply_to, TLObject) and \ - type(reply_to).SUBCLASS_OF_ID == 0x790009e3: + type(reply_to).SUBCLASS_OF_ID == 0x790009e3: # hex(crc32(b'Message')) = 0x790009e3 return reply_to.id @@ -568,8 +604,8 @@ class TelegramClient(TelegramBareClient): """ possible_names = [] if not isinstance(entity, TLObject) or type(entity).subclass_of_id in ( - 0x2da17977, 0xc5af5d94, 0x1f4661b9, 0xd49a2697 - ): + 0x2da17977, 0xc5af5d94, 0x1f4661b9, 0xd49a2697 + ): # Maybe it is an user or a chat? Or their full versions? # # The hexadecimal numbers above are simply: @@ -941,4 +977,4 @@ class TelegramClient(TelegramBareClient): 'Make sure you have encountered this peer before.'.format(peer) ) - # endregion + # endregion