7Placer

typescript pixelplace.io bot

当前为 2025-02-25 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name          7Placer
// @description   typescript pixelplace.io bot
// @version       1.6
// @author        Azti
// @match         https://pixelplace.io/*
// @require       https://update.greasyfork.org/scripts/498080/1395134/Hacktimer.js
// @require       https://pixelplace.io/js/jquery.min.js?v2=1
// @require       https://pixelplace.io/js/jquery-ui.min.js?v2=1
// @grant         none
// @run-at        document-start
// @namespace https://greasyfork.org/users/374503
// ==/UserScript==

/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ "./src/auth/Auth.ts":
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => (/* binding */ Auth)
    /* harmony export */ });
    class Auth {
        constructor(authObj) {
            this.authKey = authObj.authKey;
            this.authId = authObj.authId;
            this.authToken = authObj.authToken;
        }
    }
    
    
    /***/ }),
    
    /***/ "./src/auth/util/commands.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   connect: () => (/* binding */ connect),
    /* harmony export */   deleteAccount: () => (/* binding */ deleteAccount),
    /* harmony export */   disconnect: () => (/* binding */ disconnect),
    /* harmony export */   getAccounts: () => (/* binding */ getAccounts),
    /* harmony export */   getAuth: () => (/* binding */ getAuth),
    /* harmony export */   saveAccount: () => (/* binding */ saveAccount),
    /* harmony export */   saveAuth: () => (/* binding */ saveAuth)
    /* harmony export */ });
    /* harmony import */ var _Auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./src/auth/Auth.ts");
    /* harmony import */ var _bot_Bot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/Bot.ts");
    /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/variables.ts");
    /* harmony import */ var _requests_get_painting__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/requests/get-painting.ts");
    /* harmony import */ var _bot_util_websocket__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/bot/util/websocket.ts");
    
    
    
    
    
    const window2 = window;
    var LocalAccounts = new Map();
    // save changes in localstorage
    function storagePush() {
        const obj = Object.fromEntries(LocalAccounts);
        localStorage.setItem('LocalAccounts', JSON.stringify(obj));
    }
    // restore localstorage to localaccounts
    function storageGet() {
        const storedAccounts = localStorage.getItem('LocalAccounts');
        if (storedAccounts) {
            const parsedAccounts = JSON.parse(storedAccounts);
            LocalAccounts = new Map(Object.entries(parsedAccounts));
        }
        else
            LocalAccounts = new Map();
    }
    async function delay(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
    // saves from params
    function saveAuth(username, authId, authKey, authToken, print = true) {
        if (!authId || !authKey || !authToken) {
            console.log('[7p] saveAuth usage: saveAuth(username, authId, authKey, authToken)');
            return;
        }
        const account = { authId, authKey, authToken };
        LocalAccounts.set(username, account);
        storagePush();
        if (print)
            console.log('Auth saved. Saved list: ', LocalAccounts);
    }
    // returns client's auth
    async function getAuth(print = true) {
        const cookieStore = window2.cookieStore;
        const authToken = await cookieStore.get("authToken");
        const authKey = await cookieStore.get("authKey");
        const authId = await cookieStore.get("authId");
        if (authToken == null || authKey == null || authId == null) {
            console.log('[7p] Please login first!');
            return;
        }
        if (print)
            console.log(`authId = "${authId.value}", authKey = "${authKey.value}", authToken = "${authToken.value}"`);
        return { authToken: authToken.value, authKey: authKey.value, authId: authId.value };
    }
    // saves auth from client cookies
    async function saveAccount() {
        storageGet();
        const AuthObj = await getAuth(false);
        const userinfo = await (0,_requests_get_painting__WEBPACK_IMPORTED_MODULE_2__["default"])(AuthObj.authId, AuthObj.authKey, AuthObj.authToken);
        saveAuth(userinfo.user.name, AuthObj.authId, AuthObj.authKey, AuthObj.authToken, false);
        console.log('Auth saved. Saved list: ', LocalAccounts);
    }
    // logs saved auths
    function getAccounts() {
        storageGet();
        if (!LocalAccounts || LocalAccounts.size == 0) {
            console.log('No accounts found');
            return;
        }
        console.log(`Found ${LocalAccounts.size} accounts`);
        console.log(LocalAccounts);
    }
    // deletes auths
    function deleteAccount(identifier) {
        if (identifier == null) {
            console.log('deleteAccount usage: deleteAccount(user or index)');
            return;
        }
        storageGet();
        if (typeof identifier == 'string') {
            if (identifier == 'all') {
                LocalAccounts.forEach((value, key) => {
                    LocalAccounts.delete(key);
                });
                return;
            }
            if (!LocalAccounts.has(identifier)) {
                console.log(`[7p] Error deleting: No account with name ${identifier}`);
                return;
            }
            LocalAccounts.delete(identifier);
            console.log(`[7p] Deleted account ${identifier}.`);
            console.log(LocalAccounts);
        }
        if (typeof identifier == 'number') {
            const keys = Array.from(LocalAccounts.keys());
            if (identifier > keys.length) {
                console.log(`[7p] Error deleting: No account with index ${identifier}`);
                return;
            }
            LocalAccounts.delete(keys[identifier]);
            console.log(`Deleted account ${identifier}`);
            console.log(LocalAccounts);
        }
        storagePush();
    }
    async function connect(username) {
        storageGet();
        const account = LocalAccounts.get(username);
        const connectedbot = window2.seven.bots.find((bot) => bot.generalinfo?.user.name == username);
        if (!username) {
            console.log('[7p] Missing bot username, connect("username")');
            return;
        }
        if (username == 'all') {
            for (const [username, account] of LocalAccounts) {
                // checks if bot is already connected
                const connectedbot = window2.seven.bots.find((bot) => bot.generalinfo?.user.name == username);
                const auth = new _Auth__WEBPACK_IMPORTED_MODULE_4__["default"](account);
                if (connectedbot) {
                    console.log(`[7p] Account ${username} is already connected.`);
                    continue;
                }
                new _bot_Bot__WEBPACK_IMPORTED_MODULE_0__.WSBot(auth, username);
                await delay(500);
            }
            return;
        }
        if (!account) {
            console.log(`[7p] No account found with username ${username}`);
            return;
        }
        if (connectedbot) {
            console.log(`[7p] Account ${username} is already connected.`);
            return;
        }
        const auth = new _Auth__WEBPACK_IMPORTED_MODULE_4__["default"](account);
        new _bot_Bot__WEBPACK_IMPORTED_MODULE_0__.WSBot(auth, username);
    }
    function disconnect(username) {
        const bot = window2.seven.bots.find((bot) => bot.generalinfo?.user.name == username);
        if (!username) {
            console.log('[7p] disconnect requires a username, disconnect("username")');
            return;
        }
        if (username == 'all') {
            if (window2.seven.bots.length == 1) {
                console.log('[7p] No bots connected.');
                return;
            }
            for (const bot of window2.seven.bots) {
                (0,_bot_util_websocket__WEBPACK_IMPORTED_MODULE_3__.closeBot)(bot);
            }
            return;
        }
        if (!bot) {
            console.log(`[7p] No bot connected with username ${username}`);
            return;
        }
        (0,_bot_util_websocket__WEBPACK_IMPORTED_MODULE_3__.closeBot)(bot);
    }
    
    
    /***/ }),
    
    /***/ "./src/bot/Bot.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   Bot: () => (/* binding */ Bot),
    /* harmony export */   Client: () => (/* binding */ Client),
    /* harmony export */   WSBot: () => (/* binding */ WSBot)
    /* harmony export */ });
    /* harmony import */ var _util_websocket__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/util/websocket.ts");
    /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/Canvas.ts");
    /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/variables.ts");
    /* harmony import */ var _css_style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/css/style.ts");
    /* harmony import */ var _requests_get_painting__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./src/requests/get-painting.ts");
    
    
    
    
    
    
    const seven = window.seven;
    class Bot {
        constructor() {
            this.trackeriters = 0;
            this.lastplace = Date.now();
            this.botid = Bot.botIndex;
            Bot.botIndex += 1; // id for next bot
        }
        emit(event, params) {
            this.ws.send(`42["${event}",${params}]`);
        }
        async placePixel(x, y, color, tracker = true) {
            const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
            return new Promise((resolve) => {
                const canvascolor = canvas.getColor(x, y);
                if (canvascolor == color || canvascolor == 200)
                    return resolve(true);
                new Promise((resolve) => {
                    setTimeout(() => resolve(true), Math.max(0, seven.pixelspeed - (Date.now() - this.lastplace)));
                }).then(() => {
                    this.emit('p', `[${x},${y},${color},1]`);
                    this.lastplace = Date.now();
                    if (tracker && this.trackeriters >= 6) {
                        $(this.tracker).css({ top: y, left: x, display: 'block' });
                        this.trackeriters = 0;
                    }
                    // console.log(`[7p] placing: ${canvascolor} -> ${color}`)
                    this.trackeriters += 1;
                    resolve(true);
                });
            });
        }
        static async findAvailableBot() {
            const bots = seven.bots;
            var tick = 0;
            while (true) {
                for (var i = 0; i < bots.length; i++) {
                    const bot = bots[i];
                    if (Date.now() - bot.lastplace >= seven.pixelspeed) {
                        return bot;
                    }
                }
                tick += 1;
                if (tick == seven.tickspeed) {
                    tick = 0;
                    await new Promise(resolve => setTimeout(resolve, 0));
                }
            }
        }
        createTracker() {
            const tracker = $('<div class="track" id="bottracker">').text(`[7P] ${this.username}`).css(_css_style__WEBPACK_IMPORTED_MODULE_3__.trackercss);
            $('#canvas').ready(function () {
                // console.log(`[7p] created tracker: ${name}`)
                $('#painting-move').append(tracker);
            });
            return tracker;
        }
        set ws(wss) {
            this._ws = wss;
        }
        get ws() {
            return this._ws;
        }
    }
    Bot.botIndex = 0;
    class WSBot extends Bot {
        constructor(auth, username) {
            super();
            if (!username || !auth) {
                console.error("[7p ERROR]: 'auth' and 'username' should both be in the constructor arguments.");
                return;
            }
            this._auth = auth;
            this.username = username;
            this.startBot();
        }
        async startBot() {
            this.generalinfo = await (0,_requests_get_painting__WEBPACK_IMPORTED_MODULE_4__["default"])(this.auth.authId, this.auth.authKey, this.auth.authToken);
            this.tracker = this.createTracker();
            this.ws = await (0,_util_websocket__WEBPACK_IMPORTED_MODULE_0__.hookBot)(this);
        }
        get auth() {
            return this._auth;
        }
    }
    class Client extends Bot {
        constructor() {
            super();
            this.username = 'Client';
            Client.instance = this;
            this.tracker = this.createTracker();
            seven.bots.push(this);
        }
        static get Client() {
            return Client.instance;
        }
    }
    
    
    /***/ }),
    
    /***/ "./src/bot/util/onmessage.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   onBotMessage: () => (/* binding */ onBotMessage),
    /* harmony export */   onClientMessage: () => (/* binding */ onClientMessage)
    /* harmony export */ });
    /* harmony import */ var _Bot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/Bot.ts");
    /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/Canvas.ts");
    /* harmony import */ var _palive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/bot/util/palive.ts");
    /* harmony import */ var _websocket__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/bot/util/websocket.ts");
    /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./src/variables.ts");
    /* harmony import */ var _auth_util_commands__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./src/auth/util/commands.ts");
    /* harmony import */ var _modules_defaultModules_SevenProtect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./src/modules/defaultModules/SevenProtect.ts");
    
    
    
    
    
    
    
    const seven = window.seven;
    // client
    function onClientMessage(event) {
        const msg = event.data;
        const bot = _Bot__WEBPACK_IMPORTED_MODULE_0__.Client.instance;
        if (msg.startsWith("42")) {
            const msg = JSON.parse(event.data.substr(2));
            const type = msg[0];
            switch (type) {
                case "p":
                    for (const pixel of msg[1]) {
                        const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
                        const x = pixel[0];
                        const y = pixel[1];
                        const color = pixel[2];
                        const id = pixel[4];
                        canvas.updatePixel(x, y, color);
                        _modules_defaultModules_SevenProtect__WEBPACK_IMPORTED_MODULE_6__["default"].checkPixel(x, y, color);
                    }
                    break;
                case "canvas":
                    for (const pixel of msg[1]) {
                        const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
                        const x = pixel[0];
                        const y = pixel[1];
                        const color = pixel[2];
                        canvas.updatePixel(x, y, color);
                    }
                    break;
            }
        }
    }
    // multibot
    async function onBotMessage(event, bot) {
        const message = event.data;
        // game packets
        if (message.startsWith("42")) {
            const message = JSON.parse(event.data.substr(2));
            const type = message[0];
            const botid = bot.generalinfo.user.id;
            const botname = bot.username;
            switch (type) {
                case "server_time":
                    bot.paliveServerTime = message[1]; // stores servertime for palive
                    break;
                case "ping.alive":
                    const hash = (0,_palive__WEBPACK_IMPORTED_MODULE_2__["default"])(bot.paliveServerTime, botid);
                    console.log('[7p]', botname, ': pong =', hash, botid);
                    bot.emit('pong.alive', `"${hash}"`);
                    break;
                case "throw.error":
                    if (message[1] == 49) {
                        console.log(`[7p] [Bot ${botname}] Error (${message[1]}): This auth is not valid! Deleting account from saved accounts...`);
                        (0,_auth_util_commands__WEBPACK_IMPORTED_MODULE_5__.deleteAccount)(botname);
                        (0,_websocket__WEBPACK_IMPORTED_MODULE_3__.closeBot)(bot);
                        return;
                    }
                    else if (message[1] == 16) {
                        (0,_websocket__WEBPACK_IMPORTED_MODULE_3__.closeBot)(bot);
                    }
                    console.log(`[7p] [Bot ${botname}] Pixelplace WS error: ${message[1]}`);
                    break;
                case "canvas":
                    console.log(`[7p] Succesfully connected to bot ${bot.username}`);
                    seven.bots.push(bot);
                    break;
            }
        }
        // start
        if (message.startsWith("0"))
            bot.ws.send('40');
        // auth
        if (message.startsWith("40"))
            bot.ws.send(`42["init",{"authKey":"${bot.auth.authKey}","authToken":"${bot.auth.authToken}","authId":"${bot.auth.authId}","boardId":${_canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance.ID}}]`);
        // keep alive
        if (message.startsWith("2"))
            bot.ws.send('3');
    }
    
    
    /***/ }),
    
    /***/ "./src/bot/util/palive.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => (/* binding */ getPalive),
    /* harmony export */   getTDelay: () => (/* binding */ getTDelay)
    /* harmony export */ });
    // credits to symmetry
    function randomString(charList, num) {
        return Array.from({ length: num }, () => charList.charAt(Math.floor(Math.random() * charList.length))).join('');
    }
    function randomString1(num) {
        const charList = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        return randomString(charList, num);
    }
    function randomString2(num) {
        const charList = 'gmbonjklezcfxta1234567890GMBONJKLEZCFXTA';
        return randomString(charList, num);
    }
    function randInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    const paliveCharmap = {
        "0": "g",
        "1": "n",
        "2": "b",
        "3": "r",
        "4": "z",
        "5": "s",
        "6": "l",
        "7": "x",
        "8": "i",
        "9": "o",
    };
    function getPalive(serverTime, userId) {
        const tDelay = getTDelay(serverTime);
        const sequenceLengths = [6, 5, 9, 4, 5, 3, 6, 6, 3];
        const currentTimestamp = Math.floor(Date.now() / 1000) + tDelay - 5400;
        const timestampString = currentTimestamp.toString();
        const timestampCharacters = timestampString.split('');
        let result = '';
        for (let i = 0; i < sequenceLengths.length; i++) {
            const sequenceNumber = sequenceLengths[i];
            result += randInt(0, 1) == 1 ? randomString2(sequenceNumber) : randomString1(sequenceNumber);
            const letter = paliveCharmap[parseInt(timestampCharacters[i])];
            result += randInt(0, 1) == 0 ? letter.toUpperCase() : letter;
        }
        result += userId.toString().substring(0, 1) + (randInt(0, 1) == 1 ? randomString2(randInt(4, 20)) : randomString1(randInt(4, 25)));
        return result + "0=";
    }
    function getTDelay(serverTime) {
        const currentTime = new Date().getTime() / 1e3;
        return Math.floor(serverTime - currentTime);
    }
    
    
    /***/ }),
    
    /***/ "./src/bot/util/websocket.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   closeBot: () => (/* binding */ closeBot),
    /* harmony export */   hookBot: () => (/* binding */ hookBot)
    /* harmony export */ });
    /* harmony import */ var _Bot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/Bot.ts");
    /* harmony import */ var _onmessage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/bot/util/onmessage.ts");
    /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/variables.ts");
    
    
    
    const seven = window.seven;
    // client
    const customWS = window.WebSocket;
    window.WebSocket = function (url, protocols) {
        const client = new _Bot__WEBPACK_IMPORTED_MODULE_0__.Client();
        const socket = new customWS(url, protocols);
        socket.addEventListener("message", (event) => { (0,_onmessage__WEBPACK_IMPORTED_MODULE_1__.onClientMessage)(event); });
        client.ws = socket;
        return socket;
    };
    // multibot
    async function hookBot(bot) {
        console.log(`[7p] Attempting to connect account ${bot.username}`);
        const socket = new customWS("wss://pixelplace.io/socket.io/?EIO=4&transport=websocket");
        socket.addEventListener("message", (event) => { (0,_onmessage__WEBPACK_IMPORTED_MODULE_1__.onBotMessage)(event, bot); });
        socket.addEventListener("close", () => { _Bot__WEBPACK_IMPORTED_MODULE_0__.Bot.botIndex -= 1; });
        return socket;
    }
    function closeBot(bot) {
        if (bot instanceof _Bot__WEBPACK_IMPORTED_MODULE_0__.Client)
            return;
        if (!bot) {
            console.log('[7p] Cannot close bot that doesnt exist.');
            return;
        }
        bot.ws.close();
        const result = seven.bots.filter((checkedBot) => checkedBot.botid != bot.botid);
        seven.bots = result;
        console.log('[7placer] Ended bot ', bot.botid);
    }
    
    
    /***/ }),
    
    /***/ "./src/canvas/Canvas.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   Canvas: () => (/* binding */ Canvas),
    /* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
    /* harmony export */ });
    /* harmony import */ var _css_style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/css/style.ts");
    /* harmony import */ var _util_canvasloader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/util/canvasloader.ts");
    
    
    class Canvas {
        constructor() {
            this._ID = this.ParseID();
            this._isProcessed = false;
            this._customCanvas = this.newPreviewCanvas();
        }
        static get instance() {
            if (!Canvas._instance) {
                Canvas._instance = new Canvas;
                (0,_util_canvasloader__WEBPACK_IMPORTED_MODULE_1__.processColors)();
            }
            return Canvas._instance;
        }
        newPreviewCanvas() {
            const canvas = $(`<canvas width="2500" height="2088">`).css(_css_style__WEBPACK_IMPORTED_MODULE_0__.canvascss);
            $('#canvas').ready(function () {
                $('#painting-move').append(canvas);
            });
            const ctx = canvas[0].getContext("2d");
            return ctx;
        }
        ParseID() {
            return parseInt(window.location.href.split("/").slice(-1)[0].split("-")[0]);
        }
        get previewCanvas() {
            return this._customCanvas;
        }
        get canvasArray() {
            return this._canvasArray;
        }
        get isProcessed() {
            return this._isProcessed;
        }
        set isProcessed(bool) {
            this._isProcessed = bool;
        }
        get ID() {
            return this._ID;
        }
        set canvasArray(array) {
            this._canvasArray = array;
            this.isProcessed = true;
        }
        getColor(x, y) {
            try {
                return this.canvasArray[x][y];
            }
            catch {
                return 200;
            }
            ;
        }
        updatePixel(x, y, color) {
            if (!this._isProcessed)
                return;
            this.canvasArray[x][y] = color;
            // console.log(this.getColor(x, y), "->", color) 
        }
    }
    /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Canvas);
    
    
    /***/ }),
    
    /***/ "./src/canvas/util/canvasloader.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   processColors: () => (/* binding */ processColors),
    /* harmony export */   processWater: () => (/* binding */ processWater)
    /* harmony export */ });
    /* harmony import */ var _Canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/canvas/Canvas.ts");
    /* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/util/colors.ts");
    
    
    async function processWater() {
        const image = await fetch('https://pixelplace.io/canvas/' + _Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance.ID + 'p.png?t200000=' + Date.now());
        const blob = await image.blob();
        const bitmap = await createImageBitmap(blob);
        const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);
        var waterArray = Array.from({ length: canvas.width }, () => Array.from({ length: canvas.height }, () => 1));
        const context = canvas.getContext('2d');
        context.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height);
        const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
        return new Promise((resolve) => {
            if (bitmap.width == 1 && bitmap.height == 1) { // custom canvases ?
                resolve(waterArray);
            }
            for (let y = 0; y < canvas.height; y++) {
                for (let x = 0; x < canvas.width; x++) {
                    const index = (y * imageData.width + x) * 4;
                    var r = imageData.data[index];
                    var g = imageData.data[index + 1];
                    var b = imageData.data[index + 2];
                    if (r == 204 && g == 204 && b == 204) {
                        waterArray[x][y] = 200;
                    }
                }
            }
            console.log(waterArray);
            resolve(waterArray);
        });
    }
    async function processColors() {
        const startTotalTime = performance.now();
        const waterArray = await processWater();
        const startColorsTime = performance.now();
        const canvas = document.getElementById('canvas');
        const ctx = canvas.getContext('2d');
        const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
        const pixelData = imageData.data;
        var CanvasArray = Array.from({ length: canvas.width }, () => Array.from({ length: canvas.height }, () => 1));
        if (waterArray.length > 1) {
            CanvasArray = waterArray;
        }
        for (let y = 0; y < canvas.height; y++) {
            for (let x = 0; x < canvas.width; x++) {
                if (CanvasArray[x][y] == 200) {
                    continue;
                }
                const pixelIndex = (y * canvas.width + x) * 4;
                const r = pixelData[pixelIndex];
                const g = pixelData[pixelIndex + 1];
                const b = pixelData[pixelIndex + 2];
                const colornum = (r << 16) | (g << 8) | b;
                const colorIndex = _colors__WEBPACK_IMPORTED_MODULE_1__.colors.indexOf(colornum);
                CanvasArray[x][y] = colorIndex;
            }
        }
        console.log(CanvasArray);
        _Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance.canvasArray = CanvasArray;
        const finalTotalTime = performance.now() - startTotalTime;
        const finalColorsTime = performance.now() - startColorsTime;
        const finalWaterTime = startColorsTime - startTotalTime;
        console.log(`[7p PROCESSING] Total Time: ${finalTotalTime}ms, Colors Time: ${finalColorsTime}ms, Water Time: ${finalWaterTime}ms`);
    }
    
    
    /***/ }),
    
    /***/ "./src/canvas/util/colors.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   colors: () => (/* binding */ colors)
    /* harmony export */ });
    const colors = [
        0xFFFFFF,
        0xC4C4C4,
        0x888888,
        0x555555,
        0x222222,
        0x000000,
        0x006600,
        0x22B14C,
        0x02BE01,
        0x51E119,
        0x94E044,
        0xFBFF5B,
        0xE5D900,
        0xE6BE0C,
        0xE59500,
        0xA06A42,
        0x99530D,
        0x633C1F,
        0x6B0000,
        0x9F0000,
        0xE50000,
        0xFF3904,
        0xBB4F00,
        0xFF755F,
        0xFFC49F,
        0xFFDFCC,
        0xFFA7D1,
        0xCF6EE4,
        0xEC08EC,
        0x820080,
        0x5100FF,
        0x020763,
        0x0000EA,
        0x044BFF,
        0x6583CF,
        0x36BAFF,
        0x0083C7,
        0x00D3DD,
        0x45FFC8,
        0x003638,
        0x477050,
        0x98FB98,
        0xFF7000,
        0xCE2939,
        0xFF416A,
        0x7D26CD,
        0x330077,
        0x005BA1,
        0xB5E8EE,
        0x1B7400,
        0x75CEA9,
        0x34EB6B,
        0xFFCC00,
        0xBB276C,
        0xFF7EBB,
        0x440414,
        0x591C91,
        0xC1A162,
        0xCAFF70,
        0x013182,
        0xA6A6A6,
        0x6F6F6F,
        0x3A3A3A,
        0x4D082C
    ];
    
    
    /***/ }),
    
    /***/ "./src/css/drop.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   createDropArea: () => (/* binding */ createDropArea)
    /* harmony export */ });
    /* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/css/style.ts");
    /* harmony import */ var _modules_defaultModules_SevenImageTools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenImageTools.ts");
    /* harmony import */ var _modules_util_getClientMouse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/modules/util/getClientMouse.ts");
    
    
    
    function createDropArea() {
        const dropobject = $('<div>').text('Drop Image').css(_style__WEBPACK_IMPORTED_MODULE_0__.drop);
        const [x, y] = (0,_modules_util_getClientMouse__WEBPACK_IMPORTED_MODULE_2__["default"])();
        $('body').append(dropobject);
        dropobject.on("click", function () {
            dropobject.remove();
        });
        dropobject.on("drop", async function (event) {
            event.preventDefault();
            event.stopPropagation();
            const image = event.originalEvent.dataTransfer.files[0];
            dropobject.remove();
            await (0,_modules_defaultModules_SevenImageTools__WEBPACK_IMPORTED_MODULE_1__.botImage)(x, y, image);
            // console.log(image)
        }).on('dragover', false);
    }
    
    
    /***/ }),
    
    /***/ "./src/css/style.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   canvascss: () => (/* binding */ canvascss),
    /* harmony export */   drop: () => (/* binding */ drop),
    /* harmony export */   trackercss: () => (/* binding */ trackercss)
    /* harmony export */ });
    const trackercss = {
        top: '0px',
        left: '0px',
        borderColor: 'rgb(138,43,226)',
        color: 'rgb(138,43,226)',
        backgroundColor: 'black',
        opacity: '60%',
        display: 'none',
        transition: 'all 0.06s ease-in-out',
        pointerEvents: 'none'
    };
    // design by 0vc4
    const drop = {
        width: 'calc(100% - 2em)',
        height: 'calc(100% - 2em)',
        position: 'fixed',
        left: '0px',
        top: '0px',
        backgroundColor: 'rgba(0, 0, 0, 0.533)',
        zIndex: '9999-',
        display: 'flex',
        color: 'white',
        fontSize: '48pt',
        justifyContent: 'center',
        alignItems: 'center',
        border: '3px white dashed',
        borderRadius: '18px',
        margin: '1em',
    };
    const canvascss = {
        position: 'absolute',
        pointerEvents: 'none',
        left: '0px',
        top: '0px',
        imageRendering: 'pixelated',
        opacity: '50%',
        animation: 'blink 3s ease-out infinite'
    };
    const blink = document.createElement("style");
    blink.type = "text/css";
    blink.innerText = `
    @keyframes blink {
      0% { opacity: .30; }
      50% { opacity: .10; }
      100% { opacity: .30; }
    }`;
    document.head.appendChild(blink);
    
    
    /***/ }),
    
    /***/ "./src/index.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    // ESM COMPAT FLAG
    __webpack_require__.r(__webpack_exports__);
    
    ;// CONCATENATED MODULE: ./package.json
    const package_namespaceObject = {"rE":"1.6"};
    ;// CONCATENATED MODULE: ./src/index.ts
    
    // @ts-ignore (GLOBAL IMPORT)
    const context = __webpack_require__("./src sync recursive \\.*");
    context.keys().forEach(context);
    Object.defineProperty(window.console, 'log', {
        configurable: false,
        enumerable: true,
        writable: false,
        value: console.log
    });
    console.log('7Placer Loaded! Version:', package_namespaceObject.rE);
    
    
    /***/ }),
    
    /***/ "./src/modules/defaultModules/SevenImageTools.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   ImageToPixels: () => (/* binding */ ImageToPixels),
    /* harmony export */   botImage: () => (/* binding */ botImage)
    /* harmony export */ });
    /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/canvas/Canvas.ts");
    /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/variables.ts");
    /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
    /* harmony import */ var _canvas_util_colors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./src/canvas/util/colors.ts");
    /* harmony import */ var _SevenSorting__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/modules/defaultModules/SevenSorting.ts");
    
    
    
    
    
    function getColorDistance(c1, c2) {
        // Image Color
        const r1 = (c1 >> 16) & 0xFF;
        const g1 = (c1 >> 8) & 0xFF;
        const b1 = c1 & 0xFF;
        // Pixelplace Color
        const r2 = (c2 >> 16) & 0xFF;
        const g2 = (c2 >> 8) & 0xFF;
        const b2 = c2 & 0xFF;
        return (r1 - r2) ** 2 + (g1 - g2) ** 2 + (b1 - b2) ** 2;
    }
    function findClosestColor(color) {
        let minDistance = Infinity;
        let colorNumber;
        let index = 0;
        for (const pxpColor of _canvas_util_colors__WEBPACK_IMPORTED_MODULE_4__.colors) {
            const distance = getColorDistance(color, pxpColor);
            if (distance < minDistance) {
                minDistance = distance;
                colorNumber = index;
            }
            index += 1;
        }
        return colorNumber;
    }
    function previewCanvasImage(x, y, image) {
        const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance;
        const ctx = canvas.previewCanvas;
        const img = new Image();
        img.onload = function () {
            ctx.drawImage(img, x, y);
        };
        img.src = URL.createObjectURL(image);
    }
    async function ImageToPixels(image) {
        const result = [];
        const canvas = new OffscreenCanvas(image.width, image.height);
        const ctx = canvas.getContext('2d');
        ctx.drawImage(image, 0, 0, image.width, image.height);
        const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
        const pixelData = imageData.data;
        for (let y = 0; y < canvas.height; y++) {
            for (let x = 0; x < canvas.width; x++) {
                const pixelIndex = (y * canvas.width + x) * 4;
                const r = pixelData[pixelIndex];
                const g = pixelData[pixelIndex + 1];
                const b = pixelData[pixelIndex + 2];
                const a = pixelData[pixelIndex + 3];
                const colornum = (r << 16) | (g << 8) | b;
                if (a < 1) {
                    continue; // ignore transparent pixels
                }
                const color = findClosestColor(colornum);
                result.push({ x, y, color });
            }
        }
        return result;
    }
    async function botImage(x, y, image) {
        const bitmap = await createImageBitmap(image);
        const processed = await ImageToPixels(bitmap);
        previewCanvasImage(x, y, image);
        (0,_SevenSorting__WEBPACK_IMPORTED_MODULE_3__["default"])(processed, window.seven.order);
        processed.forEach((pixel) => _SevenQueue__WEBPACK_IMPORTED_MODULE_2__["default"].add(pixel.x + x, pixel.y + y, pixel.color));
    }
    
    
    /***/ }),
    
    /***/ "./src/modules/defaultModules/SevenProtect.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
    /* harmony export */ });
    /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/canvas/Canvas.ts");
    /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
    
    
    class Protector {
        protect(x, y, color) {
            Protector.protected.push({ x: x, y: y, color: color });
        }
        static clear() {
            Protector.protected = [];
        }
        static checkPixel(x, y, color) {
            const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance;
            if (Protector.protected.length == 0) {
                return;
            }
            function isInsideProtected(pixel) {
                if (pixel.x == x && pixel.y == y) {
                    return true;
                }
                return false;
            }
            function isSameColor(pixel) {
                const canvasColor = canvas.getColor(x, y);
                if (canvasColor == pixel.color) {
                    return true;
                }
                return false;
            }
            Protector.protected.forEach((pixel) => {
                if (isInsideProtected(pixel) && !isSameColor(pixel)) {
                    _SevenQueue__WEBPACK_IMPORTED_MODULE_1__["default"].add(x, y, pixel.color);
                }
            });
        }
    }
    Protector.protected = [];
    /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Protector);
    
    
    /***/ }),
    
    /***/ "./src/modules/defaultModules/SevenQueue.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => (/* binding */ Queue)
    /* harmony export */ });
    /* harmony import */ var _bot_Bot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/bot/Bot.ts");
    /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/canvas/Canvas.ts");
    /* harmony import */ var _variables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/variables.ts");
    /* harmony import */ var _SevenProtect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/modules/defaultModules/SevenProtect.ts");
    
    
    
    
    const seven = window.seven;
    class Queue {
        constructor() {
            Queue.performance = performance.now();
        }
        static add(x, y, color) {
            seven.queue.push({ x: x, y: y, color: color });
            if (seven.queue.length == 1) {
                Queue.start();
            }
        }
        static clear() {
            // console.log('Queue cleared: ', seven.queue)
            seven.queue = [];
        }
        static async start() {
            const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
            const protector = new _SevenProtect__WEBPACK_IMPORTED_MODULE_3__["default"];
            if (!canvas.isProcessed) {
                console.log('[7p] Error starting queue: Canvas has not been processed yet.');
                Queue.stop();
                return;
            }
            seven.inprogress = true;
            while (seven.inprogress) {
                console.log(performance.now() - Queue.performance);
                Queue.performance = performance.now();
                const pixel = seven.queue[0];
                const bot = await _bot_Bot__WEBPACK_IMPORTED_MODULE_0__.Bot.findAvailableBot();
                await bot.placePixel(pixel.x, pixel.y, pixel.color);
                seven.queue.shift();
                if (seven.protect) {
                    protector.protect(pixel.x, pixel.y, pixel.color);
                }
                if (seven.queue.length == 0) {
                    seven.inprogress = false;
                    console.log('[7p] Queue done.');
                }
            }
        }
        static stop() {
            seven.inprogress = false;
            const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_1__["default"].instance;
            canvas.previewCanvas.clearRect(0, 0, 3000, 3000);
            _SevenProtect__WEBPACK_IMPORTED_MODULE_3__["default"].clear();
            Queue.clear();
        }
    }
    
    
    /***/ }),
    
    /***/ "./src/modules/defaultModules/SevenSorting.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => (/* binding */ sort)
    /* harmony export */ });
    const seven = window.seven;
    function sort(array, order) {
        switch (seven.order) {
            case 'rand':
                array.sort(() => Math.random() - 0.5);
                return array;
            case 'colors':
                array.sort((a, b) => a.color - b.color);
                return array;
            case 'vertical':
                array.sort((a, b) => a.x - b.x);
                return array;
            case 'horizontal':
                array.sort((a, b) => a.y - b.y);
                return array;
            default:
            case 'circle':
                const CX = Math.floor((array[0].x + array[array.length - 1].x) / 2);
                const CY = Math.floor((array[0].y + array[array.length - 1].y) / 2);
                array.sort((a, b) => {
                    const distanceA = Math.sqrt((a.x - CX) ** 2 + (a.y - CY) ** 2);
                    const distanceB = Math.sqrt((b.x - CX) ** 2 + (b.y - CY) ** 2);
                    return distanceA - distanceB;
                });
                return array;
        }
    }
    
    
    /***/ }),
    
    /***/ "./src/modules/defaultModules/SevenSquareMaker.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   BotSquare: () => (/* binding */ BotSquare)
    /* harmony export */ });
    /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
    /* harmony import */ var _SevenSorting__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenSorting.ts");
    
    
    function BotSquare(x1, y1, x2, y2, color) {
        var result = [];
        if (x2 < x1)
            [x1, x2] = [x2, x1];
        if (y2 < y1)
            [y1, y2] = [y2, y1];
        for (let x = x1; x <= x2; x++) {
            for (let y = y1; y <= y2; y++) {
                result.push({ x, y, color });
            }
        }
        result = (0,_SevenSorting__WEBPACK_IMPORTED_MODULE_1__["default"])(result, window.seven.order);
        result.forEach((pixel) => {
            _SevenQueue__WEBPACK_IMPORTED_MODULE_0__["default"].add(pixel.x, pixel.y, pixel.color);
        });
    }
    
    
    /***/ }),
    
    /***/ "./src/modules/defaultModules/defaultKeys.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony import */ var _css_drop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/css/drop.ts");
    /* harmony import */ var _util_getClientMouse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/modules/util/getClientMouse.ts");
    /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
    /* harmony import */ var _SevenSquareMaker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/modules/defaultModules/SevenSquareMaker.ts");
    
    
    
    
    var coord1 = null;
    $(document).on('keyup', function (event) {
        if ($(':input[type="text"]').is(':focus'))
            return; //; prevent with chat open
        switch (event.which) {
            case (87):
                if (!event.altKey)
                    return;
                _SevenQueue__WEBPACK_IMPORTED_MODULE_1__["default"].stop();
                break;
            case (66):
                if (!event.altKey)
                    return;
                (0,_css_drop__WEBPACK_IMPORTED_MODULE_0__.createDropArea)();
                break;
            case 88:
                const [x, y, color] = (0,_util_getClientMouse__WEBPACK_IMPORTED_MODULE_3__["default"])();
                if (coord1 == null) {
                    coord1 = { x: x, y: y };
                    return;
                }
                (0,_SevenSquareMaker__WEBPACK_IMPORTED_MODULE_2__.BotSquare)(coord1.x, coord1.y, x, y, color);
                coord1 = null;
                break;
            // add more 
        }
    });
    
    
    /***/ }),
    
    /***/ "./src/modules/defaultModules/index.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   BotSquare: () => (/* reexport safe */ _SevenSquareMaker__WEBPACK_IMPORTED_MODULE_2__.BotSquare),
    /* harmony export */   ImageToPixels: () => (/* reexport safe */ _SevenImageTools__WEBPACK_IMPORTED_MODULE_0__.ImageToPixels),
    /* harmony export */   botImage: () => (/* reexport safe */ _SevenImageTools__WEBPACK_IMPORTED_MODULE_0__.botImage)
    /* harmony export */ });
    /* harmony import */ var _SevenImageTools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/modules/defaultModules/SevenImageTools.ts");
    /* harmony import */ var _SevenQueue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/modules/defaultModules/SevenQueue.ts");
    /* harmony import */ var _SevenSquareMaker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./src/modules/defaultModules/SevenSquareMaker.ts");
    /* harmony import */ var _defaultKeys__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./src/modules/defaultModules/defaultKeys.ts");
    
    
    
    
    
    
    /***/ }),
    
    /***/ "./src/modules/index.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   BotSquare: () => (/* reexport safe */ _defaultModules__WEBPACK_IMPORTED_MODULE_0__.BotSquare),
    /* harmony export */   ImageToPixels: () => (/* reexport safe */ _defaultModules__WEBPACK_IMPORTED_MODULE_0__.ImageToPixels),
    /* harmony export */   botImage: () => (/* reexport safe */ _defaultModules__WEBPACK_IMPORTED_MODULE_0__.botImage)
    /* harmony export */ });
    /* harmony import */ var _defaultModules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/modules/defaultModules/index.ts");
    
    // custom exports
    
    
    /***/ }),
    
    /***/ "./src/modules/util/getClientMouse.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => (/* binding */ getClientMouse)
    /* harmony export */ });
    function getClientMouse() {
        const coordinates = $('#coordinates').text();
        const [x, y] = coordinates.split(',').map(coord => parseInt(coord.trim()));
        const selectedcolor = $('#palette-buttons a.selected').data('id');
        return [x, y, selectedcolor];
    }
    
    
    /***/ }),
    
    /***/ "./src/requests/get-painting.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => (/* binding */ getPainting)
    /* harmony export */ });
    /* harmony import */ var _getCookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./src/requests/getCookie.ts");
    /* harmony import */ var _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/canvas/Canvas.ts");
    
    
    async function getPainting(authId, authKey, authToken) {
        const canvas = _canvas_Canvas__WEBPACK_IMPORTED_MODULE_0__["default"].instance;
        const originalAuthId = (0,_getCookie__WEBPACK_IMPORTED_MODULE_1__["default"])('authId');
        const originalAuthKey = (0,_getCookie__WEBPACK_IMPORTED_MODULE_1__["default"])('authKey');
        const originalAuthToken = (0,_getCookie__WEBPACK_IMPORTED_MODULE_1__["default"])('authToken');
        document.cookie = `authId=${authId}; path=/`;
        document.cookie = `authKey=${authKey}; path=/`;
        document.cookie = `authToken=${authToken}; path=/`;
        try {
            const response = await fetch(`https://pixelplace.io/api/get-painting.php?id=${canvas.ID}&connected=1`, {
                headers: {
                    'Accept': 'application/json, text/javascript, */*; q=0.01',
                },
                credentials: 'include'
            });
            const json = response.json();
            return json;
        }
        finally {
            document.cookie = `authId=${originalAuthId}; path=/`;
            document.cookie = `authKey=${originalAuthKey}; path=/`;
            document.cookie = `authToken=${originalAuthToken}; path=/`;
        }
    }
    
    
    /***/ }),
    
    /***/ "./src/requests/getCookie.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    /* harmony export */   "default": () => (/* binding */ getCookie)
    /* harmony export */ });
    function getCookie(name) {
        const value = `; ${document.cookie}`;
        const parts = value.split(`; ${name}=`);
        if (parts.length === 2)
            return parts.pop().split(';').shift();
    }
    
    
    /***/ }),
    
    /***/ "./src/requests/ping.ts":
    /***/ (() => {
    
    // to do
    
    
    /***/ }),
    
    /***/ "./src/variables.ts":
    /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    
    "use strict";
    __webpack_require__.r(__webpack_exports__);
    /* harmony import */ var _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./src/auth/util/commands.ts");
    
    window.seven = {
        bots: [],
        pixelspeed: 21,
        queue: [],
        inprogress: false,
        protect: false,
        tickspeed: 1000,
        order: 'fromCenter',
        saveAuth: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.saveAuth,
        getAuth: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.getAuth,
        saveAccount: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.saveAccount,
        getAccounts: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.getAccounts,
        deleteAccount: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.deleteAccount,
        connect: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.connect,
        disconnect: _auth_util_commands__WEBPACK_IMPORTED_MODULE_0__.disconnect,
    };
    
    
    /***/ }),
    
    /***/ "./src sync recursive \\.*":
    /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
    
    var map = {
        ".": "./src/index.ts",
        "./": "./src/index.ts",
        "./auth/Auth": "./src/auth/Auth.ts",
        "./auth/Auth.ts": "./src/auth/Auth.ts",
        "./auth/util/commands": "./src/auth/util/commands.ts",
        "./auth/util/commands.ts": "./src/auth/util/commands.ts",
        "./bot/Bot": "./src/bot/Bot.ts",
        "./bot/Bot.ts": "./src/bot/Bot.ts",
        "./bot/util/onmessage": "./src/bot/util/onmessage.ts",
        "./bot/util/onmessage.ts": "./src/bot/util/onmessage.ts",
        "./bot/util/palive": "./src/bot/util/palive.ts",
        "./bot/util/palive.ts": "./src/bot/util/palive.ts",
        "./bot/util/websocket": "./src/bot/util/websocket.ts",
        "./bot/util/websocket.ts": "./src/bot/util/websocket.ts",
        "./canvas/Canvas": "./src/canvas/Canvas.ts",
        "./canvas/Canvas.ts": "./src/canvas/Canvas.ts",
        "./canvas/util/canvasloader": "./src/canvas/util/canvasloader.ts",
        "./canvas/util/canvasloader.ts": "./src/canvas/util/canvasloader.ts",
        "./canvas/util/colors": "./src/canvas/util/colors.ts",
        "./canvas/util/colors.ts": "./src/canvas/util/colors.ts",
        "./css/drop": "./src/css/drop.ts",
        "./css/drop.ts": "./src/css/drop.ts",
        "./css/style": "./src/css/style.ts",
        "./css/style.ts": "./src/css/style.ts",
        "./index": "./src/index.ts",
        "./index.ts": "./src/index.ts",
        "./modules": "./src/modules/index.ts",
        "./modules/": "./src/modules/index.ts",
        "./modules/defaultModules": "./src/modules/defaultModules/index.ts",
        "./modules/defaultModules/": "./src/modules/defaultModules/index.ts",
        "./modules/defaultModules/SevenImageTools": "./src/modules/defaultModules/SevenImageTools.ts",
        "./modules/defaultModules/SevenImageTools.ts": "./src/modules/defaultModules/SevenImageTools.ts",
        "./modules/defaultModules/SevenProtect": "./src/modules/defaultModules/SevenProtect.ts",
        "./modules/defaultModules/SevenProtect.ts": "./src/modules/defaultModules/SevenProtect.ts",
        "./modules/defaultModules/SevenQueue": "./src/modules/defaultModules/SevenQueue.ts",
        "./modules/defaultModules/SevenQueue.ts": "./src/modules/defaultModules/SevenQueue.ts",
        "./modules/defaultModules/SevenSorting": "./src/modules/defaultModules/SevenSorting.ts",
        "./modules/defaultModules/SevenSorting.ts": "./src/modules/defaultModules/SevenSorting.ts",
        "./modules/defaultModules/SevenSquareMaker": "./src/modules/defaultModules/SevenSquareMaker.ts",
        "./modules/defaultModules/SevenSquareMaker.ts": "./src/modules/defaultModules/SevenSquareMaker.ts",
        "./modules/defaultModules/defaultKeys": "./src/modules/defaultModules/defaultKeys.ts",
        "./modules/defaultModules/defaultKeys.ts": "./src/modules/defaultModules/defaultKeys.ts",
        "./modules/defaultModules/index": "./src/modules/defaultModules/index.ts",
        "./modules/defaultModules/index.ts": "./src/modules/defaultModules/index.ts",
        "./modules/index": "./src/modules/index.ts",
        "./modules/index.ts": "./src/modules/index.ts",
        "./modules/util/getClientMouse": "./src/modules/util/getClientMouse.ts",
        "./modules/util/getClientMouse.ts": "./src/modules/util/getClientMouse.ts",
        "./requests/get-painting": "./src/requests/get-painting.ts",
        "./requests/get-painting.ts": "./src/requests/get-painting.ts",
        "./requests/getCookie": "./src/requests/getCookie.ts",
        "./requests/getCookie.ts": "./src/requests/getCookie.ts",
        "./requests/ping": "./src/requests/ping.ts",
        "./requests/ping.ts": "./src/requests/ping.ts",
        "./variables": "./src/variables.ts",
        "./variables.ts": "./src/variables.ts"
    };
    
    
    function webpackContext(req) {
        var id = webpackContextResolve(req);
        return __webpack_require__(id);
    }
    function webpackContextResolve(req) {
        if(!__webpack_require__.o(map, req)) {
            var e = new Error("Cannot find module '" + req + "'");
            e.code = 'MODULE_NOT_FOUND';
            throw e;
        }
        return map[req];
    }
    webpackContext.keys = function webpackContextKeys() {
        return Object.keys(map);
    };
    webpackContext.resolve = webpackContextResolve;
    module.exports = webpackContext;
    webpackContext.id = "./src sync recursive \\.*";
    
    /***/ })
    
    /******/ 	});
    /************************************************************************/
    /******/ 	// The module cache
    /******/ 	var __webpack_module_cache__ = {};
    /******/ 	
    /******/ 	// The require function
    /******/ 	function __webpack_require__(moduleId) {
    /******/ 		// Check if module is in cache
    /******/ 		var cachedModule = __webpack_module_cache__[moduleId];
    /******/ 		if (cachedModule !== undefined) {
    /******/ 			return cachedModule.exports;
    /******/ 		}
    /******/ 		// Create a new module (and put it into the cache)
    /******/ 		var module = __webpack_module_cache__[moduleId] = {
    /******/ 			// no module.id needed
    /******/ 			// no module.loaded needed
    /******/ 			exports: {}
    /******/ 		};
    /******/ 	
    /******/ 		// Execute the module function
    /******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
    /******/ 	
    /******/ 		// Return the exports of the module
    /******/ 		return module.exports;
    /******/ 	}
    /******/ 	
    /************************************************************************/
    /******/ 	/* webpack/runtime/define property getters */
    /******/ 	(() => {
    /******/ 		// define getter functions for harmony exports
    /******/ 		__webpack_require__.d = (exports, definition) => {
    /******/ 			for(var key in definition) {
    /******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
    /******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
    /******/ 				}
    /******/ 			}
    /******/ 		};
    /******/ 	})();
    /******/ 	
    /******/ 	/* webpack/runtime/hasOwnProperty shorthand */
    /******/ 	(() => {
    /******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
    /******/ 	})();
    /******/ 	
    /******/ 	/* webpack/runtime/make namespace object */
    /******/ 	(() => {
    /******/ 		// define __esModule on exports
    /******/ 		__webpack_require__.r = (exports) => {
    /******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
    /******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
    /******/ 			}
    /******/ 			Object.defineProperty(exports, '__esModule', { value: true });
    /******/ 		};
    /******/ 	})();
    /******/ 	
    /************************************************************************/
    /******/ 	
    /******/ 	// startup
    /******/ 	// Load entry module and return exports
    /******/ 	// This entry module is referenced by other modules so it can't be inlined
    /******/ 	var __webpack_exports__ = __webpack_require__("./src/index.ts");
    /******/ 	
    /******/ })()
    ;