NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Facebook autoclick
// @namespace http://github.com/and3k5
// @version 2025-04-28
// @description Automatic facebook poke. Clicks on poke back every second.
// @homepageURL https://github.com/and3k5/auto-facebook-poke
// @supportURL https://github.com/and3k5/auto-facebook-poke/issues
// @copyright 2025 And3k5
// @author And3k5
// @match https://www.facebook.com/pokes*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @license MIT
// ==/UserScript==
(function () {
"use strict";
const button = document
.evaluate(
"//body//*//span[text()[contains(.,'Pokes')]]",
document.body,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
)
.singleNodeValue.appendChild(document.createElement("button"));
button.textContent = "_";
button.type = "button";
button.style.fontSize = "12pt";
button.style.verticalAlign = "baseline";
button.style.overflow = "visible";
button.style.borderRadius = "50px";
button.style.margin = "6px";
button.style.marginLeft = "20px";
button.style.cursor = "pointer";
const spinner = button.appendChild(document.createElement("span"));
spinner.textContent = "|";
const animation = spinner.animate(
[
{ transform: "rotate(0)" },
{ transform: "rotate(360deg)" },
],
{
duration: 1000,
iterations: 1,
}
);
let intervalId = null;
const pokeBack = () =>
document
.evaluate(
"//*[text()[contains(.,'Poke Back')]]",
document.body,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
)
.singleNodeValue?.click();
const setActiveState = () => {
button.childNodes[0].textContent = "Stop auto poke";
spinner.style.display = "inline-block";
};
const start = () => {
if (intervalId != null) return;
intervalId = setInterval(() => {
pokeBack();
animation.currentTime = 0;
}, 1000);
setActiveState();
};
const setIdleState = () => {
button.childNodes[0].textContent = "Start auto poke";
spinner.style.display = "none";
};
const stop = () => {
if (intervalId == null) return;
clearInterval(intervalId);
intervalId = null;
setIdleState();
};
setIdleState();
button.addEventListener("click", () => {
if (intervalId == null) return start();
else stop();
});
})();