您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This makes OWOT better by adding new stuff to menu like showing and hiding chat, enabling notifications and more!
// ==UserScript== // @name Better OWOT // @name:ru Лучше OWOT // @namespace http://tampermonkey.net/ // @version 0.2 // @description This makes OWOT better by adding new stuff to menu like showing and hiding chat, enabling notifications and more! // @description:ru Это делает OWOT лучше, добавляя в меню новые функции, такие как отображение и скрытие чата, включение уведомлений и многое другое! // @author You // @match https://ourworldoftext.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=ourworldoftext.com // @grant none // ==/UserScript== console.log("Warning!\nDo not paste anything here that might get your IP or token!"); (function() { 'use strict'; let title = document.title; let newMessageCount = 0; let isFocused = true; let notificationsOn = localStorage ? !localStorage.notificationsOn || localStorage.notificationsOn === "true" : true; window.addEventListener("blur", () => isFocused = false); window.addEventListener("focus", () => isFocused = true); if (window.Notification){ Notification.requestPermission(); } OWOT.on("chat", (event) => { if (!isFocused || !chatOpen){ newMessageCount++; document.title = `(${newMessageCount}) ${title}`; if (notificationsOn && window.Notification && !isFocused && Notification.permission === "granted"){ let notifText; if (event.type === "anon") notifText = `[${event.id}]: ${event.message}`; else if (event.type === "anon_nick") notifText = `[*${event.id}] ${event.nickname}: ${event.message}`; else notifText = `${event.nickname}: ${event.message}`; if (event.op) notifText = "(OP) " + notifText; else if (event.admin) notifText = "(Admin) " + notifText; else if (event.staff) notifText = "(Staff) " + notifText; else if (event.realUsername === "gateway") notifText = "(Discord) " + notifText; let notif = new Notification(`OWOT Chat (${event.location === "page" ? "World /" + (location.pathname.substr(1) || "main") : "Global"})`, { body:notifText, icon:"https://ourworldoftext.com/static/favicon.png", }); notif.addEventListener("click", () => { window.focus(); chat_open.click(); (event.location === "page" ? chat_page_tab : chat_global_tab).click(); let chatFieldElement = event.location === "page" ? page_chatfield : global_chatfield; chatFieldElement.scroll(0, chatFieldElement.scrollHeight); notif.close(); }); setTimeout(() => notif.close(), 5000); } } }); function setNotificationsOn(flag){ notificationsOn = flag; if (localStorage){ localStorage.notificationsOn = flag; } } OWOT.menu.addCheckboxOption("Chat Notifications", () => setNotificationsOn(true), () => setNotificationsOn(false), notificationsOn); setInterval(() => { if (isFocused && chatOpen && newMessageCount > 0){ document.title = title; newMessageCount = 0; } }, 100); var removezoombar = document.getElementById("zoombar"); if (w.menu.show) { removezoombar.remove(); } (() => { if (Permissions.can_chat(state.userModel, state.worldModel)) return; let w_url = `ws${window.location.protocol == "https:" ? "s" : ""}://${ window.location.host }/w${state.worldModel.pathname}/ws/${window.location.search || ""}`; let sock = new WebSocket(w_url); sock.onopen = () => { window.selectedChatTab = 0; ws_functions.propUpdate({props: [{type: "chat", value: 0}]}); w.showChat(); elm.chat_open.style.backgroundColor = "#990000"; elm.total_unread.style.color = "#FFFF00"; sock.onmessage = msg => { let data = JSON.parse(msg.data); if (data.kind.startsWith("chat") || ["channel", "user_count"].includes(data.kind)) { ws_functions[data.kind](data); } }; sock.send(JSON.stringify({ kind: "chathistory" })); w.on("chat", e => { w.emit("chatmod", e); if (e.hide) return; event_on_chat(e); }); network.chat = (message, location, nickname, color) => { sock.send(JSON.stringify({ kind: "chat", nickname, message, location, color, })); }; }; })(); (function(){ OWOT.menu.addCheckboxOption("Render all links", () => {linksRendered = true;renderTiles(true);}, () => {linksRendered = false;renderTiles(true);}, true); })(); OWOT.menu.addCheckboxOption("Show chat", () => w.showChat(), () => w.hideChat()) Permissions.can_paste = function() {return true;}; (function() { clearInterval(writeInterval); writeInterval = setInterval(function() { if(!writeBuffer.length || (write_busy && writeBuffer.length < 50)) return; try { flushWrites(); } catch(e) { console.log(e); } }, 10); })(); })();