diff options
Diffstat (limited to '')
| -rw-r--r-- | src/commands/music.rs | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/src/commands/music.rs b/src/commands/music.rs index 05abb9c..6acac00 100644 --- a/src/commands/music.rs +++ b/src/commands/music.rs | |||
| @@ -253,6 +253,7 @@ async fn play_impl( | |||
| 253 | }) | 253 | }) |
| 254 | .ok_or_else(lang::err_not_in_voice)?; | 254 | .ok_or_else(lang::err_not_in_voice)?; |
| 255 | 255 | ||
| 256 | let file_reupload = file.as_ref().map(|f| (f.url.clone(), f.filename.clone())); | ||
| 256 | let src = resolve_source(ctx, melodia, file).await?; | 257 | let src = resolve_source(ctx, melodia, file).await?; |
| 257 | 258 | ||
| 258 | let call; | 259 | let call; |
| @@ -296,7 +297,7 @@ async fn play_impl( | |||
| 296 | .lock() | 297 | .lock() |
| 297 | .await | 298 | .await |
| 298 | .insert(guild_id.get(), handle); | 299 | .insert(guild_id.get(), handle); |
| 299 | ctx.say(lang::fmt_music_playing(&src.display_name)).await?; | 300 | send_music_msg(ctx, &src.display_name, file_reupload).await?; |
| 300 | return Ok(()); | 301 | return Ok(()); |
| 301 | } | 302 | } |
| 302 | info!(url = %redact_url(&src.url), "downloading for compression"); | 303 | info!(url = %redact_url(&src.url), "downloading for compression"); |
| @@ -365,7 +366,7 @@ async fn play_impl( | |||
| 365 | .await | 366 | .await |
| 366 | .insert(guild_id.get(), handle); | 367 | .insert(guild_id.get(), handle); |
| 367 | 368 | ||
| 368 | ctx.say(lang::fmt_music_playing(&src.display_name)).await?; | 369 | send_music_msg(ctx, &src.display_name, file_reupload).await?; |
| 369 | Ok(()) | 370 | Ok(()) |
| 370 | } | 371 | } |
| 371 | 372 | ||
| @@ -412,6 +413,37 @@ pub async fn join(ctx: Context<'_>) -> Result<()> { | |||
| 412 | Ok(()) | 413 | Ok(()) |
| 413 | } | 414 | } |
| 414 | 415 | ||
| 416 | /// Send the "playing" message, optionally reuploading a user-provided file | ||
| 417 | /// so other channel members can download it. | ||
| 418 | async fn send_music_msg( | ||
| 419 | ctx: Context<'_>, | ||
| 420 | display_name: &str, | ||
| 421 | file_reupload: Option<(String, String)>, | ||
| 422 | ) -> Result<()> { | ||
| 423 | if let Some((url, filename)) = file_reupload { | ||
| 424 | match ctx.data().http_client.get(&url).send().await { | ||
| 425 | Ok(resp) => match resp.bytes().await { | ||
| 426 | Ok(bytes) => { | ||
| 427 | if ctx | ||
| 428 | .send(poise::CreateReply::default().content(lang::fmt_music_playing(display_name)).attachment( | ||
| 429 | serenity::CreateAttachment::bytes(bytes.to_vec(), filename.clone()), | ||
| 430 | )) | ||
| 431 | .await | ||
| 432 | .is_ok() | ||
| 433 | { | ||
| 434 | return Ok(()); | ||
| 435 | } | ||
| 436 | error!("send_music_msg: ctx.send with attachment failed, falling back"); | ||
| 437 | } | ||
| 438 | Err(e) => error!("send_music_msg: failed to read file bytes: {e}"), | ||
| 439 | }, | ||
| 440 | Err(e) => error!("send_music_msg: failed to download file: {e}"), | ||
| 441 | } | ||
| 442 | } | ||
| 443 | ctx.say(lang::fmt_music_playing(display_name)).await?; | ||
| 444 | Ok(()) | ||
| 445 | } | ||
| 446 | |||
| 415 | pub fn commands() -> Vec<poise::Command<Data, Error>> { | 447 | pub fn commands() -> Vec<poise::Command<Data, Error>> { |
| 416 | vec![grajcuj(), stop(), join()] | 448 | vec![grajcuj(), stop(), join()] |
| 417 | } | 449 | } |
