diff options
| author | salmonik <salmonik@tuta.io> | 2026-11-02 15:23:51 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-11-02 15:23:51 +0100 |
| commit | d4ab83f20956fba09133571e14a9a64244b33d64 (patch) | |
| tree | 1f47dd4b1a2307ff806e3d90b63775fccb820c07 | |
| parent | say: post text as a normal message after an invisible ack (diff) | |
| download | senator-sperma-d4ab83f20956fba09133571e14a9a64244b33d64.tar.gz senator-sperma-d4ab83f20956fba09133571e14a9a64244b33d64.zip | |
cron: keep scheduled audio silent
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.
| -rw-r--r-- | src/commands/music.rs | 1 | ||||
| -rw-r--r-- | src/music.rs | 13 | ||||
| -rw-r--r-- | src/tasks/mod.rs | 1 |
3 files changed, 12 insertions, 3 deletions
diff --git a/src/commands/music.rs b/src/commands/music.rs index ecc75c8..245eb88 100644 --- a/src/commands/music.rs +++ b/src/commands/music.rs | |||
| @@ -206,6 +206,7 @@ async fn play_impl( | |||
| 206 | compressed, | 206 | compressed, |
| 207 | reupload: file_reupload.clone(), | 207 | reupload: file_reupload.clone(), |
| 208 | requester: Some(ctx.author().id), | 208 | requester: Some(ctx.author().id), |
| 209 | silent: false, | ||
| 209 | }; | 210 | }; |
| 210 | 211 | ||
| 211 | let outcome = ctx | 212 | let outcome = ctx |
diff --git a/src/music.rs b/src/music.rs index 8dfc4f8..1461f6a 100644 --- a/src/music.rs +++ b/src/music.rs | |||
| @@ -47,6 +47,9 @@ pub struct TrackRequest { | |||
| 47 | /// re-upload the file alongside the "playing" message. | 47 | /// re-upload the file alongside the "playing" message. |
| 48 | pub reupload: Option<(String, String)>, | 48 | pub reupload: Option<(String, String)>, |
| 49 | pub requester: Option<serenity::UserId>, | 49 | pub requester: Option<serenity::UserId>, |
| 50 | /// Suppress the "playing" and failure announcements for this track. | ||
| 51 | /// Cron audio uses this so scheduled playback stays silent. | ||
| 52 | pub silent: bool, | ||
| 50 | } | 53 | } |
| 51 | 54 | ||
| 52 | /// Where an enqueued track goes relative to the current playback. | 55 | /// Where an enqueued track goes relative to the current playback. |
| @@ -331,8 +334,10 @@ impl MusicState { | |||
| 331 | Ok(input) => input, | 334 | Ok(input) => input, |
| 332 | Err(e) => { | 335 | Err(e) => { |
| 333 | warn!(track = %request.display_name, error = %e, "failed to prepare queued track"); | 336 | warn!(track = %request.display_name, error = %e, "failed to prepare queued track"); |
| 334 | let message = lang::fmt_music_track_failed(&request.display_name, &e); | 337 | if !request.silent { |
| 335 | self.announce_failure(guild, message).await; | 338 | let message = lang::fmt_music_track_failed(&request.display_name, &e); |
| 339 | self.announce_failure(guild, message).await; | ||
| 340 | } | ||
| 336 | last_error = Some(e); | 341 | last_error = Some(e); |
| 337 | continue; | 342 | continue; |
| 338 | } | 343 | } |
| @@ -388,7 +393,9 @@ impl MusicState { | |||
| 388 | }, | 393 | }, |
| 389 | ); | 394 | ); |
| 390 | 395 | ||
| 391 | self.announce_playing(announce, &request).await; | 396 | if !request.silent { |
| 397 | self.announce_playing(announce, &request).await; | ||
| 398 | } | ||
| 392 | return Ok(true); | 399 | return Ok(true); |
| 393 | } | 400 | } |
| 394 | } | 401 | } |
diff --git a/src/tasks/mod.rs b/src/tasks/mod.rs index ab0d062..f0585ef 100644 --- a/src/tasks/mod.rs +++ b/src/tasks/mod.rs | |||
| @@ -162,6 +162,7 @@ async fn execute_audio_job(ctx: &CronContext, job: &crate::database::CronJob) { | |||
| 162 | compressed: false, | 162 | compressed: false, |
| 163 | reupload: None, | 163 | reupload: None, |
| 164 | requester: None, | 164 | requester: None, |
| 165 | silent: true, | ||
| 165 | }; | 166 | }; |
| 166 | 167 | ||
| 167 | if let Err(e) = ctx | 168 | if let Err(e) = ctx |
