Send Telegram timestamps and source URLs to Matrix

Fixes #97
Fixes #100
This commit is contained in:
Tulir Asokan
2018-03-29 20:57:11 +03:00
parent 22f430c340
commit 68a743a563
+21 -9
View File
@@ -891,6 +891,11 @@ class Portal:
if self.mxid:
await user.intent.set_typing(self.mxid, is_typing=True)
def get_external_url(self, evt: Message):
if self.peer_type == "channel" and self.username is not None:
return f"https://t.me/{self.username}/{evt.id}"
return None
async def handle_telegram_photo(self, source: u.User, intent, evt: Message, 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,
@@ -903,7 +908,9 @@ class Portal:
prefix_html=f"<img src='{file.mxc}' alt='Inline Telegram photo'/><br/>",
prefix_text="Inline image: ")
await intent.set_typing(self.mxid, is_typing=False)
return await intent.send_text(self.mxid, text, html=html, relates_to=relates_to)
return await intent.send_text(self.mxid, text, html=html, relates_to=relates_to,
timestamp=evt.date,
external_url=self.get_external_url(evt))
info = {
"h": largest_size.h,
"w": largest_size.w,
@@ -915,7 +922,8 @@ class Portal:
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)
relates_to=relates_to, timestamp=evt.date,
external_url=self.get_external_url(evt))
async def handle_telegram_document(self, source, intent, evt: Message, relates_to=None):
document = evt.media.document
@@ -960,9 +968,11 @@ class Portal:
type = "m.image"
await intent.set_typing(self.mxid, is_typing=False)
return await intent.send_file(self.mxid, file.mxc, info=info, text=name, file_type=type,
relates_to=relates_to)
relates_to=relates_to, timestamp=evt.date,
external_url=self.get_external_url(evt))
def handle_telegram_location(self, source, intent, location, relates_to=None):
def handle_telegram_location(self, source, intent, evt, relates_to=None):
location = evt.media.geo
long = location.long
lat = location.lat
long_char = "E" if long > 0 else "W"
@@ -986,13 +996,14 @@ class Portal:
"format": "org.matrix.custom.html",
"formatted_body": formatted_body,
"m.relates_to": relates_to or None,
})
}, timestamp=evt.date, external_url=self.get_external_url(evt))
async def handle_telegram_text(self, source, intent, evt):
self.log.debug(f"Sending {evt.message} to {self.mxid} by {intent.mxid}")
text, html, relates_to = await formatter.telegram_to_matrix(evt, source, self.main_intent)
await intent.set_typing(self.mxid, is_typing=False)
return await intent.send_text(self.mxid, text, html=html, relates_to=relates_to)
return await intent.send_text(self.mxid, text, html=html, relates_to=relates_to,
timestamp=evt.date, external_url=self.get_external_url(evt))
async def handle_telegram_edit(self, source, sender, evt):
if not self.mxid:
@@ -1018,7 +1029,9 @@ class Portal:
is_edit=True)
intent = sender.intent if sender else self.main_intent
await intent.set_typing(self.mxid, is_typing=False)
response = await intent.send_text(self.mxid, text, html=html, relates_to=relates_to)
response = await intent.send_text(self.mxid, text, html=html, relates_to=relates_to,
timestamp=evt.date,
external_url=self.get_external_url(evt))
mxid = response["event_id"]
@@ -1062,8 +1075,7 @@ class Portal:
elif isinstance(media, MessageMediaDocument):
response = await self.handle_telegram_document(source, intent, evt, relates_to)
elif isinstance(media, MessageMediaGeo):
response = await self.handle_telegram_location(source, intent, media.geo,
relates_to)
response = await self.handle_telegram_location(source, intent, evt, relates_to)
else:
self.log.debug("Unhandled Telegram media: %s", media)
return