// ==UserScript== // @name ML forum // @namespace https://toxic.run.place // @version 202407142200 // @description Скріпт для форума // @author POCCOMAXA // @match https://lib.social/forum/discussion/670453 // @match https://lib.social/forum/ // @grant none // @run-at document-start // ==/UserScript== const open = window.XMLHttpRequest.prototype.open; const start = Date.parse("2024-07-14T18:57:50.000000Z"); const responses = { "/api/forum/discussion/670453": () => ({ discussion: { id: 560675, chatter_category_id: 4, title: "Набираем новичков в команду!", user_id: 5034, source_id: 35544, source_type: "team", sticky: 0, locked: 0, views: 1 + Math.floor((Date.now() - start) / 100000), answered: 0, last_reply_at: "2024-07-14T18:57:50.000000Z", created_at: "2024-07-14T18:57:50.000000Z", updated_at: "2024-07-14T18:57:50.000000Z", deleted_at: null, yaoi: 0, username: "LSTR-512", avatar: "BPyLKDJWs1cP.gif", category_id: 4, category_name: "Поиск кадров", category_slug: "search_staff", category_color: "#6f42c1", category_icon: "user-plus", relation: { id: 35544, cover: "TMFkgJZZHa4D", slug: "cuicide", value: "Отставить суицид", href: "https://lib.social/team/cuicide", }, }, post: { id: 6373793, post_id: 0, chatter_discussion_id: 560675, user_id: 5034, body: { ops: [ { insert: `Доступны следующие вакансии: 1. Переводчик - человек, который умеет работать с японским/английским. (Знание японского и английского, понимание данных языков) 2. Редактор - человек, который следит за переводом и редактирует его. (От 16+) 3. Клиннер - человек, который чистит страницы от текста и иероглифов. (ПК/ноут) 4. Тайпер - человек, который добавляет текст на чистые страницы. (ПК/ноут) 5. Бета - человек, который редактирует и приводит главу к приемлемому результату. (От 16+) Важно! Украинцев в команду не берем, мы не хотим иметь дела с нацистами. Потомкам Гитлера лучше читать манхву на своей «державной». `, }, ], }, created_at: "2024-07-14T18:57:50.000000Z", updated_at: "2024-07-14T18:57:50.000000Z", deleted_at: null, }, }), }; window.XMLHttpRequest.prototype.open = function () { console.log("open", ...arguments); const url = arguments[1]; const res = responses[url]; if (res) { this.addEventListener( "readystatechange", function () { if (this.readyState !== XMLHttpRequest.DONE) return; const body = JSON.stringify(res()); Object.defineProperty(this, "responseText", { value: body, }); Object.defineProperty(this, "response", { value: body, }); Object.defineProperty(this, "responseType", { value: "text", }); Object.defineProperty(this, "status", { value: 200, }); }, false, ); } open.apply(this, arguments); }; main();