Skip to content

Commit f5c8527

Browse files
committed
Manually implement ip rotation
1 parent c8051cf commit f5c8527

File tree

11 files changed

+52
-19
lines changed

11 files changed

+52
-19
lines changed

application/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ tasks {
2121
dependencies {
2222
// LL holds all our versions
2323
compileOnly(libs.lavalink.api)
24+
compileOnly(libs.lavalink.server)
2425
compileOnly(libs.lavaplayer)
26+
compileOnly(libs.lavaplayer.rotator)
2527
compileOnly(libs.http)
2628
compileOnly(libs.jackson.annotations)
2729
compileOnly(libs.jsoup)

application/src/main/java/me/duncte123/lyrics/HttpClientProvider.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,38 @@
11
package me.duncte123.lyrics;
22

3-
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
4-
import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager;
53
import com.sedmelluq.discord.lavaplayer.tools.ExceptionTools;
64
import com.sedmelluq.discord.lavaplayer.tools.io.HttpClientTools;
75
import com.sedmelluq.discord.lavaplayer.tools.io.HttpInterface;
86
import com.sedmelluq.discord.lavaplayer.tools.io.HttpInterfaceManager;
7+
import com.sedmelluq.lava.extensions.youtuberotator.YoutubeIpRotatorSetup;
8+
import com.sedmelluq.lava.extensions.youtuberotator.planner.*;
9+
import lavalink.server.config.RateLimitConfig;
10+
import lavalink.server.config.ServerConfig;
11+
12+
import java.util.Optional;
913

1014
public class HttpClientProvider implements AutoCloseable {
1115
private final HttpInterfaceManager httpInterfaceManager;
1216

13-
public HttpClientProvider(AudioPlayerManager playerManager) {
14-
final YoutubeAudioSourceManager sourceManager = playerManager.source(YoutubeAudioSourceManager.class);
17+
public HttpClientProvider(AbstractRoutePlanner routePlanner, ServerConfig serverConfig) {
18+
this.httpInterfaceManager = HttpClientTools.createDefaultThreadLocalManager();
19+
20+
if (routePlanner != null) {
21+
final int retryLimit = Optional.ofNullable(serverConfig.getRatelimit())
22+
.map(RateLimitConfig::getRetryLimit)
23+
.orElse(-1);
24+
25+
final YoutubeIpRotatorSetup rotator;
26+
27+
if (retryLimit < 0) {
28+
rotator = new YoutubeIpRotatorSetup(routePlanner);
29+
} else if (retryLimit == 0) {
30+
rotator = new YoutubeIpRotatorSetup(routePlanner).withRetryLimit(Integer.MAX_VALUE);
31+
} else {
32+
rotator = new YoutubeIpRotatorSetup(routePlanner).withRetryLimit(retryLimit);
33+
}
1534

16-
if (sourceManager != null) {
17-
this.httpInterfaceManager = (HttpInterfaceManager) sourceManager.getMainHttpConfiguration();
18-
} else {
19-
this.httpInterfaceManager = HttpClientTools.createDefaultThreadLocalManager();
35+
rotator.forConfiguration(this.httpInterfaceManager, false).setup();
2036
}
2137
}
2238

application/src/main/java/me/duncte123/lyrics/LyricsClient.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ public Future<List<SearchTrack>> search(String query, String region) {
118118

119119
final var result = request(SEARCH_URL, new SearchRequest(
120120
Context.DEFAULT_MOBILE_REQUEST_WITH_REGION.apply(region),
121-
query
121+
query,
122+
ONLY_TRACKS_SEARCH_PARAMS
122123
));
123124

124125
// /contents/tabbedSearchResultsRenderer/tabs/0/tabRenderer/content/sectionListRenderer/contents/1/musicCardShelfRenderer/title/runs/0/navigationEndpoint/watchEndpoint/videoId
@@ -132,7 +133,8 @@ public Future<List<SearchTrack>> search(String query, String region) {
132133
.get("sectionListRenderer")
133134
.get("contents");
134135

135-
contents.values()
136+
// Top result, seems to be empty with the new param
137+
/*contents.values()
136138
.stream()
137139
.filter((it) -> !it.get("musicCardShelfRenderer").isNull())
138140
.findFirst()
@@ -151,7 +153,7 @@ public Future<List<SearchTrack>> search(String query, String region) {
151153
if (title != null && videoId != null) {
152154
resList.add(new SearchTrack(videoId, title));
153155
}
154-
});
156+
});*/
155157

156158
contents.values()
157159
.stream()

application/src/main/java/me/duncte123/lyrics/utils/YouTubeUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import static me.duncte123.lyrics.utils.JsonUtils.getRunningText;
1414

1515
public final class YouTubeUtils {
16+
public static final String ONLY_TRACKS_SEARCH_PARAMS = "EgWKAQIIAWoQEAMQBBAJEAoQBRAREBAQFQ%3D%3D";
17+
1618
@Nullable
1719
public static String getBrowseEndpoint(JsonBrowser browser) {
1820
return browser.get("contents")

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ dependencies {
8585
compileOnly(libs.jackson.annotations)
8686
compileOnly(libs.lavalink.server)
8787
compileOnly(libs.lavaplayer)
88+
compileOnly(libs.lavaplayer.rotator)
8889

8990
implementation(projects.protocol)
9091
implementation(projects.application)

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
lavalink-api = "4.0.0"
33
lavalink-server = "4.0.0"
44
lavalyrics = "0932f77"
5+
lavaplayer = "2.1.0"
56

67
[libraries]
78
# No versions? That is correct, lavalink server has the version for lavaplayer.
@@ -10,6 +11,7 @@ http = { group = "org.apache.httpcomponents", name = "httpclient" }
1011
jackson-databind = { group = "com.fasterxml.jackson.core", name = "jackson-databind" }
1112
jackson-annotations = { group = "com.fasterxml.jackson.core", name = "jackson-annotations" }
1213
lavaplayer = { group = "dev.arbjerg", name = "lavaplayer" }
14+
lavaplayer-rotator = { group = "dev.arbjerg", name = "lavaplayer-ext-youtube-rotator", version.ref = "lavaplayer" }
1315
commons-io = { group = "commons-io", name = "commons-io", version = "2.13.0" }
1416
jsoup = { group = "org.jsoup", name = "jsoup", version = "1.16.1" }
1517
lavalink-server = { group = "dev.arbjerg.lavalink", name = "Lavalink-Server", version.ref = "lavalink-server" }

lavalyrics/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ tasks {
3030
dependencies {
3131
// LL holds all our versions
3232
compileOnly(libs.lavalink.api)
33+
compileOnly(libs.lavalink.server)
34+
compileOnly(libs.lavaplayer)
35+
compileOnly(libs.lavaplayer.rotator)
3336

3437
compileOnly(libs.lavalyrics)
3538

lavalyrics/src/main/java/me/duncte123/lyrics/lavalink/JavaAudioLyricsManager.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
88
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException.Severity;
99
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
10+
import com.sedmelluq.lava.extensions.youtuberotator.planner.AbstractRoutePlanner;
11+
import lavalink.server.config.ServerConfig;
1012
import me.duncte123.lyrics.GeniusClient;
1113
import me.duncte123.lyrics.HttpClientProvider;
1214
import me.duncte123.lyrics.LyricsClient;
@@ -28,8 +30,8 @@ public class JavaAudioLyricsManager implements AudioLyricsManager {
2830
private final GeniusClient geniusClient;
2931
private final HttpClientProvider httpProvider;
3032

31-
public JavaAudioLyricsManager(Config config, AudioPlayerManager audioPlayerManager) {
32-
this.httpProvider = new HttpClientProvider(audioPlayerManager);
33+
public JavaAudioLyricsManager(Config config, AbstractRoutePlanner routePlanner, ServerConfig serverConfig) {
34+
this.httpProvider = new HttpClientProvider(routePlanner, serverConfig);
3335
final String geniusApiKey = config.getGeniusApiKey();
3436

3537
this.youtubeClient = new LyricsClient(this.httpProvider);

lavalyrics/src/main/java/me/duncte123/lyrics/lavalink/JavaLyricsManagerConfiguration.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@
22

33
import com.github.topi314.lavalyrics.LyricsManager;
44
import com.github.topi314.lavalyrics.api.LyricsManagerConfiguration;
5-
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
5+
import com.sedmelluq.lava.extensions.youtuberotator.planner.AbstractRoutePlanner;
6+
import lavalink.server.config.ServerConfig;
67
import org.jetbrains.annotations.NotNull;
78
import org.springframework.stereotype.Service;
89

910
@Service
1011
public class JavaLyricsManagerConfiguration implements LyricsManagerConfiguration {
1112
private final JavaAudioLyricsManager javaAudioLyricsManager;
1213

13-
public JavaLyricsManagerConfiguration(Config config, AudioPlayerManager audioPlayerManager) {
14-
this.javaAudioLyricsManager = new JavaAudioLyricsManager(config, audioPlayerManager);
14+
public JavaLyricsManagerConfiguration(Config config, AbstractRoutePlanner routePlanner, ServerConfig serverConfig) {
15+
this.javaAudioLyricsManager = new JavaAudioLyricsManager(config, routePlanner, serverConfig);
1516
}
1617

1718
@NotNull

protocol/src/main/java/me/duncte123/lyrics/model/request/SearchRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
import me.duncte123.lyrics.model.Context;
44

5-
public record SearchRequest(Context context, String query) {
5+
public record SearchRequest(Context context, String query, String params) {
66
}

0 commit comments

Comments
 (0)