64 lines
1.5 KiB
Python
64 lines
1.5 KiB
Python
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', '<no title>')}: {data.get('message', '<no message>')}"
|
|
publish(msg, MATRIX_ROOM_ID)
|
|
return None, 204
|
|
|
|
|
|
api.add_resource(PostEndpoint, '/')
|