From db9fa2fbfce501cd179dad742ba16228547ee38b Mon Sep 17 00:00:00 2001 From: Miguel Mano Date: Wed, 20 Apr 2022 15:33:26 +0100 Subject: [PATCH] fix: handle age restricted videos (#194) * handle age restricted videos * print default InputError for other arms --- src/commands/play.rs | 4 ++-- src/errors.rs | 19 ++++++++++++++++--- src/strings.rs | 3 ++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/commands/play.rs b/src/commands/play.rs index 8937eb70..b7708a8a 100644 --- a/src/commands/play.rs +++ b/src/commands/play.rs @@ -332,11 +332,11 @@ async fn get_track_source(query_type: QueryType) -> Result YouTubeRestartable::ytdl(query, true) .await - .map_err(|_| ParrotError::TrackNotFound), + .map_err(ParrotError::TrackFail), QueryType::Keywords(query) => YouTubeRestartable::ytdl_search(query, true) .await - .map_err(|_| ParrotError::TrackNotFound), + .map_err(ParrotError::TrackFail), _ => unreachable!(), } diff --git a/src/errors.rs b/src/errors.rs index f8bd408a..8e0733d3 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -1,10 +1,11 @@ use crate::strings::{ FAIL_ANOTHER_CHANNEL, FAIL_AUTHOR_DISCONNECTED, FAIL_AUTHOR_NOT_FOUND, FAIL_NO_VOICE_CONNECTION, FAIL_WRONG_CHANNEL, NOTHING_IS_PLAYING, QUEUE_IS_EMPTY, - TRACK_NOT_FOUND, + TRACK_INAPPROPRIATE, TRACK_NOT_FOUND, }; use rspotify::ClientError as RSpotifyClientError; use serenity::{model::misc::Mention, prelude::SerenityError}; +use songbird::input::error::Error as InputError; use std::fmt::{Debug, Display}; use std::{error::Error, fmt}; @@ -19,7 +20,7 @@ pub enum ParrotError { WrongVoiceChannel, AuthorNotFound, NothingPlaying, - TrackNotFound, + TrackFail(InputError), AlreadyConnected(Mention), Serenity(SerenityError), RSpotify(RSpotifyClientError), @@ -50,7 +51,19 @@ impl Display for ParrotError { f.write_fmt(format_args!("{} {}", FAIL_ANOTHER_CHANNEL, mention)) } Self::NothingPlaying => f.write_str(NOTHING_IS_PLAYING), - Self::TrackNotFound => f.write_str(TRACK_NOT_FOUND), + Self::TrackFail(err) => match err { + InputError::Json { + error: _, + parsed_text, + } => { + if parsed_text.contains("Sign in to confirm your age") { + f.write_str(TRACK_INAPPROPRIATE) + } else { + f.write_str(TRACK_NOT_FOUND) + } + } + _ => f.write_str(&format!("{err}")), + }, Self::Serenity(err) => f.write_str(&format!("{err}")), Self::RSpotify(err) => f.write_str(&format!("{err}")), } diff --git a/src/strings.rs b/src/strings.rs index 01472b30..b8ef9107 100644 --- a/src/strings.rs +++ b/src/strings.rs @@ -51,7 +51,8 @@ pub const SPOTIFY_INVALID_QUERY: &str = pub const SPOTIFY_PLAYLIST_FAILED: &str = "⚠️ **Failed to fetch playlist!**\nIt's likely that this playlist is either private or a personalized recommendation playlist generated by Spotify."; pub const STOPPED: &str = "⏹️ Stopped!"; pub const TRACK_DURATION: &str = "Track duration: "; -pub const TRACK_NOT_FOUND: &str = "⚠️ Could not play track! It seems your query yielded no results."; +pub const TRACK_NOT_FOUND: &str = "⚠️ **Could not play track!**\nYour request yielded no results."; +pub const TRACK_INAPPROPRIATE: &str = "⚠️ **Could not play track!**\nThe video you requested may be inappropriate for some users, so sign-in is required."; pub const TRACK_TIME_TO_PLAY: &str = "Estimated time until play: "; pub const VERSION_LATEST: &str = "Find the latest version [here]"; pub const VERSION: &str = "Version";