Bringing Clippy back, one page at a time! - CAUTION: IT'S CLIPPY, HE'S KINDA ANNOYING
// ==UserScript==
// @name Clippy Came Back
// @include *
// @version 2025-08-24
// @description Bringing Clippy back, one page at a time! - CAUTION: IT'S CLIPPY, HE'S KINDA ANNOYING
// @author You
// @match *
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @match *
// @namespace Brickmason_Games
// @license MIT
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// ==/UserScript==
/* global $, clippy */
/* eslint-disable no-multi-spaces */
//-- These particular target page(s) already have jQuery, otherwise addJS_Node() it too.
//$("head").append ( `
// <link href="//rawcdn.githack.com/pi0/clippyjs/refs/heads/master/assets/clippy.css"
// rel="stylesheet" type="text/css">
//` );
var node = document.createElement("link");
node.rel = "stylesheet";
node.type = "text/css";
node.href="https://cdn.jsdelivr.net/clippy.js/1.0/clippy.min.css";
document.head.appendChild(node);
addJS_Node(null,"https://unpkg.com/[email protected]",null, addJS_Node(null, "https://cdn.jsdelivr.net/clippy.js/1.0/clippy.min.js", null, startClippy));
function getRandomInteger(min, max) {
min = Math.ceil(min); // Ensures min is rounded up for inclusive range
max = Math.floor(max); // Ensures max is rounded down for inclusive range
return Math.floor(Math.random() * (max - min + 1)) + min;
}
//-- addJS_Node waits for clippyjs to load before running this...
function startClippy () {
clippy.BASE_PATH = "//rawcdn.githack.com/donnyworks/clippy.js/refs/heads/master/agents/";
clippy.load ('Clippy', function (agent) {
agent.show ();
setTimeout(() => {
agent.speak("Did you miss me?");
}, 1000);
setTimeout(() => {
agent.moveTo(100,100);
}, 1000);
function timeoutFunction() {
console.log(getRandomInteger(10,30)*1000);
agent.speak("It seems you're having trouble browsing this website.\nDo you need some help?");
setTimeout(timeoutFunction,getRandomInteger(10,30)*1000);
}
setTimeout(timeoutFunction,getRandomInteger(10,30)*1000);
function timeoutFunction2() {
console.log(getRandomInteger(5,10)*1000);
agent.animate();
setTimeout(timeoutFunction2,getRandomInteger(5,10)*1000);
}
setTimeout(timeoutFunction2,getRandomInteger(5,10)*1000);
});
}
function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
var D = document;
var scriptNode = D.createElement ('script');
if (runOnLoad) {
scriptNode.addEventListener ("load", runOnLoad, false);
}
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
var targ = D.getElementsByTagName ('body')[0] || D.body || D.documentElement;
targ.appendChild (scriptNode);
}