# Partially written with ChatGPT import os import time import json import argparse import requests import adsms.db import discord_webhook def load_config(config_file): with open(config_file) as f: return json.load(f) def send_text_message(phone, message, key): request = {"phone": phone, "message": message, "key": key} resp = requests.post("https://textbelt.com/text", request) print(resp.json()) def process_subscriptions(con, config, data): subscriptions = db.get_subscriptions(con) print(subscriptions) for sub_id, phone, icao, description, last_seen, platform in subscriptions: if icao in data and data[icao]["seen"] < config["max_age"]: if last_seen + config["min_disappearance"] < time.time(): message = f"{description}\n{config['tracker']}?icao={icao}" if platform == "textbelt": send_text_message(phone, message, config["textbelt_key"]) elif platform == "discord_webhook": print( discord_webhook.DiscordWebhook( url=phone, content=message ).execute() ) print(f"{phone}: {message}") db.update_last_seen_time(con, sub_id) con.commit() def get_current_data(config): # return {"78007e": {"seen": 0}} response = requests.get(config["data"]) planes = response.json()["aircraft"] return {plane["hex"]: plane for plane in planes} def run(config): con = adsms.db.load_database(config["database"]) while True: data = get_current_data(config) process_subscriptions(con, config, data) time.sleep(config["delay"]) con.close() def main(): parser = argparse.ArgumentParser() parser.add_argument("config_file") args = parser.parse_args() config = load_config(args.config_file) try: if config["pid_file"]: with open(config["pid_file"], "w+") as f: f.write(str(os.getpid())) run(config) finally: if config["pid_file"]: os.unlink(config["pid_file"])