66 lines
1.9 KiB
Python
Raw Normal View History

import requests
import time
from mastodon import Mastodon
# === CONFIGURATION ===
ICECAST_JSON_URL = ""
SONG_TRIGGER = "Spiderbait - Stevie"
MASTODON_BASE_URL = "https://chatwithus.live"
MASTODON_TOKEN = "" # replace with your token
TOOT_TEXT = "AH BUU BUU BUU BUU"
# --- END CONFIG ---
masto = Mastodon(
access_token=MASTODON_TOKEN,
api_base_url=MASTODON_BASE_URL
)
last_seen = False
while True:
try:
resp = requests.get(ICECAST_JSON_URL, timeout=10)
data = resp.json()
# Correct place to look is data["icestats"]["source"]
sources = data.get("icestats", {}).get("source")
if sources is None:
print("No sources found in Icecast status.")
time.sleep(30)
continue
# If it's a list, find a source with a title or currently playing track
if isinstance(sources, list):
main_source = None
for src in sources:
if src.get("title") or src.get("yp_currently_playing"):
main_source = src
break
if not main_source:
main_source = sources[0]
elif isinstance(sources, dict):
main_source = sources
else:
print("No valid sources found.")
time.sleep(30)
continue
now_playing = main_source.get("title") or main_source.get("yp_currently_playing", "")
now_playing = now_playing.strip()
print("Now playing:", now_playing)
# Only toot if the song is playing and it wasn't seen last poll
if SONG_TRIGGER.lower() in now_playing.lower():
if not last_seen:
masto.status_post(TOOT_TEXT, visibility='public')
print(f"Tooted: {TOOT_TEXT}")
last_seen = True
else:
last_seen = False
except Exception as e:
print(f"Error: {e}")
time.sleep(30) # check every 30 seconds