Browse Source

Add Discord webhook support

main
Samuel Sloniker 10 months ago
parent
commit
f5581175ae
  1. 19
      adsms/__init__.py
  2. 17
      adsms/db.py
  3. 2
      debian/adsms-docs.docs
  4. 20
      debian/adsms.doc-base.ex
  5. 1
      meson.build
  6. 2
      pyproject.toml
  7. 1
      requirements.txt

19
adsms/__init__.py

@ -1,5 +1,3 @@
#!/usr/bin/env python3
# Partially written with ChatGPT
import os
@ -8,6 +6,7 @@ import json
import argparse
import requests
import adsms.db
import discord_webhook
def load_config(config_file):
@ -22,14 +21,21 @@ def send_text_message(phone, message, key):
def process_subscriptions(con, config, data):
for sub_id, phone, icao, description, last_seen in db.get_subscriptions(
con
):
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}"
send_text_message(phone, message, config["textbelt_key"])
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}")
@ -39,6 +45,7 @@ def process_subscriptions(con, config, data):
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}

17
adsms/db.py

@ -1,4 +1,6 @@
import collections
import sqlite3
import time
Subscription = collections.namedtuple(
"Subscription",
@ -8,6 +10,7 @@ Subscription = collections.namedtuple(
"icao",
"description",
"last_seen",
"platform",
],
)
@ -15,9 +18,17 @@ Subscription = collections.namedtuple(
def load_database(file_name):
con = sqlite3.connect(file_name)
con.execute(
cur = con.execute(
"CREATE TABLE IF NOT EXISTS subscriptions(phone VARCHAR, icao VARCHAR, description VARCHAR, last_seen INTEGER)"
)
try:
cur.execute(
"ALTER TABLE subscriptions ADD COLUMN platform DEFAULT 'textbelt'"
)
except sqlite3.OperationalError:
pass
con.commit()
return con
@ -32,6 +43,6 @@ def update_last_seen_time(con, sub_id):
def get_subscriptions(con):
for subscription in con.execute(
"SELECT rowid, phone, icao, description, last_seen FROM subscriptions"
"SELECT rowid, phone, icao, description, last_seen, platform FROM subscriptions"
).fetchall():
return Subscription(*subscription)
yield Subscription(*subscription)

2
debian/adsms-docs.docs vendored

@ -1,2 +0,0 @@
README.source
README.Debian

20
debian/adsms.doc-base.ex vendored

@ -1,20 +1,10 @@
Document: adsms
Title: Debian adsms Manual
Author: <insert document author here>
Author: Samuel Sloniker <sam@kj7rrv.com>
Abstract: This manual describes what adsms is
and how it can be used to
manage online manuals on Debian systems.
and how it can be used to send SMS notifications
based on ADS-B data.
Section: unknown
Format: debiandoc-sgml
Files: /usr/share/doc/adsms/adsms.sgml.gz
Format: postscript
Files: /usr/share/doc/adsms/adsms.ps.gz
Format: text
Files: /usr/share/doc/adsms/adsms.text.gz
Format: HTML
Index: /usr/share/doc/adsms/html/index.html
Files: /usr/share/doc/adsms/html/*.html
Format: Text
Files: /usr/share/doc/adsms/README.md

1
meson.build

@ -10,3 +10,4 @@ py.install_sources(
install_data('run_adsms.py', install_dir: get_option('bindir'), rename: 'adsms')
install_data('adsms.service', install_dir: 'lib/systemd/system')
install_data('example_config.json', install_dir: 'etc', rename: 'adsms.json')
install_data('README.md', install_dir: 'usr/share/doc/adsms/')

2
pyproject.toml

@ -14,7 +14,7 @@ classifiers = [
"Development Status :: 2 - Pre-Alpha",
"License :: OSI Approved :: GNU Affero General Public License v3",
]
dependencies = ["requests"]
dependencies = ["requests", "discord-webhook"]
requires-python = ">=3.7"
[project.urls]

1
requirements.txt

@ -1 +1,2 @@
requests
discord-webhook

Loading…
Cancel
Save