Skip to content

Instantly share code, notes, and snippets.

@Hri7566
Created April 20, 2024 02:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hri7566/83b1b91b917034c9a2ea52ae9400a52d to your computer and use it in GitHub Desktop.
Save Hri7566/83b1b91b917034c9a2ea52ae9400a52d to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Hri's MPP bot
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Uses object-oriented commands.
// @author You
// @match http://www.multiplayerpiano.com/*
// @grant none
// ==/UserScript==
function replaceAt(string, index, replace) {
return string.substring(0, index) + replace + string.substring(index + 1);
}
var client = MPP.client;
function chat(string) {
client.sendArray([{m:'a', message:"\u034f"+string}]);
}
function getPart(boop) {
for (const id in client.ppl) {
let part = client.ppl[id];
if (part.name.toLowerCase().indexOf(boop.toLowerCase()) !== -1) {
return part;
break;
} else if (part._id.indexOf(boop) !== -1) {
return part;
}
}
}
var prefix = "^";
var cmds = [];
var lockdown = false;
var ranks = {
kings: ["579c0c12480bd4b82edf09d4"],
nobles: [],
knights: [],
banned: []
};
function addcmd(cmd, usage, minargs, func, minrank, hidden) {
cmds.push({
cmd:cmd,
usage:usage,
minargs:minargs,
func:func,
minrank:minrank,
hidden:hidden
});
}
function getUsage(cmd) {
let found = cmds.find((command) => cmd == command.cmd);
if (found) {
return found.usage.replace("CMDCHAR", prefix);
} else {
return `There is no help for '${cmd}'.`;
}
}
function getRank(user) {
let found = getPart(user)._id;
if (ranks.kings.indexOf(found) !== -1) {
return "king";
} else if (ranks.nobles.indexOf(found) !== -1) {
return "noble";
} else if (ranks.knights.indexOf(found) !== -1) {
return "knight";
} else if (ranks.banned.indexOf(found) !== -1) {
return "banned";
} else {
return "peasant";
}
}
function rankToNum(string) {
switch (string) {
case "banned":
return -1;
break;
case "king":
return 3;
break;
case "noble":
return 2;
break;
case "knight":
return 1;
break;
default:
return 0;
break;
}
}
addcmd("help", `Usage: CMDCHARhelp`, 0, msg => {
if (msg.args.length - 1 > 0) {
chat(getUsage(msg.args[1]));
} else {
let tosend = `Commands:`;
cmds.forEach((command) => {
if (!command.hidden) {
if (rankToNum(msg.rank) >= command.minrank) {
tosend += ` ${prefix}${command.cmd} | `;
}
}
});
tosend = tosend.trim();
tosend = replaceAt(tosend, tosend.length - 1, "");
chat(tosend);
}
}, 0, false);
addcmd("ping", `Usage: CMDCHARping`, 0, msg => {
chat("Pong!");
}, 0, false);
addcmd("id", `Usage: CMDCHARid`, 0, msg => {
chat(msg.p._id);
}, 0, false);
addcmd("rank", `Usage CMDCHARrank <user (opt)>`, 0, msg => {
if (!msg.args[1]) {
chat(msg.p.name + ", your rank is " + msg.rank + ".");
} else {
found = getPart(msg.args[1]);
if (found) {
chat(found.name + "'s rank is " + getRank(found._id));
} else {
chat(`The user '${msg.args[1]}' couldn't be found. Try using part of their username or id.`);
}
}
}, 0, false);
addcmd("8ball", `Usage: CMDCHAR8ball <polar quesiton>`, 1, msg => {
chat(Ball[Math.floor(Math.random()*Ball.length)] + ", " + msg.p.name);
}, 0, false);
addcmd("prefix", `Usage: CMDCHARprefix <new prefix>`, 1, msg => {
prefix = msg.args[1];
chat(`The prefix was changed to '${prefix}'.`);
}, 2, false);
addcmd("js", `Usage: CMDCHARjs <eval statement>`, 1, msg => {
let i = msg.a.substring(msg.a.split(" ")[0].length + 1);
try {
chat("Console: " + eval(i.toString()));
} catch (e) {
chat(e + ".");
}
}, 3, false);
addcmd("ban", `Usage: CMDCHARban <user>`, 1, msg => {
let p = getPart(msg.argcat);
if (p) {
if (ranks.banned.indexOf(p._id) !== -1) {
chat(p.name + " is already banned, you fucking idiot.");
} else {
ranks.banned.push(p._id);
chat(p.name + " was banned. " + Banmsg[Math.floor(Math.random()*Banmsg.length())]);
}
}
}, 2, false);
addcmd("pardon", `Usage: CMDCHARpardon <user>`, 1, msg => {
let p = getPart(msg.argcat);
if (p) {
if (ranks.banned.indexOf(p._id) !== "-1") {
chat("What are you fucking dumb? That user isn't banned.");
} else {
ranks.banned.splice(ranks.banned.indexOf(p._id));
chat(p.name + " was unbanned. Lucky.");
}
}
}, 3, false);
addcmd("lockdown", `Usage: CMDCHARlockdown`, 0, msg => {
if (lockdown == false) {
lockdown = true;
chat("Lockdown initiated. Unless you have a high rank, no commands can be accessed.");
} else {
lockdown = false;
chat("Lockdown retracted. All commands are available.");
}
}, 2, false);
client.on('a', msg => {
msg.args = msg.a.split(' ');
msg.input = n => msg.args.slice(n).join(" ");
msg.cmd = msg.args[0].split(prefix).slice(1).join(prefix);
msg.argcat = msg.a.substring(msg.cmd.length + 1).trim();
msg.rank = getRank(msg.p._id);
if ((lockdown == false) || (rankToNum(msg.rank) >= 2)) {
if (msg.rank !== "banned") {
if (msg.a == "Hello there") {
chat("General Kenobi!");
}
cmds.forEach((commandobj) => {
switch (msg.cmd) {
case commandobj.cmd: {
console.log(rankToNum(msg.rank));
if (rankToNum(msg.rank) >= commandobj.minrank) {
if (msg.args.length - 1 < commandobj.minargs) {
chat(getUsage(msg.cmd));
} else {
if (!msg.a.startsWith(prefix)) return;
commandobj.func(msg);
}
}
break;
}
}
});
}
}
});
var Ball = [
"It is certain",
"It is decidedly so",
"Without a doubt",
"Yes - definitely",
"You may rely on it",
"As I see it, yes",
"Most likely",
"Outlook good",
"Yes",
"Signs point to yes",
"Reply hazy, try again",
"Ask again later",
"Better not tell you now",
"Cannot predict now",
"Concentrate and ask again",
"Don't count on it",
"My reply is no",
"My sources say no",
"Outlook not so good",
"Very doubtful"
];
var Banmsg = [
"What an idiot.",
"Fucking idiot.",
"What the hell, man?",
"The ban hammer has spoken!",
"What the hell?",
"What the fuck?",
"What an asshole.",
"Fucking asshole.",
"What a dumbass.",
"Rated E for idiot.",
"Fucking retard.",
"Come the fuck on, dude.",
"What the hell?",
"Dickhead.",
"Frickin' idiot.",
"I can't believe I'm surrounded by frickin' idiots!",
"Dumbass.",
"You fucking dumbass.",
"Who's next?"
];
@Hri7566
Copy link
Author

Hri7566 commented Apr 20, 2024

from Apr 2020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment