import asyncio import os import time import dns.resolver from nio import AsyncClient class App: def __init__(self, user="", password="", room_id="", records=[]): self.user = user self.password = password self.room_id = room_id self.records = records self.cache = {} self.resolver = dns.resolver.Resolver() self.resolver.nameservers = ['8.8.8.8'] self.client = AsyncClient("https://doesnt.social", self.user) async def setup(self): status = await self.client.login(self.password) print(status) print("i will be monitoring: {self.records}") await self.send_message("hi there, i'm marvin") async def send_message(self, message: str): await self.client.room_send( room_id=self.room_id, message_type="m.room.message", content={"msgtype": "m.text", "body": message}, ) async def run(self): await self.setup() while True: await self.update() time.sleep(60) async def update(self): for record in self.records: print(f"checking {record}") results = self.resolver.resolve(record) results = [str(r) for r in results] results.sort() if results != self.cache.get(record, []): await self.send_message(f"records for {record} updated: {results}") self.cache[record] = results if __name__ == "__main__": app = App( user=os.environ["USER"], password=os.environ["PASSWORD"], room_id=os.environ["ROOM_ID"], records=os.environ["RECORDS"].split(","), ) asyncio.get_event_loop().run_until_complete(app.run())