49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
import asyncio
|
|
import json
|
|
import logging
|
|
import os
|
|
|
|
from flask import Flask, request
|
|
from flask_restful import Resource, Api
|
|
from nio import AsyncClient
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
app = Flask(__name__)
|
|
api = Api(app)
|
|
|
|
MATRIX_HOMESERVER_URL = os.environ.get("MATRIX_HOMESERVER_URL")
|
|
MATRIX_USER = os.environ.get("MATRIX_USER")
|
|
MATRIX_PASSWORD = os.environ.get("MATRIX_PASSWORD")
|
|
MATRIX_ROOM_ID = os.environ.get("MATRIX_ROOM_ID")
|
|
|
|
|
|
async def send_message(msg, room_id):
|
|
client = AsyncClient(
|
|
MATRIX_HOMESERVER_URL,
|
|
MATRIX_USER
|
|
)
|
|
await client.login(MATRIX_PASSWORD)
|
|
await client.room_send(
|
|
room_id=room_id,
|
|
message_type="m.room.message",
|
|
content={"msgtype": "m.text", "body": msg},
|
|
)
|
|
await client.close()
|
|
|
|
|
|
def publish(msg, room_id):
|
|
asyncio.get_event_loop().run_until_complete(send_message(msg, room_id))
|
|
|
|
|
|
class SendLogs(Resource):
|
|
def post(self):
|
|
logging.info(request.data)
|
|
data = json.loads(request.data)
|
|
msg = f"{data.get('title', '<no title>')}: {data.get('message', '<no message>')}"
|
|
publish(msg, MATRIX_ROOM_ID)
|
|
return None, 204
|
|
|
|
|
|
api.add_resource(SendLogs, '/')
|