diff --git a/docs/USAGE.md b/docs/USAGE.md index 9b5d7eb..849a92b 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -1569,11 +1569,12 @@ and voice transmission. !play Search YouTube, play a random result !stop Stop playback, clear queue !skip Skip current track +!seek Seek to position (1:30, 90, +30, -30) !resume Resume last stopped/skipped track from saved position !queue Show queue !queue Add to queue (alias for !play) !np Now playing -!volume [0-100] Get/set volume +!volume [0-100] Get/set volume (persisted across restarts) !keep Keep current track's audio file after playback !kept [clear] List kept files or clear all !testtone Play 3-second 440Hz test tone @@ -1585,7 +1586,7 @@ and voice transmission. - Playlists are expanded into individual tracks; excess tracks are truncated at the queue limit - Volume changes ramp smoothly over ~1s (no abrupt jumps) -- Default volume: 50% +- Default volume: 50%; persisted via `bot.state` across restarts - Titles resolved via `yt-dlp --flat-playlist` before playback - Audio is downloaded before playback (`data/music/`); files are deleted after playback unless `!keep` is used. Falls back to streaming on @@ -1614,6 +1615,23 @@ automatically resumes playback -- but only after the channel is silent - Chat messages announce resume intentions and abort reasons - The reconnect watcher starts via the `on_connected` plugin lifecycle hook +### Seeking + +Fast-forward or rewind within the currently playing track. + +``` +!seek 1:30 Seek to 1 minute 30 seconds +!seek 90 Seek to 90 seconds +!seek +30 Jump forward 30 seconds +!seek -30 Jump backward 30 seconds +!seek +1:00 Jump forward 1 minute +``` + +- Absolute offsets (`1:30`, `90`) seek to that position from the start +- Relative offsets (`+30`, `-1:00`) jump from the current position +- Negative seeks are clamped to the start of the track +- Seeking restarts the audio pipeline at the new position + ### Disconnect-Resilient Streaming During brief network disconnects (~5-15s), the audio stream stays alive.