Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Pokemon Showdown
- // @namespace pokemonshowdown
- // @include http://play.pokemonshowdown.com/*
- // @include https://play.pokemonshowdown.com/*
- // @version 1
- // ==/UserScript==
- (function () {
- var nicks = {
- "username": "password",
- "alt name": "password"
- };
- var avatarNick = "username";
- var autojoinRooms = [
- "BOF",
- "dev",
- "help",
- "francais",
- "thp",
- "battlespot",
- "ou"
- ];
- ////////////////////////////////////////////////////////////////////
- if (typeof __PAGE_SCOPE_RUN__ === "undefined") {
- (function page_scope_runner() {
- var my_src = "(" + page_scope_runner.caller.toString() + ")();";
- var script = document.createElement("script");
- script.setAttribute("type", "application/javascript");
- script.textContent = "var __PAGE_SCOPE_RUN__ = true;\n" + my_src;
- setTimeout(function () {
- document.body.appendChild(script);
- document.body.removeChild(script);
- }, 0);
- })();
- return;
- }
- function toId(s) {
- return s.toLowerCase().replace(/[^\-a-z0-9]+/g, "");
- }
- avatarNick = toId(avatarNick);
- for (var n in nicks) {
- var id = toId(n);
- nicks[id] = {nick: n, pass: nicks[n]};
- if (id !== n)
- delete nicks[n];
- }
- var ding = (function () {
- function sin(f, t) { return Math.sin(f * 2 * Math.PI * t); }
- function waveform(t) {
- var b = 880;
- return sin(b * 1.25, t) + sin(b * 1.5, t) + sin(b * 2, t);
- }
- function envelope(t) {
- var a = 40;
- var n = 1.3;
- return Math.pow(t, n - 1) / Math.pow(a * Math.pow(t, n) + 1, 2);
- }
- var sampleRate = 44100;
- var length = 2;
- var context = new AudioContext();
- var buffer = context.createBuffer(1, sampleRate * length, sampleRate);
- var samples = buffer.getChannelData(0);
- var maxSample = 0;
- for (var t = 0.000001, s = 0; t < length; t += 1 / sampleRate, ++s) {
- samples[s] = envelope(t) * waveform(t);
- maxSample = Math.max(Math.abs(samples[s]), maxSample);
- }
- for (var s = 0; s < samples.length; ++s)
- samples[s] /= maxSample;
- return function () {
- console.log("ding!");
- var node = context.createBufferSource();
- node.buffer = buffer;
- node.connect(context.destination);
- node.start(0);
- };
- })();
- window.ding = ding;
- function main() {
- probeInterval = setInterval(function () {
- if (window.app && window.app.socket && window.app.socket.onmessage &&
- window.app.socket.onmessage.toString().indexOf("self.receive") >= 0) {
- clearInterval(probeInterval);
- window.Tools.interstice.isWhitelisted = function () { return true; };
- window.app.socket._onmessage = window.app.socket.onmessage;
- window.app.socket.onmessage = function (msg) {
- if (window.logMessages)
- window.console.log(msg.data);
- var lines = filterLog(msg.data.split("\n"));
- if (lines[0][0] === ">" && lines[1].indexOf("|init|") !== 0) {
- var roomid = toId(lines[0].slice(1));
- if (!window.app.rooms[roomid]) {
- lines.shift();
- lines = lines.map(function (line) {
- return "|pm|>" + roomid + "|>" + roomid + "|" + line;
- });
- }
- }
- return this._onmessage({data: lines.join("\n")});
- };
- window.app.socket._send = window.app.socket.send;
- window.app.socket.send = function (msg) {
- var cmdIndex = msg.indexOf("|/");
- if (msg.indexOf("|/") >= 0) {
- var parts = msg.slice(cmdIndex + 2).split(" ");
- var room = window.app.rooms[toId(msg.split("|")[0] || "lobby")];
- var cmd = parts.shift().toLowerCase().trim();
- var arg = parts.join(" ");
- switch (cmd) {
- case "lb" :
- return room.send((arg ? arg + ": " : "") + "Have you tried the \"Look for a battle\" button?");
- case "katakana" :
- return room.send("/me unsheathes katakana ▬▬ι═══════════════════ﺤ");
- case "lenny" :
- return room.send("( ͡° ͜ʖ ͡°)");
- case "j" :
- return this.send("|/join " + arg);
- case "gods" :
- return room.send("/wall Zaterdag om 21:00 is er een Gods Among Us tour, een tour van OU + 1 Ubers Pokémon! De Pokémon die in deze tour toegestaan is: Yveltal! Bereid nu alvast een team voor zodat je dat zaterdag niet meer hoeft te doen!");
- case "b" :
- return this.send(arg);
- case "whois" :
- case "alts" :
- var user = toId(arg);
- if (window.altList[user])
- room.receive("Client recorded alts: " + Object.keys(window.altList[user]).map(function (u) { return window.prettyNames[u]; }).join(", "));
- break;
- case "userlist" :
- var ranks = {};
- Object.keys(room.users).map(function (u) {
- var user = room.users[u];
- var rank = user[0];
- user = user.slice(1);
- if (!ranks[rank])
- ranks[rank] = [];
- ranks[rank].push(user);
- });
- this.onmessage({data: "|popup|" + Object.keys(ranks).sort().map(function (r) {
- return r + ":\n" + ranks[r].sort().join(", ");
- }).join("\n\n")});
- return;
- case "pmall" :
- if (room.pmAllInterval)
- return room.receive("Existing /pmall already in progress. Cancel with /cancelpmall");
- var users = Object.keys(room.users);
- room.pmAllInterval = setInterval(function () {
- if (users.length === 0) {
- clearInterval(room.pmAllInterval);
- delete room.pmAllInterval;
- } else
- window.app.socket.send("|/pm " + users.pop() + "," + arg);
- }, 1200);
- room.receive("Cancel with /cancelpmall");
- return;
- case "cancelpmall" :
- clearInterval(room.pmAllInterval);
- delete room.pmAllInterval;
- room.receive("/pmall cancelled");
- return;
- case "ceval" :
- var result;
- try {
- var s = window.app.socket.send.bind(window.app.socket);
- result = eval(arg);
- } catch (e) {
- result = e;
- }
- this.onmessage({data: "|pm|>client|>client|" + result});
- return;
- case "trn" :
- msg = msg.replace(",0,", ",1,");
- break;
- }
- }
- window.console.log("sending:", msg);
- return this._send(msg);
- };
- window.app.user._rename = window.app.user.rename;
- window.app.user.rename = function (nick) {
- var nickInfo = nicks[toId(nick)];
- if (nickInfo)
- this.passwordRename(nickInfo.nick, nickInfo.pass);
- else
- this._rename(nick);
- };
- window.app.rooms['']._addPM = window.app.rooms[''].addPM;
- window.app.rooms[''].addPM = function (user, message, pm) {
- if (!window.app.focused)
- ding();
- return this._addPM(user, message, pm);
- };
- var botCounter = {n: 0, nSpamCheck: 0, t: 0};
- window.prettyNames = {};
- window.altList = {};
- window.ChatRoom.prototype._add = window.ChatRoom.prototype.add;
- window.BattleRoom.prototype._add = window.BattleRoom.prototype.add;
- window.ChatRoom.prototype.add = window.BattleRoom.prototype.add = function (log) {
- var room = this;
- if (!room.userRanks)
- room.userRanks = {};
- if (typeof log === "string")
- log = log.split("\n").map(function (line) {
- if (window.Config.server.id !== "showdown" || this.id !== "lobby")
- line = line.replace(/^\|J\|/, "|j|").replace(/^\|L\|/, "|l|");
- var cmd = line.toLowerCase().split("|")[1];
- if (cmd === "users") {
- line.split("|")[2].split(",").slice(1).forEach(function (u) {
- room.userRanks[toId(u)] = u[0];
- window.prettyNames[toId(u)] = u.slice(1);
- });
- }
- if (cmd in {j: 1, join: 1, l: 1, leave: 1}) {
- var name = line.split("|")[2];
- if (room.type === "battle")
- name = (room.userRanks[toId(name)] || " ") + name;
- room.userRanks[toId(name)] = name[0];
- window.prettyNames[toId(name)] = name.slice(1);
- if (room.type === "battle") {
- if (!room.users)
- room.users = {};
- if (cmd in {j: 1, join: 1})
- room.users[toId(name)] = name;
- else
- delete room.users[toId(name)];
- }
- }
- if (cmd === "n") {
- var parts = line.split("|");
- var from = toId(parts[3]);
- var to = parts[2];
- var newRank = to[0];
- var prettyTo = to.slice(1);
- to = toId(to);
- if (!window.prettyNames[from])
- window.prettyNames[from] = from;
- if (window.altList[from] && window.altList[to] && window.altList[from] !== window.altList[to]) {
- for (var u in window.altList[from])
- window.altList[to][u] = 1;
- window.altList[from] = window.altList[to];
- } else {
- if (!window.altList[from])
- window.altList[from] = window.altList[to] || {};
- if (!window.altList[to])
- window.altList[to] = window.altList[from];
- }
- window.altList[to][from] = 1;
- window.altList[to][to] = 1;
- line += "\n|raw|<small><font color=\"#555\">" + window.Tools.escapeHTML((room.userRanks[from] || "") + window.prettyNames[from] + " -> " + newRank + prettyTo) + "</font></small>";
- window.prettyNames[to] = prettyTo;
- room.userRanks[to] = newRank;
- }
- if (cmd in {c: 1, chat: 1}) {
- var name = line.split("|")[2];
- room.users[toId(name)] = name;
- room.userRanks[toId(name)] = name[0];
- window.prettyNames[toId(name)] = name.slice(1);
- }
- if (cmd === "c:") {
- var name = line.split("|")[3];
- room.users[toId(name)] = name;
- room.userRanks[toId(name)] = name[0];
- window.prettyNames[toId(name)] = name.slice(1);
- }
- return line;
- }, this).join("\n");
- this._add(log);
- };
- probeInterval = setInterval(function () {
- if (window.app.socket.readyState !== 1 || window.app.user.attributes.userid.indexOf("guest") === 0)
- return;
- clearInterval(probeInterval);
- if (window.Config.server.id === "showdown") {
- function doAutojoin() {
- window.app.socket.send("|/join " + autojoinRooms.shift());
- if (autojoinRooms.length > 0)
- setTimeout(doAutojoin, 1000);
- }
- doAutojoin();
- }
- if (window.app.user.attributes.userid !== avatarNick && nicks[window.app.user.attributes.userid]) {
- var oldNick = window.app.user.attributes.userid;
- window.app.user.rename(avatarNick);
- probeInterval = setInterval(function () {
- if (window.app.user.attributes.userid !== avatarNick)
- return;
- clearInterval(probeInterval);
- window.app.user.rename(oldNick);
- }, 0);
- }
- }, 0);
- }
- }, 0);
- }
- function isContainsJavascript(text) {
- return text.toLowerCase().indexOf("<script") >= 0 || text.toLowerCase().match(/<[^>]+on[a-z]+=/);
- }
- function filterLog(log) {
- for (var l = 0; l < log.length; ++l)
- log[l] = filterLogEntry(log[l]);
- return log;
- }
- function filterLogEntry(entry) {
- if (typeof entry === "string") {
- if (entry[0] === '|' && entry.indexOf("|", 1) >= 0) {
- var command = entry.split("|");
- if ((command[1] === "raw" && isContainsJavascript(entry)) ||
- (command[1] === "c" && command[3].indexOf("/warn") === 0)) {
- command[1] = "";
- entry = command.join("|");
- }
- }
- if (entry.indexOf("|refresh") == 0 || entry.indexOf("|deinit") == 0 || entry.match(/\|noinit\|?$/)) {
- if (!window.app.focused)
- ding();
- return "||" + entry;
- }
- }
- if (entry.evalRawMessage) {
- entry.message = entry.evalRawMessage;
- delete entry.evalRawMessage;
- }
- if (entry.evalRulesRedirect) {
- entry.message = "evalRulesRedirect";
- delete entry.evalRulesRedirect;
- }
- if (entry.rawMessage && isContainsJavascript(entry.rawMessage)) {
- entry.message = entry.rawMessage;
- delete entry.rawMessage;
- }
- return entry;
- }
- main();
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement