magmastream 2.10.6-alpha.6 → 2.10.6-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/structures/Node.js +11 -1
- package/package.json +1 -1
package/dist/structures/Node.js
CHANGED
|
@@ -12,6 +12,8 @@ const Enums_1 = require("./Enums");
|
|
|
12
12
|
const MagmastreamError_1 = require("./MagmastreamError");
|
|
13
13
|
const validSponsorBlocks = Object.values(Enums_1.SponsorBlockSegment).map((segment) => segment.toLowerCase());
|
|
14
14
|
const TRACK_REQUIRED_EVENTS = new Set(["TrackStartEvent", "TrackEndEvent", "TrackStuckEvent", "TrackExceptionEvent"]);
|
|
15
|
+
/** How many recently played tracks autoplay avoids picking again. */
|
|
16
|
+
const AUTOPLAY_HISTORY_SIZE = 20;
|
|
15
17
|
class Node {
|
|
16
18
|
manager;
|
|
17
19
|
options;
|
|
@@ -917,7 +919,15 @@ class Node {
|
|
|
917
919
|
.toLowerCase()
|
|
918
920
|
.replace(/\s+/g, "")
|
|
919
921
|
.replace(/[^a-z0-9]/g, "");
|
|
920
|
-
const
|
|
922
|
+
const isSameTrack = (a, b) => a.identifier === b.identifier || a.uri === b.uri || normalize(a.title) === normalize(b.title);
|
|
923
|
+
// Sources answer a seed with the same tracks every time, so only checking the last track
|
|
924
|
+
// lets autoplay bounce between two songs. Skip recently played tracks, and only when every
|
|
925
|
+
// recommendation was played recently, fall back to skipping just the last track.
|
|
926
|
+
const recentTracks = PreviousQueue.slice(-AUTOPLAY_HISTORY_SIZE);
|
|
927
|
+
let filteredTracks = tracks.filter((track) => !recentTracks.some((recent) => isSameTrack(track, recent)));
|
|
928
|
+
if (!filteredTracks.length) {
|
|
929
|
+
filteredTracks = tracks.filter((track) => !isSameTrack(track, lastTrack));
|
|
930
|
+
}
|
|
921
931
|
if (filteredTracks.length) {
|
|
922
932
|
const randomTrack = filteredTracks[Math.floor(Math.random() * filteredTracks.length)];
|
|
923
933
|
await player.queue.add(randomTrack);
|