diff --git a/appservice.py b/appservice.py index 707c7ea..293a4b2 100644 --- a/appservice.py +++ b/appservice.py @@ -25,6 +25,8 @@ def on_receive_events(transaction): and not app.config['MATRIX_PNUT_PREFIX'] in event["user_id"] and not 'pnut-bridge' in event["user_id"]): + embed = None + if (event['content']['msgtype'] == 'm.text' or event['content']['msgtype'] == 'm.notice'): if user: @@ -42,6 +44,16 @@ def on_receive_events(transaction): text = "* " + get_displayname(event["user_id"]) + " " + event['content']['body'] elif event['content']['msgtype'] == 'm.image': imgurl = app.config['MATRIX_HOST'] + '/_matrix/media/r0/download/' + event['content']['url'][6:] + value = {"type": "photo", "version": "1.0"} + value["title"] = event['content']['body'] + value["url"] = imgurl + value["width"] = event['content']['info']['w'] + value["height"] = event['content']['info']['h'] + value["thumbnail_width"] = event['content']['info']['thumbnail_info']['w'] + value["thumbnail_height"] = event['content']['info']['thumbnail_info']['h'] + value["thumbnail_url"] = self.api.get_download_url(event['content']['info']['thumbnail_url']) + rawitem = {"type": "io.pnut.core.oembed", "value": value} + embed = [rawitem] if user: token = user.pnut_token text = "" @@ -67,7 +79,7 @@ def on_receive_events(transaction): requests.put(url, headers={"Content-Type": "application/json"}, data=json.dumps({})) else: if text: - r = Pnut(token).channel_post(chan_id, text) + r = Pnut(token).channel_post(chan_id, text, embed) if r.status_code == 201: msgid = json.loads(r.text)['data']['id'] if token == app.config['MATRIX_PNUT_TOKEN']: diff --git a/pnutlib.py b/pnutlib.py index 2219264..25c5927 100644 --- a/pnutlib.py +++ b/pnutlib.py @@ -145,13 +145,17 @@ class Pnut: r = requests.post(url, data=body, headers=headers) return r - def channel_post(self, chan_id, text): + def channel_post(self, chan_id, text, raw): url = "https://api.pnut.io/v0/channels/" + str(chan_id) + "/messages" headers = { "Authorization": "Bearer " + self.token, "Content-Type": "application/json" } - body = json.dumps({"text": text }) + data = {"text": text } + if raw: + url += "?include_raw=1" + data["raw"] = raw + body = json.dumps(data) r = requests.post(url, data=body, headers=headers) return r