#! /usr/bin/env python # from .event import Event # from .scraping import get_soup, process_soup, get_events_today import os from nio import AsyncClient from textwrap import dedent from markdown2 import Markdown import asyncio from .sql_connector import fetch_events, Event MATRIX_URL=os.environ.get("MATRIX_URL","https://matrix.pvv.ntnu.no") MATRIX_USER=os.environ.get("MATRIX_USER","@bot_calendar:pvv.ntnu.no") MATRIX_TOKEN=os.environ.get("MATRIX_TOKEN") ANNOUNCEMENT_CHANNEL=os.environ.get("ANNOUNCEMENT_CHANNEL", "!announcements:pvv.ntnu.no") client = None def create_announcement(event,atEveryone): url = "https://www.pvv.ntnu.no/hendelser/info.php?id={}".format(event.id) msgText = dedent('''\ ## Dagens arrangement / Event of the Day: "{name}" - 🕒 **{start}** - 📍 **{location}** {description} [Les mer / Read More]({url}) ''').format( name=event.name, start=event.start.strftime('%H:%M'), location=event.location, description=event.description, url=url, ) if atEveryone: msgText = msgText + '\n@room' return msgText async def sendMatrixAnnouncement(event: Event, channel: str = ANNOUNCEMENT_CHANNEL, atEveryone: bool = False) -> None: msgText = create_announcement(event,atEveryone) return await client.room_send( room_id=channel, message_type="m.room.message", content={ "msgtype": "m.text", "body": msgText, "format": "org.matrix.custom.html", "formatted_body": Markdown().convert(msgText) } ) async def sendCalendarEvents() -> None: global client client = AsyncClient(MATRIX_URL, MATRIX_USER) client.access_token = MATRIX_TOKEN eventsToday = fetch_events() for event in eventsToday: await sendMatrixAnnouncement(event, ANNOUNCEMENT_CHANNEL, False) await client.close() def main(): asyncio.run(sendCalendarEvents()) if __name__ == "__main__": main()