您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Schedule reddit comments and posts. Requires PostItLater local server.
// ==UserScript== // @name PostItLater // @namespace http://lyxi.ca // @version 0.1 // @homepage https://github.com/Lyxica/PostItLater // @description Schedule reddit comments and posts. Requires PostItLater local server. // @author Lyxica // @match *.reddit.com/* // @grant unsafeWindow // @grant GM_xmlhttpRequest // @connect localhost // ==/UserScript== (function() { 'use strict'; /* Setup link pages */ if (document.URL.split("?")[0].endsWith("submit")) { SetupForLink(); } else { SetupForComments(); } /* oldReply = reply reply = function(e) { console.log("hooked"); oldReply(e); } */ })(); function SetupForComments() { unsafeWindow.commentLater = function(e) { console.log(1); var form = e.parentNode.parentNode.parentNode.parentNode; var content = form.querySelector("textarea").value; var date = new Date(form.querySelector("input[type=datetime-local]").value); var thing_id = form.querySelector("input[name=thing_id]").value if (content == "") { return; } GM_xmlhttpRequest({ method: "POST", url: "http://localhost:4958/", data: JSON.stringify({ "type": "comment", "epoch": Math.floor(date / 1000), "content": content, "thing": thing_id }) }); } /* Setup link reply form */ var form = document.querySelector("form.usertext.cloneable"); var buttons = form.querySelector(".usertext-buttons"); buttons.innerHTML = '<button class="btn" name="later" value="form" onclick="commentLater(this)" type="button">later</button>' + buttons.innerHTML; buttons.insertAdjacentHTML("afterEnd", '<input type="datetime-local" id="posting-time">'); var now=new Date(); var real_now = new Date(now.getTime()-now.getTimezoneOffset()*60000).toISOString().substring(0,17) + "00" document.querySelector("#posting-time").value = real_now; } function SetupForLink() { document.querySelector("#newlink > div.spacer").innerHTML = '<button class="btn" name="later" value="form" onclick="submitLater(this)" type="button">later</button>' + document.querySelector("#newlink > div.spacer").innerHTML; document.querySelector("#newlink > div.spacer").insertAdjacentHTML("afterEnd", '<input type="datetime-local" id="posting-time">') var now=new Date(); var real_now = new Date(now.getTime()-now.getTimezoneOffset()*60000).toISOString().substring(0,17) + "00" document.querySelector("#posting-time").value = real_now; unsafeWindow.traverseForFormNode = function(e) { var node = e; for (var i = 0; i < 10000; i++ ) { if (node.tagName == "FORM") return node; node = node.parentNode } return null; } unsafeWindow.submitLater = function(e) { var node = unsafeWindow.traverseForFormNode(e); var subreddit = "r/" + node.querySelector("#sr-autocomplete").value; var title = node.querySelector("textarea.title").value; var type = node.querySelector("li.selected > a").text; var date = new Date(node.querySelector("#posting-time").value); var content; if (type == "link") { content = node.querySelector("input#url").value } else if (type == "text") { content = node.querySelector("textarea[name=text]").value type = "self"; // Only element I found to distinguish between link types refers to "self" posts as "text" } else { throw new Error("Unknown link type"); } if (subreddit == "" || title == "" || content == "") { return; } GM_xmlhttpRequest({ method: "POST", url: "http://localhost:4958/", data: JSON.stringify({ "type": type, "epoch": Math.floor(date / 1000), "content": content, "thing": subreddit, "title": title, }) }); } }