From f512d9d22dc3b57bd53834c393304081e9fd4faa Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 9 Sep 2026 13:25:45 +0200 Subject: message-contextual /grajcuj Signed-off-by: salmonik --- src/commands/music.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/commands/music.rs') diff --git a/src/commands/music.rs b/src/commands/music.rs index 019a015..e528bf5 100644 --- a/src/commands/music.rs +++ b/src/commands/music.rs @@ -1,4 +1,6 @@ use poise::serenity_prelude as serenity; +use super::utilities::{FileType, extract_urls, file_type}; + use tracing::{error, info}; use super::autocomplete::audio_file; @@ -459,6 +461,26 @@ async fn send_music_msg( Ok(()) } +/// Right-click a message → play the first audio file, or first URL if no audio files. +#[poise::command(context_menu_command = "Odtwórz")] +pub async fn message_grajcuj(ctx: Context<'_>, message: serenity::Message) -> Result<()> { + // Files > links: prefer audio attachments first. + if let Some(att) = message + .attachments + .iter() + .find(|a| file_type(&a.filename) == FileType::Audio) + { + return play_impl(ctx, None, Some(att.clone()), false).await; + } + // Fallback: first URL in message content. + if let Some(url) = extract_urls(&message.content).into_iter().next() { + return play_impl(ctx, Some(url), None, false).await; + } + ctx.say(lang::L_MUSIC_NO_AUDIO_ATTACHMENTS).await?; + Ok(()) +} + + pub fn commands() -> Vec> { - vec![grajcuj(), stop(), join()] + vec![grajcuj(), stop(), join(), message_grajcuj()] } -- cgit v1.2.3