# bridge.py - Production Discord RPC Bridge (Linux/macOS) import sys, json, socket, struct, os, uuid, base64, time CLIENT_ID = "1462186088184549661" LAST_STATUS = "" def get_discord_path(): for i in range(10): path = os.path.join(os.environ.get('XDG_RUNTIME_DIR', '/tmp'), f'discord-ipc-{i}') if os.path.exists(path): return path return None def send_packet(s, op, data): payload = json.dumps(data).encode('utf-8') header = struct.pack('H", ws.recv(2))[0] elif length == 127: length = struct.unpack(">Q", ws.recv(8))[0] data = b"" while len(data) < length: data += ws.recv(length - len(data)) msg = json.loads(data.decode('utf-8')) if msg['event'] == 'discord:update': d = msg['data'] set_activity(ds, ppid, d.get('details'), d.get('state'), d.get('largeImageKey'), d.get('startTimestamp'), d.get('endTimestamp'), d.get('largeImageText'), d.get('smallImageKey'), d.get('smallImageText')) elif msg['event'] == 'discord:clear': set_activity(ds, ppid, "Idling", "Monochrome") elif msg['event'] == 'windowClose': break except socket.timeout: continue except: continue # Cleanup try: send_packet(ds, 1, { "cmd": "SET_ACTIVITY", "args": {"pid": ppid, "activity": None}, "nonce": str(uuid.uuid4()) }) time.sleep(0.1) ds.close() except: pass if __name__ == "__main__": main()