From a9b362943fc30eb32be13de493d338a52047853c Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 3 Mar 2018 13:35:50 +0200 Subject: [PATCH] Update Telethon, fix leave messages and stop deleting sessions --- mautrix_telegram/portal.py | 32 ++++++++++++++++---------------- mautrix_telegram/tgclient.py | 12 ++++++------ mautrix_telegram/user.py | 2 +- setup.py | 4 ++-- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py index 9f18eec7..79f44ef4 100644 --- a/mautrix_telegram/portal.py +++ b/mautrix_telegram/portal.py @@ -128,8 +128,8 @@ class Portal: try: hash_content += { MessageMediaContact: lambda media: [media.user_id], - MessageMediaDocument: lambda media: [media.document.id, media.caption], - MessageMediaPhoto: lambda media: [media.photo.id, media.caption], + MessageMediaDocument: lambda media: [media.document.id], + MessageMediaPhoto: lambda media: [media.photo.id], MessageMediaGeo: lambda media: [media.geo.long, media.geo.lat], }[type(event.media)](event.media) except KeyError: @@ -341,9 +341,9 @@ class Portal: puppet = p.Puppet.get(user_id) user = u.User.get_by_tgid(user_id) kick_message = (f"Kicked by {sender.displayname}" - if sender and sender.tgid != user.tgid + if sender and sender.tgid != puppet.tgid else "Left Telegram chat") - if sender and sender.tgid != user.tgid: + if sender and sender.tgid != puppet.tgid: await self.main_intent.kick(self.mxid, puppet.mxid, kick_message) else: await puppet.intent.leave_room(self.mxid) @@ -819,8 +819,8 @@ class Portal: if self.mxid: await user.intent.set_typing(self.mxid, is_typing=True) - async def handle_telegram_photo(self, source, intent, media, relates_to=None): - largest_size = self._get_largest_photo_size(media.photo) + async def handle_telegram_photo(self, source, intent, evt, relates_to=None): + largest_size = self._get_largest_photo_size(evt.media.photo) file = await util.transfer_file_to_matrix(self.db, source.client, intent, largest_size.location) if not file: @@ -833,17 +833,18 @@ class Portal: "orientation": 0, "mimetype": file.mime_type, } - name = media.caption + name = evt.message await intent.set_typing(self.mxid, is_typing=False) return await intent.send_image(self.mxid, file.mxc, info=info, text=name, relates_to=relates_to) - async def handle_telegram_document(self, source, intent, media, relates_to=None): - file = await util.transfer_file_to_matrix(self.db, source.client, intent, media.document) + async def handle_telegram_document(self, source, intent, evt, relates_to=None): + document = evt.media.document + file = await util.transfer_file_to_matrix(self.db, source.client, intent, document) if not file: return None - name = media.caption - for attr in media.document.attributes: + name = evt.message + for attr in document.attributes: if not name and isinstance(attr, DocumentAttributeFilename): name = attr.file_name if not file.was_converted: @@ -851,9 +852,9 @@ class Portal: file.mime_type = mime_from_name or file.mime_type elif isinstance(attr, DocumentAttributeSticker): name = f"Sticker for {attr.alt}" - mime_type = media.document.mime_type or file.mime_type + mime_type = document.mime_type or file.mime_type info = { - "size": media.document.size, + "size": document.size, "mimetype": mime_type, } type = "m.file" @@ -968,10 +969,9 @@ class Portal: elif evt.media: relates_to = formatter.telegram_reply_to_matrix(evt, source) if isinstance(evt.media, MessageMediaPhoto): - response = await self.handle_telegram_photo(source, intent, evt.media, relates_to) + response = await self.handle_telegram_photo(source, intent, evt, relates_to) elif isinstance(evt.media, MessageMediaDocument): - response = await self.handle_telegram_document(source, intent, evt.media, - relates_to) + response = await self.handle_telegram_document(source, intent, evt, relates_to) elif isinstance(evt.media, MessageMediaGeo): response = await self.handle_telegram_location(source, intent, evt.media.geo, relates_to) diff --git a/mautrix_telegram/tgclient.py b/mautrix_telegram/tgclient.py index 089cd7c0..a57f2504 100644 --- a/mautrix_telegram/tgclient.py +++ b/mautrix_telegram/tgclient.py @@ -49,15 +49,15 @@ class MautrixTelegramClient(TelegramClient): return self._get_response_message(request, result) - async def send_file(self, entity, file, mime_type=None, caption=None, attributes=None, - file_name=None, reply_to=None, **kwargs): + async def send_file(self, entity, file, mime_type=None, caption=None, entities=None, + attributes=None, file_name=None, reply_to=None, **kwargs): entity = await self.get_input_entity(entity) reply_to = self._get_message_id(reply_to) file_handle = await self.upload_file(file, file_name=file_name, use_cache=False) if mime_type == "image/png": - media = InputMediaUploadedPhoto(file_handle, caption or "") + media = InputMediaUploadedPhoto(file_handle) else: attributes = attributes or [] attr_dict = {type(attr): attr for attr in attributes} @@ -65,10 +65,10 @@ class MautrixTelegramClient(TelegramClient): media = InputMediaUploadedDocument( file=file_handle, mime_type=mime_type or "application/octet-stream", - attributes=list(attr_dict.values()), - caption=caption or "") + attributes=list(attr_dict.values())) - request = SendMediaRequest(entity, media, reply_to_msg_id=reply_to) + request = SendMediaRequest(entity, media, message=caption, entities=entities, + reply_to_msg_id=reply_to) return self._get_response_message(request, await self(request)) async def download_file_bytes(self, location): diff --git a/mautrix_telegram/user.py b/mautrix_telegram/user.py index 13ed5420..90c9c149 100644 --- a/mautrix_telegram/user.py +++ b/mautrix_telegram/user.py @@ -141,7 +141,7 @@ class User(AbstractUser): self.log.debug(f"Unauthenticated user {self.name} start()ed, deleting...") # User not logged in -> forget user self.client.disconnect() - self.client.session.delete() + # self.client.session.delete() self.delete() return self diff --git a/setup.py b/setup.py index 805c074c..8a3ab5a3 100644 --- a/setup.py +++ b/setup.py @@ -29,9 +29,9 @@ setuptools.setup( "telethon-asyncio-git", ], dependency_links=[ - ("https://github.com/tulir/telethon-asyncio/tarball/0ee04f939267c29f9a684f1e5c90cedd67ecb4f9#egg=telethon-asyncio-git-0.17.4+1" + ("https://github.com/tulir/telethon-asyncio/tarball/4432a2d14eded4463f8f30127d39b2801f671cf1#egg=telethon-asyncio-git-0.17.4+2" if sys.version_info >= (3, 6) - else "https://github.com/tulir/telethon-asyncio/tarball/24ffd719cb6fa3eba6c2585c860c685275e12c52#egg=telethon-asyncio-git-0.17.4+1") + else "https://github.com/tulir/telethon-asyncio/tarball/4432a2d14eded4463f8f30127d39b2801f671cf1#egg=telethon-asyncio-git-0.17.4+2") ], classifiers=[