Автоматически ставит лайки на YouTube и проигрывает гимн Украины при клике "Лайк"
// ==UserScript==
// @name YouTube Auto-Liker + Ukrainian Anthem
// @namespace https://github.com/custom-scripts
// @version 2.0
// @description Автоматически ставит лайки на YouTube и проигрывает гимн Украины при клике "Лайк"
// @author Freedom
// @license MIT
// @icon https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg
// @match *://*.youtube.com/*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// @run-at document-idle
// @noframes
// ==/UserScript==
(function () {
'use strict';
// === Настройки ===
const WATCH_THRESHOLD = 30; // процент просмотра для автолайка
const LIKE_IF_NOT_SUBSCRIBED = true; // ставить лайки даже если не подписан
const AUTO_LIKE_LIVE_STREAMS = true; // лайкать стримы
// === Селекторы ===
const SELECTORS = {
PLAYER: '#movie_player',
SUBSCRIBE_BUTTON: '#subscribe-button',
LIKE_BUTTON: '#menu #top-level-buttons-computed ytd-toggle-button-renderer:nth-child(1) button, #segmented-like-button button',
DISLIKE_BUTTON: '#menu #top-level-buttons-computed ytd-toggle-button-renderer:nth-child(2) button, #segmented-dislike-button button'
};
const autoLikedVideoIds = [];
let anthemPlayer = null;
// === Воспроизведение гимна ===
function playAnthem() {
if (anthemPlayer) anthemPlayer.remove();
anthemPlayer = document.createElement("audio");
anthemPlayer.src = "https://upload.wikimedia.org/wikipedia/commons/transcoded/d/d1/State_Anthem_of_Ukraine_instrumental.ogg/State_Anthem_of_Ukraine_instrumental.ogg.mp3";
anthemPlayer.autoplay = true;
anthemPlayer.volume = 0.8;
document.body.appendChild(anthemPlayer);
}
// === Получение ID видео ===
function getVideoId() {
const elem = document.querySelector('#page-manager > ytd-watch-flexy');
if (elem && elem.hasAttribute('video-id')) {
return elem.getAttribute('video-id');
} else {
return new URLSearchParams(window.location.search).get('v');
}
}
// === Проверка процента просмотра ===
function watchThresholdReached() {
const player = document.querySelector(SELECTORS.PLAYER);
if (player && player.getDuration && player.getCurrentTime) {
const watched = player.getCurrentTime() / player.getDuration();
return watched >= WATCH_THRESHOLD / 100;
}
return false;
}
// === Проверка подписки ===
function isSubscribed() {
const subscribeButton = document.querySelector(SELECTORS.SUBSCRIBE_BUTTON);
if (!subscribeButton) return false;
return subscribeButton.innerText.includes("Вы подписаны") || subscribeButton.querySelector("paper-button[subscribed]") !== null;
}
// === Проверка кнопки ===
function isButtonPressed(button) {
return button?.classList.contains('style-default-active') || button?.getAttribute('aria-pressed') === 'true';
}
// === Лайк ===
function like(auto = false) {
const likeButton = document.querySelector(SELECTORS.LIKE_BUTTON);
const dislikeButton = document.querySelector(SELECTORS.DISLIKE_BUTTON);
if (!likeButton || !dislikeButton) return;
const videoId = getVideoId();
if (isButtonPressed(likeButton)) {
autoLikedVideoIds.push(videoId);
} else if (isButtonPressed(dislikeButton)) {
return;
} else if (autoLikedVideoIds.includes(videoId) && auto) {
return;
} else {
likeButton.click();
if (isButtonPressed(likeButton)) {
autoLikedVideoIds.push(videoId);
if (!auto) playAnthem(); // только если кликнул сам
}
}
}
// === Автолайк ===
function wait() {
if (watchThresholdReached()) {
try {
if (LIKE_IF_NOT_SUBSCRIBED || isSubscribed()) {
if (AUTO_LIKE_LIVE_STREAMS ||
window.getComputedStyle(document.querySelector('.ytp-live-badge') || {}).display === 'none') {
like(true);
}
}
} catch (e) {
console.warn("Auto-like error:", e);
}
}
}
// === Слушатель на клик лайка (чтобы включался гимн) ===
document.addEventListener("click", e => {
if (e.target.closest(SELECTORS.LIKE_BUTTON)) {
playAnthem();
}
});
// === Запуск ===
setInterval(wait, 5000);
})();