diff --git a/discord_presence.py.1 b/discord_presence.py.1 deleted file mode 100644 index dea0a70..0000000 --- a/discord_presence.py.1 +++ /dev/null @@ -1,284 +0,0 @@ -#!/usr/bin/env python3.12 - -import time -import traceback -import requests -import dbus -import re -import random -import discord_presence_priv -import catbox -from setproctitle import setproctitle - -from pypresence import Presence, ActivityType - -setproctitle("disc-presence") - -class DBus: - def __init__(self) -> None: - self.session_bus = dbus.SessionBus() - self.catbox = catbox.Catbox() - try: - self.player_dbus_proxy = self.session_bus.get_object('org.mpris.MediaPlayer2.playerctld', - '/org/mpris/MediaPlayer2') - self.player_interface = dbus.Interface(self.player_dbus_proxy, - 'org.freedesktop.DBus.Properties') - self.interface_metadata = None - self.plex_last = None - self.plex_np = { - 'name': None, - 'details': None, - 'art': None, - 'elapsed': None, - 'duration': None, - } - except: - pass - - - def is_plexing(self) -> bool: - try: - self.interface_metadata = self.player_interface.GetAll('org.mpris.MediaPlayer2.Player').get('Metadata') - if "app.plex.tv" in self.interface_metadata.get('xesam:url'): - return True - print(f"WTF, NO PLEX?") - except: - print(traceback.format_exc()) - return False - - def get_now_playing(self) -> dict | bool: - try: - self.interface_details = self.player_interface.GetAll('org.mpris.MediaPlayer2.Player') - self.interface_metadata = self.interface_details.get('Metadata') - original_art = str(self.interface_metadata.get('mpris:artUrl', '')) - self.plex_np = { - 'name': str(" ".join(self.interface_metadata.get('xesam:artist'))), - 'details': f'{str(self.interface_metadata.get('xesam:album', ''))} - {str(self.interface_metadata.get('xesam:title'))}', - # 'elapsed': time.time() - int(self.interface_details.get('Position')/1000000), - # 'duration': int(self.interface_metadata.get('mpris:length')/1000000), - - } - if not self.plex_last or\ - (self.plex_np.get('name') == self.plex_last.get('name') and self.plex_np.get('details') == self.plex_last.get('details')): - if original_art: - try: - uploaded = self.catbox.upload(original_art.split("file://", maxsplit=1)[1]) - if uploaded: - self.plex_np['art'] = uploaded - else: - self.plex_np['art'] = None - except: - self.plex_np['art'] = None - else: - self.plex_np['art'] = None - self.plex_ - return self.plex_np - except: - self.plex_np = { - 'name': None, - 'details': None, - 'art': None, - 'elapsed': None, - 'duration': None, - } - print(traceback.format_exc()) - return False - - -class DiscordPresence: - def __init__(self): - self.dbus = DBus() - self.last_updated = None - self.last_track = None - self.client_id = discord_presence_priv.CLIENT_ID - self.client_id_plex = discord_presence_priv.CLIENT_ID_PLEX - 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: - lyr_start_idx = 0 - lyr_end_idx = 1 - rand_msg = None - lyrics_content = None - lyrics_current_iteration = None - chosen_image = random.choice([ - { - 'image': "qu", - 'label': "quietscheentchen", - }, - # { - # 'image': "rooster", - # 'label': ":3", - # } - ]) - RPC = Presence(self.client_id, pipe=0) - RPC.connect() - while True: - try: - now = time.time() - plex = self.dbus.is_plexing() - if plex: - plex_current = self.dbus.plex_np - plex_new = self.dbus.get_now_playing() - if plex_current == plex_new: - continue - - - if self.last_updated and (now - self.last_updated < 5): - time.sleep(0.7) - continue - - RPC.client_id = self.client_id - # if RPC.client_id != self.client_id: - # try: - # RPC.close() - # except: - # pass - # RPC = Presence(self.client_id, pipe=0) - # RPC.connect() - - print(RPC.update( - details=plex_new.get('name'), - state=plex_new.get('details'), - large_image=plex_new.get('art', 'https://www.plex.tv/wp-content/themes/plex/assets/img/favicons/plex-192.png'), - # large_image="https://codey.lol/images/cat.png", - # large_text=f"{rand_msg}" if rand_msg else None,k - large_text=lyrics_current_iteration if lyrics_current_iteration else None, - small_image=f"https://codey.lol/images/{chosen_image.get('image')}.png", - small_text=chosen_image.get('label'), - activity_type=ActivityType.WATCHING, - # start=plex_new.get('elapsed'), - # end=plex_new.get('duration')/1000, - )) - time.sleep(1) - continue - - - - request = requests.post(f'{self.api_url}/xc/', json=self.api_req_data, - headers={ - 'content-type': 'application/json; charset=utf-8' - }, timeout=(2, 10)) - request.raise_for_status() - data = request.json().get('response') - track_artist = data.get('artist') - track_title = data.get('title') - start_time = data.get('start') - end_time = data.get('end') - track = f"{data.get('artist')} - {data.get('title')}" - if self.last_updated and (now - self.last_updated < 5): - time.sleep(0.7) - continue - - if self.last_track and self.last_track == track: - lyr_start_idx = lyr_end_idx - lyr_end_idx += 1 - elif self.last_track: - lyr_start_idx = 0 - lyr_end_idx = 1 - - - - - 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)) - # rand_msg = rand_msg_request.json().get('msg').strip() - # rand_msg = re.sub(r'(|)', '', re.sub(r'(
|
|
|\n|\r\n)', ' ', rand_msg)) - # if len(rand_msg) > 126: - # rand_msg = None - - if not self.last_track or not self.last_track == track: - lyrics = requests.post(f'{self.api_url}/lyric_search/', - headers={ - 'content-type': 'application/json; charset=utf-8', - }, - json={ - 'a': track_artist, - 's': track_title, - 'src': 'WEB-RADIO', - }, timeout=(2,10)) - lyrics.raise_for_status() - lyrics_content = lyrics.json().get("lyrics") - - lyrics_current_iteration = " / ".join(lyrics_content.split("
")[lyr_start_idx:lyr_end_idx]).strip() - if not lyrics_current_iteration.strip(): - lyr_start_idx = 0 - lyr_end_idx = 1 - - if len(lyrics_current_iteration) > 128: - lyrics_current_iteration = lyrics_current_iteration.split(" / ", maxsplit=1)[0].strip() - - - - except: - try: - lyrics_current_iteration = " / ".join(lyrics_content.split("
")[0]).strip() - except: - lyrics_content = lyrics_current_iteration = None - print("FAILED TO GET RANDMSG/LYRICS") - print(traceback.format_exc()) - - self.last_updated = now - self.last_track = track - - print(RPC.update( - details=track_title, - state=track_artist, - large_image=f"{self.album_art_url}?t={now}", - # large_image="https://codey.lol/images/cat.png", - # large_text=f"{rand_msg}" if rand_msg else None,k - large_text=lyrics_current_iteration if lyrics_current_iteration else None, - small_image=f"https://codey.lol/images/{chosen_image.get('image')}.png", - small_text=chosen_image.get('label'), - start=start_time, - end=end_time, - activity_type=ActivityType.LISTENING, - buttons=[ - { - "label": "Listen", - "url": "https://codey.lol/radio" - },] - )) - - # match chosen_image.get('image'): - # case "rooster": - # chosen_image = { - # 'image': "qu", - # 'label': "rubber duck :3" - # } - # case "qu": - # chosen_image = { - # 'image': "rooster", - # 'label': ":3", - # } - except: - print(traceback.format_exc()) - time.sleep(5) - continue - except: - print(traceback.format_exc()) - try: - self.loop() - except: - pass - - - -def __init__(): - discord_presence = DiscordPresence() - discord_presence.loop() - -if __name__ == "__main__": - __init__() - \ No newline at end of file