import asyncio import datetime import logging import os import time import json from ssl import create_default_context from statistics import mean from flask import Flask, request from flask_restful import Resource, Api # import pytz # import requests 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)) # def now(): # return ( # pytz.utc.localize(datetime.datetime.utcnow()) # .astimezone(pytz.timezone("Europe/Brussels")) # .isoformat() # ) class PostEndpoint(Resource): def post(self): logging.info(request.data) data = json.loads(request.data) msg = f"{data.get('title', '')}: {data.get('message', '')}" publish(msg, MATRIX_ROOM_ID) return None, 204 api.add_resource(PostEndpoint, '/')