autoGiveLike

始皇别封我号,用来给linux.do帖子自动点赞的

// ==UserScript==
// @name         autoGiveLike
// @namespace    http://tampermonkey.net/
// @version      2024-10-28.1
// @description  始皇别封我号,用来给linux.do帖子自动点赞的
// @author       Kubbo
// @match        https://linux.do/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
  'use strict';
  console.log("始皇你好~")

  //@XODI @Hua 借用你们的防邀设置,做清清白白的人~
  const redirectIfNeeded = () => {
    if (window.location.href.includes("https://linux.do/invites/")) {
      window.location.replace("https://linux.do");
    }

    document.querySelectorAll("div .regular .contents").forEach((el) => {
      el.querySelectorAll("a").forEach((a) => {
        if (a.href.includes("https://linux.do/invites/")) {
          a.href = "https://linux.do";
        }
      });
    });
  };

  document.addEventListener('DOMContentLoaded', redirectIfNeeded);

  const observer = new MutationObserver(redirectIfNeeded);
  observer.observe(document.body, {childList: true, subtree: true});

  const getTopics = id => fetch(`/t/${id}.json?track_visit=true&forceLoad=true`).then(res => res.json()).then(res => {
    const topics = res?.post_stream?.stream || []
    console.log("本次查询一共有%s个帖子", topics.length)
    return topics
  })
  const initBtn = () => {
    setInterval(() => {
      const autoBtn = document.querySelector("#autoGiveLike")
      if (/\/t\/topic/.test(location.pathname)) {
        if (!autoBtn) {
          const btn = document.createElement("button")
          let status = 0 // 脚本执行状态: 0:未开始 1:正在执行中
          btn.id = "autoGiveLike"
          btn.innerText = "开始自动点赞"
          btn.style.position = "fixed"
          btn.style.top = "10px"
          btn.style.right = "20px"
          btn.style.padding = "8px 16px"
          btn.style.background = "#409EFF"
          btn.style.color = "#fff"
          btn.style.border = "none"
          btn.style.borderRadius = "16px"
          btn.style.zIndex = "202403101044"
          btn.addEventListener("click", () => {
            if (status === 0) {
              status = 1
              btn.innerText = "停止自动点赞"
              btn.style.background = "#F56C6C"
              const topicId = location.pathname.match(/\/topic\/([^/]+)/)?.[1]
              topicId && getTopics(topicId).then(ids => {
                let i = 0
                const token = document.querySelector('meta[name="csrf-token"]').content
                const loop = () => {
                  if (status === 1) {
                    const id = ids[i]
                    fetch(`/discourse-reactions/posts/${id}/custom-reactions/heart/toggle.json`, {
                      method: "PUT",
                      headers: {"X-Csrf-Token": token}
                    }).finally(() => {
                      i++
                      if (i <= 50 && i <= ids.length) { //设置50的阈值,防止始皇封我号
                        setTimeout(loop, 50);
                      }
                    })
                  }
                }
                loop()
              })
            } else if (status === 1) {
              status = 0
              btn.innerText = "开始自动点赞"
              btn.style.background = "#409EFF"
            }
          })
          document.body.appendChild(btn)
        }
      } else if (autoBtn) {
        autoBtn.remove()
      }
    }, 500)
  }
  initBtn()

  function showHotKeys() {
    const hotKeys = [
      {name: '描述', keys: '快捷键'},
      {name: '最新', keys: 'G+L'},
      {name: '新', keys: 'G+N'},
      {name: '未读', keys: 'G+U'},
      {name: '类别', keys: 'G+C'},
      {name: '热门', keys: 'G+T'},
      {name: '书签', keys: 'G+B'},
      {name: '个人资料', keys: 'G+P'},
      {name: '消息', keys: 'G+M'},
      {name: '草稿', keys: 'G+D'},
    ]
    const table = document.createElement('table')
    table.style.position = 'fixed'
    table.style.top = '50%'
    table.style.transform = 'translateY(-50%)'
    table.style.right = '10px'
    table.style.zIndex = '202403101044'
    table.style.fontSize = '14px'
    table.style.color = '#fff'
    table.style.borderRadius = '4px'
    hotKeys.forEach(key => {
      const tr = document.createElement('tr')
      const td1 = document.createElement('td')
      const td2 = document.createElement('td')
      td1.style.padding = '4px 10px'
      td1.innerText = key.name
      td2.innerText = key.keys
      tr.appendChild(td1)
      tr.appendChild(td2)
      table.appendChild(tr)
    })
    document.body.appendChild(table)
  }

  showHotKeys()
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址