YouTube Music - Skip Liked/Disliked (jQuery Smart Poll)

Automatically skips liked/disliked songs using a smart polling method with jQuery to reduce CPU load.

目前為 2025-08-03 提交的版本,檢視 最新版本

// ==UserScript==
// @name         YouTube Music - Skip Liked/Disliked (jQuery Smart Poll)
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  Automatically skips liked/disliked songs using a smart polling method with jQuery to reduce CPU load.
// @author       torch & Gemini
// @match        https://music.youtube.com/*
// @require      https://code.jquery.com/jquery-3.7.1.min.js
// @grant        none
// @license MIT 
// ==/UserScript==

(function($) {
    'use strict';

    // Переменная для хранения названия текущего трека.
    // Это ключ к снижению нагрузки.
    let currentSongTitle = "";

    // Функция, которая непосредственно проверяет лайки/дизлайки и пропускает трек.
    function performSkipCheck() {
        const $playerBar = $('ytmusic-player-bar'); // Работаем в контексте плеера для скорости

        // Ищем кнопки только внутри панели плеера
        const $likeButton = $playerBar.find('ytmusic-like-button-renderer[like-status="LIKE"]');
        const $dislikeButton = $playerBar.find('ytmusic-like-button-renderer[like-status="DISLIKE"]');
        const $skipButton = $playerBar.find('.next-button');

        // Если песня имеет лайк или дизлайк, и кнопка "пропустить" доступна
        if ($skipButton.length && ($likeButton.length || $dislikeButton.length)) {
            console.log(`[YT Music Skipper] Пропускаем "${currentSongTitle}", так как он лайкнут/дизлайкнут.`);
            $skipButton.trigger('click'); // .click() может не сработать, .trigger('click') надежнее
        } else {
            console.log(`[YT Music Skipper] Воспроизводим: "${currentSongTitle}"`);
        }
    }

    // Запускаем проверку каждые полсекунды (500 мс). Это хороший баланс
    // между скоростью реакции и производительностью.
    setInterval(function() {
        // Ищем элемент с названием трека и его текст
        const $titleElement = $('ytmusic-player-bar .title');
        const newTitle = $titleElement.text();

        // Проверяем, что элемент с названием существует, не пуст и изменился
        if ($titleElement.length && newTitle && newTitle !== currentSongTitle) {
            console.log(`[YT Music Skipper] Обнаружен новый трек: "${newTitle}"`);
            // Обновляем название текущего трека
            currentSongTitle = newTitle;

            // !!! ВАЖНО !!!
            // Даем интерфейсу ~250 мс на то, чтобы обновить состояние кнопок лайка/дизлайка
            // после смены трека. Это предотвращает ложные срабатывания.
            setTimeout(performSkipCheck, 250);
        }
    }, 500);

    console.log('[YT Music Skipper] Скрипт для пропуска песен запущен.');

})(window.jQuery);