You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.1 KiB
82 lines
2.1 KiB
# 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"])
|
|
|