# Discord Rich Presence Plugin (Rust) A Navidrome plugin that displays your currently playing track on Discord using Rich Presence. This is the Rust implementation demonstrating how to use the `nd-pdk` library. ## ⚠️ Warning This plugin is for **demonstration purposes only**. It requires storing your Discord token in the Navidrome configuration file, which: 1. Is not secure (tokens should never be stored in plain text) 2. May violate Discord's Terms of Service **Use at your own risk.** ## Features - Shows currently playing track on Discord Rich Presence - Displays album artwork - Shows track progress with start/end timestamps - Automatically clears presence when track finishes - Supports multiple users ## Capabilities This plugin implements multiple capabilities to demonstrate the nd-pdk library: - **Scrobbler**: Receives now-playing events from Navidrome - **SchedulerCallback**: Handles heartbeat and activity clearing timers - **WebSocketCallback**: Communicates with Discord gateway (text, binary, error, and close handlers) ## Configuration Configure in the Navidrome UI (Settings → Plugins → discord-rich-presence-rs): | Key | Description | Example | |---------------|--------------------------------------|---------------------------| | `clientid` | Your Discord application ID | `123456789012345678` | | `user.` | Discord token for the specified user | `user.alice` = `token123` | Each user is configured as a separate key with the `user.` prefix. ### Getting Configuration Values 1. **Client ID**: Create a Discord Application at https://discord.com/developers/applications and copy the Application ID 2. **Discord Token**: This requires extracting your user token from Discord (not recommended for security reasons) 3. **Multiple Users**: Add multiple user keys: ```properties user.user1 = "token1" user.user2 = "token2" ``` ## Building ```bash # From the plugins/examples directory make discord-rich-presence-rs.ndp # This creates discord-rich-presence-rs.ndp containing: # - manifest.json # - plugin.wasm ``` ## Installation 1. Build the plugin using the command above 2. Copy the `.ndp` file to your Navidrome plugins directory 3. Enable and configure the plugin in the Navidrome UI (Settings → Plugins) 4. Restart Navidrome if needed ## Using nd-pdk Library This plugin demonstrates how to use the Rust plugin development kit: ```rust use nd_pdk::host::{artwork, cache, scheduler, websocket}; use std::collections::HashMap; // Get artwork URL let url = artwork::get_track_url(track_id, 300)?; // Cache operations cache::set_string("key", "value", 3600)?; if let Some(value) = cache::get_string("key")? { // Use the cached value } // Schedule tasks scheduler::schedule_one_time(60, "payload", "task-id")?; scheduler::schedule_recurring("@every 30s", "heartbeat", "heartbeat-task")?; // WebSocket operations let conn_id = websocket::connect("wss://example.com/socket", HashMap::new(), "my-conn")?; websocket::send_text(&conn_id, "Hello")?; ``` ## License GPL-3.0