57 lines
1.7 KiB
Python
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())
|