您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Compile list of users who have shared links from a domain on Reddit. Useful for spammer busting
- // ==UserScript==
- // @name Reddit domain share user list
- // @namespace org.thorlancaster.redditdomainuserparser
- // @version 0.1
- // @description Compile list of users who have shared links from a domain on Reddit. Useful for spammer busting
- // @author Thor Lancaster
- // @match https://www.reddit.com/domain*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- var helpText =
- "<ol style='list-style: initial'><li>Go to a reddit.com domain page</li>"+
- "<li>Click \"Add this page\" button for each page of posts</li>"+
- "<li>When finished, click \"Expor\"</li><li>Remember to clear pages when done to prevent old, possibly banned users.</li></ol>";
- // Utility Functions
- var DGE = function(name){
- return document.getElementById(name);
- }
- var DCE = function(name){
- return document.createElement(name);
- }
- // UI functions
- // Show a modal message box
- var showMessageBox = function(titleTxt, txt){
- var root = DCE("div");
- var rs = root.style;
- root.id = "fpe-alert";
- rs.position = "fixed";
- rs.zIndex = "9999999";
- rs.width = "100%";
- rs.height = "100%";
- rs.top = "0px";
- rs.background = "#0A2132";
- rs.color = "#FFF";
- rs.fontSize = "1.2em";
- var title = DCE("div");
- title.innerHTML = titleTxt;
- var ts = title.style;
- ts.fontSize = "1.5em";
- ts.padding = "0.5em";
- root.appendChild(title);
- var msg = DCE("div");
- msg.innerHTML = txt;
- var mss = msg.style;
- mss.padding = "2%";
- mss.border = "1px solid #777";
- mss.width = "95%";
- mss.maxHeight = "90%";
- mss.maxHeight = "calc(100% - 6rem)";
- mss.overflowY = "auto";
- root.appendChild(msg);
- var exit = DCE("button");
- var bts = exit.style;
- bts.position = "fixed";
- bts.bottom = "1rem";
- bts.color = "#000";
- bts.background = "#1CD798";
- bts.padding = "0.5em";
- bts.borderRadius = "0.2rem";
- bts.border = "none";
- bts.fontSize = "1.1rem";
- exit.innerText = "Back to site";
- exit.onclick = function(){
- DGE("fpe-alert").parentElement.removeChild(DGE("fpe-alert"));
- }
- root.appendChild(exit);
- document.body.appendChild(root);
- }
- // Create and return the UI element
- var createUIPane = function(){
- var root = DCE("div");
- var rs = root.style;
- rs.position = "fixed";
- rs.bottom = "0px";
- rs.width = "10rem";
- rs.right = "0px";
- rs.borderRadius = "0.5rem";
- rs.background = "#0A2132";
- rs.color = "#FFF";
- rs.textAlign = "center";
- ////////
- var title = DCE("div");
- title.innerHTML = "Reddit Domain<br/>Exporter<br/>";
- var ts = title.style;
- ts.fontSize = "1.5em";
- ts.padding = "0.3em";
- ts.background = "#FF9204";
- ts.borderTopLeftRadius = ts.borderTopRightRadius = "0.5rem";
- root.appendChild(title);
- ////////
- var status = DCE("div");
- status.id = "fpe-status";
- var ss = status.style;
- ss.display = "none";
- ss.position = "absolute";
- ss.top = "2rem";
- ss.left = "10rem";
- ss.width = "10rem";
- ss.minHeight = "3rem";
- ss.borderRadius = "0.5em";
- ss.background = "#0A2132";
- root.appendChild(status);
- ////////
- for(var x = 0; x < 4; x++){
- var txt = "Button " + x;
- if(x == 0) txt = "Add this page";
- if(x == 1) txt = "Clear pages";
- if(x == 2) txt = "Export list";
- if(x == 3) txt = "How to use";
- var btn = DCE("button");
- var bts = btn.style;
- bts.color = "#000";
- bts.padding = "0.5em";
- bts.borderRadius = "0.2rem";
- bts.border = "none";
- bts.fontSize = "1.1rem";
- if(x == 3){
- bts.fontSize = "0.8rem";
- }
- if(x == 2) { // Emphasized
- bts.background = "#1CD798";
- btn.nNmBg = "#1CD798";
- btn.nHvBg = "#15AE7A";
- } else { // Normal
- bts.background = "#1C98D7";
- btn.nNmBg = "#1C98D7";
- btn.nHvBg = "#157AAE";
- }
- btn.dataset.btnNum = x;
- btn.onmouseover = function(){this.style.background = this.nHvBg;}
- btn.onmouseout = function(){this.style.background = this.nNmBg;}
- btn.onclick = onButtonClick;
- var bdiv = DCE("div");
- var bs = bdiv.style;
- bs.height = "3rem";
- bs.display = "flex";
- bs.alignItems = "center";
- bs.justifyContent = "center";
- btn.innerHTML = txt;
- bdiv.appendChild(btn);
- root.appendChild(bdiv);
- }
- return root;
- }
- var stTimer = null;
- var setStatusText = function(stTxt){
- clearTimeout(stTimer);
- stTimer = setTimeout(function(){
- DGE("fpe-status").style.display = "none";
- }, 2200);
- var el = DGE("fpe-status");
- el.style.display = "block";
- el.innerHTML = stTxt;
- }
- var onButtonClick = function(){
- var num = this.dataset.btnNum;
- if(num == 0){
- addThisPage();
- } else if(num == 1){
- clearPages();
- } else if(num == 2){
- exportData();
- } else if(num == 3){
- showHelp();
- }
- }
- // Data parsing functions
- var addThisPage = function(){
- var fpeDatabase = fpeDatabase = JSON.parse(sessionStorage.getItem("fpe-database"));
- if(fpeDatabase == null){
- fpeDatabase = {};
- }
- //////////////// BEGIN DATA SCRAPING
- var rows = document.getElementsByClassName("top-matter");
- for(var x = 0; x < rows.length; x++){
- var row = rows[x];
- var user = row.getElementsByClassName("author")[0];
- if(!user) continue;
- user = "u/" + user.textContent;
- var count = fpeDatabase[user] | 0;
- Object.defineProperty(fpeDatabase, user, {
- value: count + 1,
- writable: true,
- enumerable: true
- });
- }
- //////////////// END DATA SCRAPING
- sessionStorage.setItem("fpe-database", JSON.stringify(fpeDatabase));
- }
- var clearPages = function(){
- sessionStorage.removeItem("fpe-database");
- }
- var exportData = function(){
- var fpeDatabase = JSON.parse(sessionStorage.getItem("fpe-database"));
- if(fpeDatabase != null){
- showMessageBox("List of accounts", "<pre>" + formatOutput(fpeDatabase) + "</pre>");
- } else {
- setStatusText("No data yet. Add some pages first.");
- }
- }
- var formatOutput = function(db){
- console.log(db);
- var rtn = "";
- for(var key in db){
- rtn += key + " " + db[key] + "<br/>";
- }
- return rtn;
- }
- var showHelp = function(){
- showMessageBox("How to use", helpText);
- }
- // Main function
- var init = function(){
- var ui = createUIPane();
- document.body.appendChild(ui);
- }
- init();
- })();