dnswatch/key.py
2021-02-06 12:50:21 +01:00

57 lines
1.7 KiB
Python

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())