Update Telethon, fix leave messages and stop deleting sessions

This commit is contained in:
Tulir Asokan
2018-03-03 13:35:50 +02:00
parent ead445b81f
commit a9b362943f
4 changed files with 25 additions and 25 deletions
+16 -16
View File
@@ -128,8 +128,8 @@ class Portal:
try: try:
hash_content += { hash_content += {
MessageMediaContact: lambda media: [media.user_id], MessageMediaContact: lambda media: [media.user_id],
MessageMediaDocument: lambda media: [media.document.id, media.caption], MessageMediaDocument: lambda media: [media.document.id],
MessageMediaPhoto: lambda media: [media.photo.id, media.caption], MessageMediaPhoto: lambda media: [media.photo.id],
MessageMediaGeo: lambda media: [media.geo.long, media.geo.lat], MessageMediaGeo: lambda media: [media.geo.long, media.geo.lat],
}[type(event.media)](event.media) }[type(event.media)](event.media)
except KeyError: except KeyError:
@@ -341,9 +341,9 @@ class Portal:
puppet = p.Puppet.get(user_id) puppet = p.Puppet.get(user_id)
user = u.User.get_by_tgid(user_id) user = u.User.get_by_tgid(user_id)
kick_message = (f"Kicked by {sender.displayname}" 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") 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) await self.main_intent.kick(self.mxid, puppet.mxid, kick_message)
else: else:
await puppet.intent.leave_room(self.mxid) await puppet.intent.leave_room(self.mxid)
@@ -819,8 +819,8 @@ class Portal:
if self.mxid: if self.mxid:
await user.intent.set_typing(self.mxid, is_typing=True) await user.intent.set_typing(self.mxid, is_typing=True)
async def handle_telegram_photo(self, source, intent, media, relates_to=None): async def handle_telegram_photo(self, source, intent, evt, relates_to=None):
largest_size = self._get_largest_photo_size(media.photo) largest_size = self._get_largest_photo_size(evt.media.photo)
file = await util.transfer_file_to_matrix(self.db, source.client, intent, file = await util.transfer_file_to_matrix(self.db, source.client, intent,
largest_size.location) largest_size.location)
if not file: if not file:
@@ -833,17 +833,18 @@ class Portal:
"orientation": 0, "orientation": 0,
"mimetype": file.mime_type, "mimetype": file.mime_type,
} }
name = media.caption name = evt.message
await intent.set_typing(self.mxid, is_typing=False) await intent.set_typing(self.mxid, is_typing=False)
return await intent.send_image(self.mxid, file.mxc, info=info, text=name, return await intent.send_image(self.mxid, file.mxc, info=info, text=name,
relates_to=relates_to) relates_to=relates_to)
async def handle_telegram_document(self, source, intent, media, relates_to=None): async def handle_telegram_document(self, source, intent, evt, relates_to=None):
file = await util.transfer_file_to_matrix(self.db, source.client, intent, media.document) document = evt.media.document
file = await util.transfer_file_to_matrix(self.db, source.client, intent, document)
if not file: if not file:
return None return None
name = media.caption name = evt.message
for attr in media.document.attributes: for attr in document.attributes:
if not name and isinstance(attr, DocumentAttributeFilename): if not name and isinstance(attr, DocumentAttributeFilename):
name = attr.file_name name = attr.file_name
if not file.was_converted: if not file.was_converted:
@@ -851,9 +852,9 @@ class Portal:
file.mime_type = mime_from_name or file.mime_type file.mime_type = mime_from_name or file.mime_type
elif isinstance(attr, DocumentAttributeSticker): elif isinstance(attr, DocumentAttributeSticker):
name = f"Sticker for {attr.alt}" 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 = { info = {
"size": media.document.size, "size": document.size,
"mimetype": mime_type, "mimetype": mime_type,
} }
type = "m.file" type = "m.file"
@@ -968,10 +969,9 @@ class Portal:
elif evt.media: elif evt.media:
relates_to = formatter.telegram_reply_to_matrix(evt, source) relates_to = formatter.telegram_reply_to_matrix(evt, source)
if isinstance(evt.media, MessageMediaPhoto): 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): elif isinstance(evt.media, MessageMediaDocument):
response = await self.handle_telegram_document(source, intent, evt.media, response = await self.handle_telegram_document(source, intent, evt, relates_to)
relates_to)
elif isinstance(evt.media, MessageMediaGeo): elif isinstance(evt.media, MessageMediaGeo):
response = await self.handle_telegram_location(source, intent, evt.media.geo, response = await self.handle_telegram_location(source, intent, evt.media.geo,
relates_to) relates_to)
+6 -6
View File
@@ -49,15 +49,15 @@ class MautrixTelegramClient(TelegramClient):
return self._get_response_message(request, result) return self._get_response_message(request, result)
async def send_file(self, entity, file, mime_type=None, caption=None, attributes=None, async def send_file(self, entity, file, mime_type=None, caption=None, entities=None,
file_name=None, reply_to=None, **kwargs): attributes=None, file_name=None, reply_to=None, **kwargs):
entity = await self.get_input_entity(entity) entity = await self.get_input_entity(entity)
reply_to = self._get_message_id(reply_to) reply_to = self._get_message_id(reply_to)
file_handle = await self.upload_file(file, file_name=file_name, use_cache=False) file_handle = await self.upload_file(file, file_name=file_name, use_cache=False)
if mime_type == "image/png": if mime_type == "image/png":
media = InputMediaUploadedPhoto(file_handle, caption or "") media = InputMediaUploadedPhoto(file_handle)
else: else:
attributes = attributes or [] attributes = attributes or []
attr_dict = {type(attr): attr for attr in attributes} attr_dict = {type(attr): attr for attr in attributes}
@@ -65,10 +65,10 @@ class MautrixTelegramClient(TelegramClient):
media = InputMediaUploadedDocument( media = InputMediaUploadedDocument(
file=file_handle, file=file_handle,
mime_type=mime_type or "application/octet-stream", mime_type=mime_type or "application/octet-stream",
attributes=list(attr_dict.values()), attributes=list(attr_dict.values()))
caption=caption or "")
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)) return self._get_response_message(request, await self(request))
async def download_file_bytes(self, location): async def download_file_bytes(self, location):
+1 -1
View File
@@ -141,7 +141,7 @@ class User(AbstractUser):
self.log.debug(f"Unauthenticated user {self.name} start()ed, deleting...") self.log.debug(f"Unauthenticated user {self.name} start()ed, deleting...")
# User not logged in -> forget user # User not logged in -> forget user
self.client.disconnect() self.client.disconnect()
self.client.session.delete() # self.client.session.delete()
self.delete() self.delete()
return self return self
+2 -2
View File
@@ -29,9 +29,9 @@ setuptools.setup(
"telethon-asyncio-git", "telethon-asyncio-git",
], ],
dependency_links=[ 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) 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=[ classifiers=[