Compare commits

...

15 Commits

Author SHA1 Message Date
Sijmen Schoon
a4ff6e81c8
Merge pull request #43 from vurpo/master
Telegram message formatting changes
2017-11-04 15:50:02 +01:00
Max Sandholm
cd1d66ffee Revert .gitignore to correct version 2017-11-02 15:36:17 +02:00
Max Sandholm
2b186ad31c Merge remote-tracking branch 'upstream/master' 2017-10-25 13:23:51 +03:00
Max Sandholm
9e003f8ff9 Remove "(Telegram)" from mentions 2017-09-21 14:42:12 +03:00
Max Sandholm
e98b7312f6 Correctly use the re.sub function 2017-09-21 14:39:50 +03:00
Max Sandholm
3a21a819b9 Merge branch 'master' of github.com:vurpo/telematrix 2017-09-21 13:36:49 +02:00
Max Sandholm
828f92e37b Fix escaping error 2017-09-21 14:36:37 +03:00
Max Sandholm
2ee824f4ca Merge branch 'master' of github.com:vurpo/telematrix 2017-09-21 13:31:33 +02:00
Max Sandholm
8e422d683b Merge branch 'master' of github.com:vurpo/telematrix 2017-09-21 13:30:23 +02:00
Max Sandholm
d537cfb1b3 Fix quoting formatting and change Matrix->Telegram username formatting 2017-09-21 13:29:26 +02:00
Max Sandholm
09945d75cc Replace Matrix mentions with Telegram mentions (ping) 2017-09-21 13:50:17 +03:00
Max Sandholm
b0aeb11e8a Merge branch 'master' of https://github.com/SijmenSchoon/telematrix 2017-09-21 11:13:44 +03:00
Max Sandholm
fea8d89493 Fix aliases-related breakage 2017-04-08 13:32:19 +03:00
Max Sandholm
15e84f6861 Handle users without profile pictures correctly 2017-04-04 00:07:07 +03:00
Max Sandholm
fc65d5f0f5 Telegram profile pictures and display names are updated
The bridge updates the displayname and/or the avatar of the bridged Matrix
user when the Telegram user changes them.

This is done by checking the name and profile pic of the sender when a message
is received from Telegram, and comparing to the database to see if they have
changed. If they have, it will update the database and send the updates to the
Matrix homeserver.
2017-04-03 22:12:03 +03:00

View File

@ -12,6 +12,7 @@ from datetime import datetime
from time import time from time import time
from urllib.parse import unquote, quote, urlparse, parse_qs from urllib.parse import unquote, quote, urlparse, parse_qs
from io import BytesIO from io import BytesIO
import re
from PIL import Image from PIL import Image
from aiohttp import web, ClientSession from aiohttp import web, ClientSession
@ -82,26 +83,26 @@ def sanitize_html(string):
soup = BeautifulSoup(string, 'html.parser') soup = BeautifulSoup(string, 'html.parser')
for tag in soup.find_all(True): for tag in soup.find_all(True):
if tag.name == 'blockquote': if tag.name == 'blockquote':
tag.string = ('\n' + tag.text).replace('\n', '\n> ').rstrip('\n>') tag.string = ('\n' + tag.text).replace('\n', '\n> ')[3:-3]
if tag.name not in VALID_TAGS: if tag.name not in VALID_TAGS:
tag.hidden = True tag.hidden = True
return soup.renderContents().decode('utf-8') return soup.renderContents().decode('utf-8')
def format_matrix_msg(form, username, content): def format_matrix_msg(form, content):
""" """
Formats a matrix message for sending to Telegram Formats a matrix message for sending to Telegram
:param form: The format string of the message, where the first parameter :param form: The format string of the message, where the first parameter
is the username and the second one the message. is the username and the second one the message.
:param username: The username of the user.
:param content: The content to be sent. :param content: The content to be sent.
:return: The formatted string. :return: The formatted string.
""" """
if 'format' in content and content['format'] == 'org.matrix.custom.html': if 'format' in content and content['format'] == 'org.matrix.custom.html':
sanitized = sanitize_html(content['formatted_body']) sanitized = re.sub("<a href=\\\"https://matrix.to/#/@telegram_([0-9]+):{}\\\">(.+?) \(Telegram\)</a>".format(MATRIX_HOST_BARE), "<a href=\"tg://user?id=\\1\">\\2</a>", content['formatted_body'])
return html.escape(form).format(username, sanitized), 'HTML' sanitized = sanitize_html(sanitized)
return html.escape(form).format(sanitized), 'HTML'
else: else:
return form.format(username, content['body']), None return form.format(html.escape(content['body'])), None
async def download_matrix_file(url, filename): async def download_matrix_file(url, filename):
@ -229,14 +230,14 @@ async def matrix_transaction(request):
continue continue
if content['msgtype'] == 'm.text': if content['msgtype'] == 'm.text':
msg, mode = format_matrix_msg('<{}> {}', displayname, content) msg, mode = format_matrix_msg('{}', content)
response = await group.send_text(msg, parse_mode=mode) response = await group.send_text("<b>{}:</b> {}".format(displayname, msg), parse_mode='HTML')
elif content['msgtype'] == 'm.notice': elif content['msgtype'] == 'm.notice':
msg, mode = format_matrix_msg('[{}] {}', displayname, content) msg, mode = format_matrix_msg('{}', content)
response = await group.send_text(msg, parse_mode=mode) response = await group.send_text("[{}] {}".format(displayname, msg), parse_mode=mode)
elif content['msgtype'] == 'm.emote': elif content['msgtype'] == 'm.emote':
msg, mode = format_matrix_msg('* {} {}', displayname, content) msg, mode = format_matrix_msg('{}', content)
response = await group.send_text(msg, parse_mode=mode) response = await group.send_text("* {} {}".format(displayname, msg), parse_mode=mode)
elif content['msgtype'] == 'm.image': elif content['msgtype'] == 'm.image':
try: try:
url = urlparse(content['url']) url = urlparse(content['url'])
@ -255,8 +256,7 @@ async def matrix_transaction(request):
.format(url.netloc, quote(url.path)) .format(url.netloc, quote(url.path))
url_str = await shorten_url(url_str) url_str = await shorten_url(url_str)
caption = '<{}> {} ({})'.format(displayname, caption = '{} sent an image'.format(displayname)
content['body'], url_str)
response = await group.send_photo(img_file, caption=caption) response = await group.send_photo(img_file, caption=caption)
except: except:
pass pass