Favorite Tweet Buttons

ボタン一つでハートのツイートができます。

当前为 2024-05-28 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Favorite Tweet Buttons
// @namespace    http://tampermonkey.net/
// @version      0.2.0
// @description  ボタン一つでハートのツイートができます。
// @author       TwoSquirrels
// @license      MIT
// @match        https://twitter.com/*
// @match        https://x.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=x.com
// @grant        none
// ==/UserScript==

const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function favoriteTweet(favNum = 1) {
  let symbolsButton, heartButton;
  while (!(symbolsButton = document.querySelector("[aria-label='Symbols'], [aria-label='記号']"))) {
    document.querySelector("[data-testid='ScrollSnap-List'] button[aria-haspopup='menu']").click();
    await wait(50);
  };
  while (!(heartButton = document.querySelector("[aria-label='Red heart'], [aria-label='赤色のハート']"))) {
    symbolsButton.click();
    await wait(50);
  };
  for (let i = 0; i < favNum; i++) {
    heartButton.click();
    await wait(5);
  }
  document.querySelector("[data-testid='tweetButtonInline']").click();
}

const favButtons = document.createElement("div");
favButtons.id = "favorite-tweet";
for (const favNum of [1,2,3,4,5]) {
  const button = document.createElement("button");
  button.innerText = favNum;
  button.onclick = () => favoriteTweet(favNum);
  favButtons.append(button);
}

setInterval(() => {
  if (document.querySelector("[data-testid='toolBar']")) {
    if (!document.getElementById("favorite-tweet-inline")) {
      document.querySelector("[data-testid='tweetButtonInline']").before(favButtons);
    }
    if (!document.getElementById("favorite-tweet-normal")) {
      document.querySelector("[data-testid='tweetButton']").before(favButtons);
    }
  }
}, 50);