add error message for premium tracks #6

Merged
jheuel merged 1 commits from dev into main 2024-06-18 10:18:59 +02:00
2 changed files with 59 additions and 6 deletions
Showing only changes of commit fa17ed75f6 - Show all commits

View File

@@ -1,2 +1,20 @@
#[allow(dead_code)]
pub(crate) const BLURPLE: u32 = 0x58_65_F2; pub(crate) const BLURPLE: u32 = 0x58_65_F2;
#[allow(dead_code)]
pub(crate) const YELLOW: u32 = 0xFE_E7_5C; pub(crate) const YELLOW: u32 = 0xFE_E7_5C;
#[allow(dead_code)]
pub(crate) const WHITE: u32 = 0xFF_FF_FF;
#[allow(dead_code)]
pub(crate) const GREYPLE: u32 = 0x99_AA_B5;
#[allow(dead_code)]
pub(crate) const BLACK: u32 = 0x23_27_2A;
#[allow(dead_code)]
pub(crate) const DARK_BUT_NOT_BLACK: u32 = 0x2C_2F_33;
#[allow(dead_code)]
pub(crate) const NOT_QUITE_BLACK: u32 = 0x23_27_2A;
#[allow(dead_code)]
pub(crate) const GREEN: u32 = 0x57_F2_87;
#[allow(dead_code)]
pub(crate) const FUCHSIA: u32 = 0xEB_45_9E;
#[allow(dead_code)]
pub(crate) const RED: u32 = 0xED_42_45;

View File

@@ -47,6 +47,15 @@ async fn get_tracks(
.map_while(Result::ok) .map_while(Result::ok)
.flat_map(|line| serde_json::from_str(&line)) .flat_map(|line| serde_json::from_str(&line))
.collect(); .collect();
if tracks.is_empty() {
if let Ok(stderr) = String::from_utf8(output.stderr) {
if stderr.contains("This video is only available to Music Premium members") {
return Err("This video is only available to Music Premium members".into());
}
}
return Err("No tracks found".into());
}
tracing::debug!("tracks: {:?}", tracks); tracing::debug!("tracks: {:?}", tracks);
Ok(tracks) Ok(tracks)
} }
@@ -99,7 +108,23 @@ pub(crate) async fn play(
debug!("query: {:?}", query); debug!("query: {:?}", query);
let tracks = get_tracks(query).await?; let tracks = match get_tracks(query).await {
Err(e) => {
let content = format!("{}", e);
let embeds = vec![EmbedBuilder::new()
.description(content)
.color(colors::RED)
.build()];
state
.http
.interaction(interaction.application_id)
.update_response(&interaction.token)
.embeds(Some(&embeds))?
.await?;
return Ok(());
}
Ok(tracks) => tracks,
};
if tracks.len() > 1 { if tracks.len() > 1 {
let first_track = tracks.first().unwrap(); let first_track = tracks.first().unwrap();
@@ -140,11 +165,6 @@ pub(crate) async fn play(
let mut src = YoutubeDl::new(reqwest::Client::new(), url.clone()); let mut src = YoutubeDl::new(reqwest::Client::new(), url.clone());
let src_copy = src.clone(); let src_copy = src.clone();
let track: Track = src_copy.into(); let track: Track = src_copy.into();
//state
// .tracks
// .entry(guild_id)
// .or_default()
// .insert(track.uuid, src);
if let Ok(metadata) = src.aux_metadata().await { if let Ok(metadata) = src.aux_metadata().await {
debug!("metadata: {:?}", metadata); debug!("metadata: {:?}", metadata);
@@ -239,4 +259,19 @@ mod tests {
assert!(!tracks.is_empty()); assert!(!tracks.is_empty());
} }
} }
#[tokio::test]
async fn test_premium_tracks() {
let urls = ["https://www.youtube.com/watch?v=QgMZRmxQ0Dc"];
for url in urls.iter() {
println!("url: {:?}", url);
let tracks = get_tracks(url.to_string()).await;
assert!(tracks.is_err());
assert!(tracks
.err()
.unwrap()
.to_string()
.contains("This video is only available to Music Premium members"));
}
}
} }