| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | revert required permissionsmain | salmonik | 27 hours | 4 | -39/+58 |
| | | | | | Signed-off-by: salmonik <salmonik@tuta.io> | ||||
| * | tests: skip the piper smoke test when models are absent | salmonik | 4 days | 1 | -2/+8 |
| | | |||||
| * | events: track voice channel moves | salmonik | 4 days | 1 | -0/+16 |
| | | |||||
| * | tts: initialize piper exactly once | salmonik | 4 days | 1 | -42/+39 |
| | | |||||
| * | music: keep preparation out of the guild lock and requeue failed connects | salmonik | 4 days | 1 | -99/+119 |
| | | |||||
| * | docs: sync with current behavior | salmonik | 4 days | 5 | -40/+57 |
| | | |||||
| * | config: harden the shared temp directory | salmonik | 4 days | 3 | -8/+65 |
| | | |||||
| * | docker: pin and verify a week-old yt-dlp release | salmonik | 4 days | 2 | -6/+13 |
| | | |||||
| * | leaderboard: use competition ranks consistently | salmonik | 4 days | 1 | -1/+8 |
| | | |||||
| * | web: percent-encode UTF-8 query bytes | salmonik | 4 days | 1 | -7/+22 |
| | | |||||
| * | autocomplete: key results by extension filter and reject the placeholder | salmonik | 4 days | 3 | -7/+27 |
| | | |||||
| * | cron: validate expressions and allocate ids atomically | salmonik | 4 days | 4 | -19/+19 |
| | | |||||
| * | music: reject live streams on the yt-dlp path | salmonik | 4 days | 2 | -0/+9 |
| | | |||||
| * | music: decode compressed playback without a temp file | salmonik | 4 days | 2 | -12/+34 |
| | | |||||
| * | tts: attach the generated WAV without a temp file | salmonik | 4 days | 1 | -11/+3 |
| | | |||||
| * | qr: cap image dimensions and allocation | salmonik | 4 days | 1 | -2/+12 |
| | | |||||
| * | downloads: cap yt-dlp media size | salmonik | 4 days | 2 | -0/+27 |
| | | |||||
| * | net: drop unused import | salmonik | 4 days | 1 | -1/+1 |
| | | |||||
| * | config: make voice recording opt-in | salmonik | 4 days | 1 | -4/+4 |
| | | |||||
| * | net: block private and link-local URLs | salmonik | 4 days | 8 | -1/+151 |
| | | |||||
| * | docker: install ImageMagick for image compress/convert | salmonik | 4 days | 2 | -0/+2 |
| | | |||||
| * | music: announce a directly started track once | salmonik | 4 days | 1 | -8/+10 |
| | | |||||
| * | cron: simplify the first-fire lookup | salmonik | 4 days | 1 | -8/+1 |
| | | |||||
| * | recording: reject a zero-length window | salmonik | 4 days | 2 | -2/+16 |
| | | |||||
| * | cron/triggers: keep pre-scoping rows manageable | salmonik | 4 days | 2 | -8/+15 |
| | | |||||
| * | tts: run piper loading and synthesis on blocking threads | salmonik | 4 days | 1 | -16/+28 |
| | | |||||
| * | processes: add timeouts and keep decoding off the runtime | salmonik | 4 days | 4 | -29/+53 |
| | | |||||
| * | http: add connect and request timeouts | salmonik | 4 days | 5 | -3/+21 |
| | | |||||
| * | tts: bound the audio cache and request length | salmonik | 4 days | 1 | -5/+86 |
| | | |||||
| * | autocomplete: bound the in-memory caches | salmonik | 4 days | 1 | -6/+24 |
| | | |||||
| * | events: never join or move voice just to play TTS | salmonik | 4 days | 1 | -8/+16 |
| | | |||||
| * | recording: keep one buffer per guild | salmonik | 4 days | 3 | -34/+41 |
| | | |||||
| * | triggers: scope groups to the guild that created them | salmonik | 4 days | 4 | -24/+64 |
| | | |||||
| * | cron: scope jobs to the guild that created them | salmonik | 4 days | 2 | -19/+47 |
| | | |||||
| * | commands: gate admin, trigger, cron and recording behind permissions | salmonik | 4 days | 4 | -14/+18 |
| | | |||||
| * | utilities: sanitize filenames and isolate temp operations | salmonik | 4 days | 1 | -48/+105 |
| | | |||||
| * | yt-dlp: ignore configs and stop option injection | salmonik | 4 days | 2 | -3/+16 |
| | | |||||
| * | copyparty: never send the password to foreign hosts | salmonik | 4 days | 4 | -28/+165 |
| | | |||||
| * | say: do not abort if the ephemeral ack is already gone | salmonik | 5 days | 1 | -1/+3 |
| | | |||||
| * | cron: keep scheduled audio silent | salmonik | 5 days | 3 | -3/+12 |
| | | | | | | | | Add a per-track silent flag. Cron already uses play_now (interrupt the current track), but play_next_locked still announced the track to the last known text channel; suppress playing and failure announcements for silent tracks, including when a cron track fails to prepare. | ||||
| * | say: post text as a normal message after an invisible ack | salmonik | 5 days | 1 | -7/+15 |
| | | | | | | | Acknowledge the interaction with a zero-width ephemeral reply, delete it, then send the text through ChannelId::say so it lands as a normal channel message instead of an interaction reply. | ||||
| * | docker: bake espeak-ng data for Piper TTS | salmonik | 11 days | 5 | -9/+47 |
| | | | | | | | | | | | | espeak-rs-sys installs espeak-ng-data into the build tree and compiles that path in as the default, so the runtime image failed with 'phontab: No such file or directory'. Copy the data from the builder to /usr/share and point PIPER_ESPEAKNG_DATA_DIRECTORY there; compose overrides the host path from .env. Also trim trailing slashes from Copyparty base URLs, document that env_file changes need --force-recreate, and clean inline comments in .env.example. | ||||
| * | contextual play should add to the last in the queue | salmonik | 11 days | 1 | -8/+6 |
| | | | | | Signed-off-by: salmonik <salmonik@tuta.io> | ||||
| * | docker: build and run on Debian trixie | salmonik | 11 days | 4 | -0/+156 |
| | | | | | | | | | | | | Add a multi-stage image that compiles inside Debian trixie and runs on the same glibc/libssl/libopus, avoiding the Arch-built binary failing on Debian. The runtime image installs ffmpeg, qalc, the shared libraries, and the latest yt-dlp zipapp, and runs as uid 1000. compose.yaml mounts data/ and piper/, overrides TTS_MODEL_PATH for the container layout, and builds with host networking because the default Docker bridge DNS cannot resolve crates.io or deb.debian.org on this host. | ||||
| * | music: group playback commands under /music | salmonik | 11 days | 5 | -31/+66 |
| | | | | | | | | | | Graduate grajcuj/skip/queue/stop/join into the /music parent and drop the top-level names. On startup, reconcile global slash commands and delete any that are no longer registered, since Discord otherwise keeps stale commands after a rename or move. Docs updated for the new command layout and queue semantics. | ||||
| * | music: add per-guild queue with now/next/last, skip and queue | salmonik | 11 days | 6 | -269/+790 |
| | | | | | | | | | | | Tracks are queued in memory per guild, defaulting to append (last). Playback auto-advances on TrackEvent::End/Error with a per-track token so manual stops and skips cannot double-advance. /music queue shows the current track followed by pending items. /stop clears the queue. Cron audio now goes through the same MusicState instead of poking the track-handle map directly. | ||||
| * | silence songbird udp_rx decode noise | salmonik | 2026-09-09 | 1 | -1/+6 |
| | | | | | Signed-off-by: salmonik <salmonik@tuta.io> | ||||
| * | record: 2x gain on mp3 encode | salmonik | 2026-09-09 | 1 | -0/+5 |
| | | |||||
| * | test recorder ring semantics; extract mix_tick | salmonik | 2026-09-09 | 1 | -50/+187 |
| | | |||||
| * | wire recording into voice manager, config, events, /record command | salmonik | 2026-09-09 | 8 | -5/+158 |
| | | |||||
