您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
28.08.2024, 12:12
// ==UserScript== // @name returnAvatarLike // @namespace Violentmonkey Scripts // @match https://dtf.ru/* // @grant none // @version 1.0.1 // @author apchi // @description 28.08.2024, 12:12 // @license MIT // ==/UserScript== let gF; Object.defineProperty(window, 'gF', { get() { return this._gF; }, set(value) { this._gF = value; if (value) { updateNotifications('.notification-item--compact') updateNotifications('.notification-item--default') } } }); const originalFetch = window.fetch; window.fetch = async (input, options) => { if (input.includes("https://api.dtf.ru/v2.1/subsite/me/updates")) { const res = await originalFetch(input, options); window.gF = await res.clone().json(); console.log(window.gF); return res; } return originalFetch(input, options); }; async function updateNotifications(selector) { const reg = new RegExp(['ответил','оценил','прокоммент','опубликовал'].join("|")) const listEl = await waitForElm(selector); listEl.forEach((el, i) => { const imageContainer = el.querySelector(".notification-item__image"); const textContainer = el.querySelector(".notification-item__text"); const textHtml = textContainer.innerHTML if (imageContainer && textContainer) { const user = window.gF.result[i]?.users[0]; if (!reg.test(textHtml)) { textContainer.innerHTML = ` <b>${user?.name}</b> оценил ❤️ ${textHtml}`; } imageContainer.querySelector("svg")?.remove(); if (!imageContainer.querySelector("img") && user?.avatar_url) { const src = user.avatar_url; imageContainer.insertAdjacentHTML("beforeend", ` <div data-loaded="true" class="andropov-media andropov-media--rounded andropov-media--bordered andropov-media--has-preview andropov-image" style="aspect-ratio: 1 / 1; width: 36px; height: 36px; max-width: none; --background-color: #dddddd;"> <picture> <source srcset="${src}-/scale_crop/72x72/-/format/webp, ${src}-/scale_crop/72x72/-/format/webp 2x" type="image/webp" /> <img src="${src}-/scale_crop/72x72/" srcset="${src}-/scale_crop/72x72/, ${src}-/scale_crop/72x72/ 2x" alt="" loading="lazy" /> </picture> </div> `); } } }); } window.onload = () => { document.querySelector(".bell__button").addEventListener("click", () => { updateNotifications('.notification-item--compact'); }); updateNotifications('.notification-item--default'); }; function waitForElm(selector) { return new Promise((resolve) => { const elements = document.querySelectorAll(selector); if (elements.length) { resolve(elements); } else { const observer = new MutationObserver(() => { const updatedElements = document.querySelectorAll(selector); if (updatedElements.length) { observer.disconnect(); resolve(updatedElements); } }); observer.observe(document.body, { childList: true, subtree: true }); } }); }