fix: prevents youtube bot blocking #171
4 changed files with 973 additions and 90 deletions
1037
package-lock.json
generated
1037
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -25,6 +25,7 @@
|
||||||
"discord-player-youtubei": "^1.3.1",
|
"discord-player-youtubei": "^1.3.1",
|
||||||
"discord.js": "^14.16.2",
|
"discord.js": "^14.16.2",
|
||||||
"mediaplex": "^0.0.9",
|
"mediaplex": "^0.0.9",
|
||||||
|
"puppeteer": "^23.4.0",
|
||||||
"sqlite3": "^5.1.7",
|
"sqlite3": "^5.1.7",
|
||||||
"typescript": "^5.6.2",
|
"typescript": "^5.6.2",
|
||||||
"uuid": "^10.0.0"
|
"uuid": "^10.0.0"
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { Database } from "sqlite3";
|
||||||
import "../modules/client";
|
import "../modules/client";
|
||||||
import { loadLocales } from "./locales";
|
import { loadLocales } from "./locales";
|
||||||
import { YoutubeiExtractor } from "discord-player-youtubei";
|
import { YoutubeiExtractor } from "discord-player-youtubei";
|
||||||
|
import { YoutubeWebTokenRoutine } from "./music";
|
||||||
|
|
||||||
/** Creation of the client and definition of its properties */
|
/** Creation of the client and definition of its properties */
|
||||||
export default async () => {
|
export default async () => {
|
||||||
|
@ -42,6 +43,9 @@ export default async () => {
|
||||||
list: new Collection(),
|
list: new Collection(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Generate tokens
|
||||||
|
const tokens = await YoutubeWebTokenRoutine(true);
|
||||||
|
|
||||||
const player = Player.singleton(client, {
|
const player = Player.singleton(client, {
|
||||||
skipFFmpeg: true,
|
skipFFmpeg: true,
|
||||||
ytdlOptions: {
|
ytdlOptions: {
|
||||||
|
@ -50,7 +54,12 @@ export default async () => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
await player.extractors.loadDefault((ext) => ext !== "YouTubeExtractor");
|
await player.extractors.loadDefault((ext) => ext !== "YouTubeExtractor");
|
||||||
await player.extractors.register(YoutubeiExtractor, {});
|
await player.extractors.register(YoutubeiExtractor, {
|
||||||
|
streamOptions: {
|
||||||
|
useClient: "WEB",
|
||||||
|
},
|
||||||
|
trustedTokens: tokens,
|
||||||
|
});
|
||||||
|
|
||||||
console.log("Translations progression :");
|
console.log("Translations progression :");
|
||||||
client.locales = await loadLocales(client.config.default_lang);
|
client.locales = await loadLocales(client.config.default_lang);
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { EmbedBuilder } from "@discordjs/builders";
|
||||||
import { GuildQueue, QueueRepeatMode, Track } from "discord-player";
|
import { GuildQueue, QueueRepeatMode, Track } from "discord-player";
|
||||||
import { Client } from "discord.js";
|
import { Client } from "discord.js";
|
||||||
import { getLocale } from "./locales";
|
import { getLocale } from "./locales";
|
||||||
|
import { generateTrustedToken, YoutubeiExtractor } from "discord-player-youtubei";
|
||||||
|
|
||||||
export const embedListQueue = (
|
export const embedListQueue = (
|
||||||
client: Client,
|
client: Client,
|
||||||
|
@ -57,3 +58,16 @@ const printRepeatMode = (mode: QueueRepeatMode, loc: Map<string, string>) => {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const YoutubeWebTokenRoutine = async (first: boolean) => {
|
||||||
|
// Repeat in one week : 7 * 24 * 60 * 60 * 1000
|
||||||
|
setTimeout(YoutubeWebTokenRoutine, 604800000, false);
|
||||||
|
|
||||||
|
const tokens = await generateTrustedToken();
|
||||||
|
if (first) {
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
const instance = YoutubeiExtractor.getInstance();
|
||||||
|
instance?.setTrustedTokens(tokens);
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue