Equicord/src/plugins/cursorBuddy/index.tsx
nexpid 5f3854284a
CursorBuddy: oneko & friend(s) (#620)
* FatassHorse: add the horse

* CursorBuddy: wowie

* FatassHorse: removed !!

* Update index.tsx

---------

Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com>
2025-12-31 20:33:05 -05:00

139 lines
4.6 KiB
TypeScript

/*
* Vencord, a modification for Discord's desktop app
* Copyright (c) 2022 Vendicated and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { definePluginSettings, migratePluginSettings } from "@api/Settings";
import { Devs, EquicordDevs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
const ONEKO_IMAGE = "https://raw.githubusercontent.com/adryd325/oneko.js/c4ee66353b11a44e4a5b7e914a81f8d33111555e/oneko.gif";
const ONEKO_SCRIPT = "https://raw.githubusercontent.com/adryd325/oneko.js/c4ee66353b11a44e4a5b7e914a81f8d33111555e/oneko.js";
const FATASS_HORSE = "https://raw.githubusercontent.com/nexpid/fatass-horse/351f158bfd8fafd44d9c17faad61f2a80bcd33e3/horse.js";
const settings = definePluginSettings({
buddy: {
description: "Pick a cursor buddy",
type: OptionType.SELECT,
options: [
{
label: "Oneko",
value: "oneko",
default: true
},
{
label: "Fatass Horse",
value: "fathorse"
}
],
onChange: load,
},
speed: {
description: "Speed of Da Cat :3",
type: OptionType.NUMBER,
default: 10,
isValid: (value: number) => value >= 0 || "Speed must be bigger than 0",
onChange: load,
},
fps: {
description: "Framerate of the fatass horse",
type: OptionType.NUMBER,
default: 24,
isValid: (value: number) => value > 0 || "Framerate must be bigger than 0",
onChange: load
},
size: {
description: "Size of the fatass horse",
type: OptionType.NUMBER,
default: 120,
isValid: (value: number) => value > 0 || "Size must be bigger than 0",
onChange: load
},
fade: {
description: "If the horse should fade when the cursor is near",
type: OptionType.BOOLEAN,
default: true,
onChange: load
},
freeroam: {
description: "If the horse should roam freely when idle",
type: OptionType.BOOLEAN,
default: true,
onChange: load
},
shake: {
description: "If the horse should shake the window when it's walking",
type: OptionType.BOOLEAN,
default: false,
onChange: load
},
}, {
fps: {
disabled() { return this.store.buddy !== "fathorse"; },
},
size: {
disabled() { return this.store.buddy !== "fathorse"; },
},
fade: {
disabled() { return this.store.buddy !== "fathorse"; },
},
freeroam: {
disabled() { return this.store.buddy !== "fathorse"; },
},
shake: {
disabled() { return this.store.buddy !== "fathorse"; },
}
});
function unload() {
if (settings.store.buddy === "oneko") document.getElementById("oneko")?.remove();
if (settings.store.buddy === "fathorse") document.getElementById("fathorse")?.remove();
}
function load() {
switch (settings.store.buddy) {
case "oneko": {
fetch(ONEKO_SCRIPT)
.then(x => x.text())
.then(s => s.replace("const nekoSpeed = 10;", `const nekoSpeed = ${settings.store.speed};`))
.then(s => s.replace("./oneko.gif", ONEKO_IMAGE)
.replace("(isReducedMotion)", "(false)"))
.then(eval);
break;
}
case "fathorse": {
fetch(FATASS_HORSE).then(x => x.text()).then(s => (0, eval)(s)({
speed: settings.store.speed,
fps: settings.store.fps,
size: settings.store.size,
fade: settings.store.fade,
freeroam: settings.store.freeroam,
shake: settings.store.shake
}));
}
}
}
migratePluginSettings("CursorBuddy", "Oneko", "oneko");
export default definePlugin({
name: "CursorBuddy",
description: "only a slightly annoying plugin",
authors: [Devs.Ven, Devs.adryd, EquicordDevs.nexpid],
settings,
start: load,
stop: unload,
});