您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Obfuscate and Delete Reddit Comments Older than User Specified Time
当前为
// ==UserScript== // @name Reddit History Sanitizer // @namespace https://github.com/ryanford-dev/Reddit-History-Sanitizer // @description Obfuscate and Delete Reddit Comments Older than User Specified Time // @icon data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiAKICAgICB2aWV3UG9ydD0iMCAwIDMyIDMyIiB2ZXJzaW9uPSIxLjEiCiAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCiAgICA8ZWxsaXBzZSBjeD0iMTYiIGN5PSIxNiIgcng9IjE1IiByeT0iNy41IiAKICAgICAgICBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJibGFjayIvPgogICAgCiAgICA8cGF0aCBkPSJNIDE2IDIyLjEgQSAwLjggMC40IDEgMSAxIDcgMjUgQSAxIDEgMSAxIDAgOCAyMiIKICAgICAgICBmaWxsPSJ3aGl0ZSIgc3Ryb2tlPSJibGFjayIvPgogICAgICAgIAogICAgPGVsbGlwc2UgY3g9IjE2IiBjeT0iMTYiIHJ4PSIxNC41IiByeT0iNyIgCiAgICAgICAgZmlsbD0id2hpdGUiLz4KICAgICAgICAKICAgIDx0ZXh0IHg9IjUiIHk9IjE4IiAKICAgICAgICBmb250LWZhbWlseT0iQXJpYWwiIAogICAgICAgIGZvbnQtc2l6ZT0iNSIKICAgICAgICBmaWxsPSJyZWQiPgogICAgICAgJCEhUkhTISEkCiAgICA8L3RleHQ+Cgo8L3N2Zz4= // @include *.reddit.com/user/* // @version 1.0.3 // @license https://opensource.org/licenses/MIT // ==/UserScript== // change age to extend or shorten timeframe to keep comments (in days) const age = 7; var toDelete = []; function findOldComments() { let pageName = document.querySelector("div#header > div#header-bottom-left > span.pagename").textContent, userName = document.querySelector("div#header > div#header-bottom-right > span.user > a").textContent; if (pageName !== userName) return; let comments = document.querySelectorAll(".comment"), nextButton = document.querySelector("div.content > div#siteTable > div.nav-buttons > span.nextprev > span.next-button > a"), i = comments.length; while (i--) { let timeSincePost = comments[i].querySelector("div.entry > p.tagline > time").getAttribute('datetime'), currentDate = Date.now(), commentDate = Number(new Date(timeSincePost)), daysSincePost = Math.floor((currentDate - commentDate)/1000/60/60/24); if (daysSincePost > age) { toDelete.push(comments[i].getAttribute("id")); } } if (toDelete.length > 0) { obfuscateComment(toDelete.pop()); } else if (nextButton) { nextButton.click(); } else { alert("No old comments!"); } } function* generator() { while (toDelete) { yield obfuscateComment(toDelete.pop()); } } let gen = generator(); function obfuscateComment(eligibleComment) { const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz><.-,+!@#$%^&*();:[]~"; let comment = document.getElementById(eligibleComment); if (!comment) document.location.reload(); let editTextArea = comment.querySelector("div.entry > form.usertext > div.usertext-edit > div.md > textarea"), editTextAreaLength = editTextArea.value.length, editButton = comment.querySelector("div.entry > ul > li > a.edit-usertext"), obfuscatedComment = "", saveButton = comment.querySelector("div.entry > form.usertext > div.usertext-edit > div.bottom-area > div.usertext-buttons > button.save"), deleteButton = comment.querySelector("div.entry > ul > li > form.del-button > span > a[data-event-action=delete]"), confirmButton = comment.querySelector("div.entry > ul > li > form.del-button > span > a.yes"); for (let i = 0; i < editTextAreaLength; i++) { if (editTextArea.value.substr(i,1) == '\n') { obfuscatedComment += '\n'; } else { let randomNum = Math.floor(Math.random() * chars.length); obfuscatedComment += chars.charAt(randomNum, 1); } } let replaceComment = function() { return new Promise( (resolve,reject) => { if (editButton) { editButton.click(); editTextArea.value = obfuscatedComment; resolve(); } else { reject((e) => { console.log(e); }); } } ); }; let saveComment = function() { return new Promise( (resolve, reject) => { if (saveButton) { window.setTimeout(() => { saveButton.click(); resolve(); }, 1000); } else { reject((e) => { console.log(e); }); } } ); }; let deleteComment = function() { return new Promise( (resolve, reject) => { if (deleteButton) { window.setTimeout(() => { deleteButton.click(); resolve(); }, 3000); } else { reject((e) => { console.log(e); }); } } ); }; let confirmDelete = function() { return new Promise( (resolve, reject) => { if (confirmButton) { window.setTimeout(() => { confirmButton.click(); resolve(gen.next()); }, 3000); } else { reject((e) => { console.log(e); }); } } ); }; replaceComment() .then(saveComment() .then(deleteComment() .then(confirmDelete() ))); } window.addEventListener("load", findOldComments);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址