diff --git a/discord_presence.py b/discord_presence.py new file mode 100644 index 0000000..4124e03 --- /dev/null +++ b/discord_presence.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3.12 + +import time +import traceback +import requests +import re +import discord_presence_priv + +from pypresence import Presence, ActivityType + +class DiscordPresence: + def __init__(self): + self.last_updated = None + self.last_track = None + self.client_id = discord_presence_priv.CLIENT_ID + self.api_key = discord_presence_priv.API_KEY + self.api_url = 'https://api.codey.lol' + self.album_art_url = 'https://codey.lol/images/radio_art.jpg' + self.api_req_data = { + 'bid': 0, + 'cmd': 'radio_metadata', + 'key': f'Bearer {self.api_key}', + } + def loop(self): + try: + RPC = Presence(self.client_id, pipe=0) + RPC.connect() + while True: + try: + rand_msg = None + now = time.time() + request = requests.post(f'{self.api_url}/xc/', json=self.api_req_data, + headers={ + 'content-type': 'application/json; charset=utf-8' + }, timeout=(2, 5)) + request.raise_for_status() + data = request.json().get('response') + track_artist = data.get('artist') + track_title = data.get('title') + track = f"{data.get('artist')} - {data.get('title')}" + if self.last_track == track or self.last_updated and (now - self.last_updated < 10): + print(f"Skip: {self.last_track} & {(now - self.last_updated)}") + time.sleep(5) + continue + self.last_updated = now + self.last_track = track + + try: + rand_msg_request = requests.post(f'{self.api_url}/randmsg/', + headers={ + 'content-type': 'application/json; charset=utf-8' + }, json={ + 'short': True, + }, timeout=(1, 2)) + print(f"Rand msg text: {rand_msg_request.text}") + rand_msg = rand_msg_request.json().get('msg').strip() + rand_msg = re.sub(r'(|)', '', re.sub(r'(
|
|
)', ' ', rand_msg)) + if len(rand_msg) > 126: + rand_msg = None + except: + print("FAILED TO GET RANDMSG") + print(traceback.format_exc()) + + print(RPC.update( + details=track_title, + state=f"by {track_artist}", + large_image=f"{self.album_art_url}?{now}", + large_text=f"~ {rand_msg}" if rand_msg else None, + activity_type=ActivityType.LISTENING, + buttons=[ + { + "label": "Site", + "url": "https://codey.lol" + },] + )) + print(f"Track: {track}") + except: + print(traceback.format_exc()) + time.sleep(5) + continue + except: + print(traceback.format_exc()) + + + +def __init__(): + discord_presence = DiscordPresence() + discord_presence.loop() + +if __name__ == "__main__": + __init__() + \ No newline at end of file