diff --git a/src/main/java/netneutrality/music/SourceFinder.java b/src/main/java/netneutrality/music/SourceFinder.java index e18eb07..b78073d 100644 --- a/src/main/java/netneutrality/music/SourceFinder.java +++ b/src/main/java/netneutrality/music/SourceFinder.java @@ -14,6 +14,7 @@ public class SourceFinder { public enum AudioSourceType { Youtube, + YTMusic, Soundcloud, Bandcamp, Vimeo, @@ -22,17 +23,22 @@ public class SourceFinder { } - private static final Pattern youtubePattern = Pattern.compile("^(?:https?://)?(?:(?:www\\.)?)?(?:youtube\\.com|youtu\\.be)/.*?(?:embed|e|v|watch.*?v=)?/?([-_a-z0-9]{10,})?(?:&?index=\\d+)?(?>(?:playlist\\?|&)?list=([^#\\\\&?]{12,}))?", Pattern.CASE_INSENSITIVE); + private static final Pattern youtubePattern = Pattern.compile("^(?:https?://)?(?:www\\.)?(?:youtube\\.com|youtu\\.be)/.*?(?:embed|e|v|watch.*?v=)?/?([-_a-zA-Z0-9]{10,})?(?:&?index=\\d+)?(?>(?:playlist\\?|&)?list=([^#\\\\&?]{12,}))?", Pattern.CASE_INSENSITIVE); + private static final Pattern youtubeMusicPattern = Pattern.compile("^(?:https?://)?(?:www\\.)?music\\.(?:youtube\\.com|youtu\\.be)/.*?(?:embed|e|v|watch.*?v=)?/?([-_a-zA-Z0-9]{10,})?(?:&?index=\\d+)?(?>(?:playlist\\?|&)?list=([^#\\\\&?]{12,}))?", Pattern.CASE_INSENSITIVE); private static final Pattern soundcloudPattern = Pattern.compile("^(?:https?://)?(?:www\\.)?(?:m\\.)?soundcloud\\.com/([a-zA-Z0-9-_]+)/([a-zA-Z0-9-_]+)(?:\\\\?.*|)$", Pattern.CASE_INSENSITIVE); private static Matcher twitchMatcher; public static AudioSourceType getSource(String url) { Matcher youtubeMatcher = youtubePattern.matcher(url); + Matcher youtubeMusicMatcher = youtubeMusicPattern.matcher(url); Matcher soundcloudMatcher = soundcloudPattern.matcher(url); if (youtubeMatcher.find()) return AudioSourceType.Youtube; + if (youtubeMusicMatcher.find()) + return AudioSourceType.YTMusic; + if (soundcloudMatcher.find()) return AudioSourceType.Soundcloud; @@ -46,7 +52,7 @@ public class SourceFinder { String identifier; identifier = switch (getSource(url)) { - case Youtube, Soundcloud -> url; + case Youtube, YTMusic, Soundcloud -> url; case YTSearch -> "ytsearch:" + url; default -> null; }; diff --git a/src/main/java/netneutrality/utils/MessageFunction.java b/src/main/java/netneutrality/utils/MessageFunction.java index cd90d77..c3be185 100644 --- a/src/main/java/netneutrality/utils/MessageFunction.java +++ b/src/main/java/netneutrality/utils/MessageFunction.java @@ -83,7 +83,7 @@ public class MessageFunction { if (type == SourceFinder.AudioSourceType.Youtube || type == SourceFinder.AudioSourceType.YTSearch) { url = String.format("https://youtu.be/%s", track.getIdentifier()); - thumbnail = String.format("https://img.youtube.com/vi/%s/default.jpg", track.getIdentifier()); + thumbnail = String.format("https://i3.ytimg.com/vi/%s/hqdefault.jpg", track.getIdentifier()); } if (thumbnail != null) { @@ -118,8 +118,12 @@ public class MessageFunction { String thumbnail = null; if (type == SourceFinder.AudioSourceType.Youtube || type == SourceFinder.AudioSourceType.YTSearch) { - url = String.format("https://youtu.be/%s", playlist.getSelectedTrack().getIdentifier()); - thumbnail = String.format("https://img.youtube.com/vi/%s/default.jpg", playlist.getSelectedTrack().getIdentifier()); + url = String.format("https://youtu.be/%s", playlist.getTracks().get(0).getIdentifier()); + thumbnail = String.format("https://i3.ytimg.com/vi/%s/hqdefault.jpg", playlist.getTracks().get(0).getIdentifier()); + } + + if (type == SourceFinder.AudioSourceType.YTMusic) { + thumbnail = String.format("https://i3.ytimg.com/vi/%s/hqdefault.jpg", playlist.getTracks().get(0).getIdentifier()); } if (thumbnail != null) {