From 788ae99088c226008ad77adf5cb54802ee0e0ec7 Mon Sep 17 00:00:00 2001 From: Klaus-Uwe Mitterer Date: Wed, 17 Feb 2021 06:43:24 +0000 Subject: [PATCH] Blindly code Matrix gateway --- msgio/apps.py | 2 ++ msgio/gateways/matrix.py | 45 ++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 3 files changed, 48 insertions(+) create mode 100644 msgio/gateways/matrix.py diff --git a/msgio/apps.py b/msgio/apps.py index fa0ea74..3096162 100644 --- a/msgio/apps.py +++ b/msgio/apps.py @@ -1,5 +1,7 @@ from django.apps import AppConfig +import msgio.gateways.matrix +import msgio.gateways.telegram class MsgioConfig(AppConfig): name = 'msgio' diff --git a/msgio/gateways/matrix.py b/msgio/gateways/matrix.py new file mode 100644 index 0000000..6529138 --- /dev/null +++ b/msgio/gateways/matrix.py @@ -0,0 +1,45 @@ +from django.views.generic import View +from django.dispatch import receiver + +import json +import asyncio + +from nio import AsyncClient + +from dbsettings.functions import dbsettings + +from ..signals import send_message +from ..models import GatewayUser +from ..helpers import run_filters + +class MatrixDispatcher: + def __init__(self, username=dbsettings.MATRIX_USERNAME, password=dbsettings.MATRIX_PASSWORD, homeserver=dbsettings.MATRIX_HOMESERVER): + self.username = username + self.password = password + self.homeserver = homeserver + + async def send(self, message, room_id): + client = AsyncClient(self.homeserver, self.username) + await client.login(self.password) + await client.join(room_id) + + await client.room_send( + room_id=room_id, + message_type="m.room.message", + content={ + "msgtype": "m.text", + "body": message + } + ) + +@receiver(send_message) +def matrix_sender(sender, **kwargs): + if kwargs["dispatcher"] == "matrix": + notification = kwargs["notification"] + + settings = GatewayUser.objects.get(user=notification.recipient, gateway="matrix") + room_id = settings.gatewayusersetting_set.get(key="room_id").value + + text = run_filters(notification) + + asyncio.get_event_loop().run_until_complete(MatrixDispatcher().send(text, room_id)) diff --git a/requirements.txt b/requirements.txt index d19b323..c50e85d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,3 +14,4 @@ boto3 argon2_cffi python-telegram-bot python-dateutil +matrix-nio \ No newline at end of file