您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A simple chat feature for suroi.io
- // ==UserScript==
- // @name Suroi Chat
- // @namespace http://tampermonkey.net/
- // @version 2024-03-22
- // @description A simple chat feature for suroi.io
- // @author 616c616e
- // @match https://suroi.io/*
- // @match http://suroi.io/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=suroi.io
- // @grant none
- // @license GNU GPLv3
- // ==/UserScript==
- (function() {
- 'use strict';
- const old_websocket = WebSocket;
- class new_websocket{
- constructor(url){
- //only if play
- if(url.includes("/play?")){
- var ws = new old_websocket(url);
- }
- else{
- return new old_websocket(url);
- }
- window.ws_url = ws.url;
- console.log("successfully got current ws url", window.ws_url);
- return ws;
- }
- }
- WebSocket = new_websocket;
- function addMsg(jsondata){
- if(jsondata.gameid == window.ws_url.split("gameID=")[1].split("&")[0] &&
- jsondata.region == window.ws_url.split("wss://")[1].split("/play?")[0]){
- var curr_msgs = document.querySelectorAll("#messages-container > .chat-message");
- if(curr_msgs.length > 30){
- curr_msgs[0].remove();
- }
- let new_msg = document.createElement("span");
- new_msg.style.display = "block";
- let bold = document.createElement("b");
- bold.innerText = jsondata.user;
- new_msg.appendChild(bold);
- new_msg.appendChild(
- document.createTextNode(": " + jsondata.content)
- );
- new_msg.setAttribute("class", "chat-message");
- new_msg.style.fontSize = "15px";
- document.querySelector("#messages-container").appendChild(new_msg);
- new_msg.scrollIntoView();
- setTimeout(function(){
- new_msg.remove();
- }.bind(this), 45000);
- }
- }
- function sendMsg(msg){
- window.chat_socket.send(JSON.stringify({
- user: document.getElementById("username-input").value,
- content: msg.replaceAll("\n", ""),
- gameid: window.ws_url.split("gameID=")[1].split("&")[0],
- region: window.ws_url.split("wss://")[1].split("/play?")[0]
- }));
- }
- setInterval(function(){
- if(!window.chat_socket){
- console.log("Chat socket not open, connecting...");
- window.chat_socket = new WebSocket("wss://suroihax.glitch.me/chat");
- window.chat_socket.addEventListener("close", function(evt){
- window.chat_socket = null;
- });
- window.chat_socket.addEventListener("message", function(msg){
- try{
- addMsg(JSON.parse(msg.data));
- } catch(e){console.log(e)}
- });
- }
- }, 1000);
- window.addEventListener("load", function(){
- let chat_container = document.createElement("div");
- chat_container.style.zIndex = "99999999";
- chat_container.style.position = "absolute";
- chat_container.style.right = (document.querySelector("#weapons-container").getBoundingClientRect().width + 20).toString() + "px";
- chat_container.style.bottom = "10px";
- chat_container.id = "chat-container";
- chat_container.innerHTML = `
- <div id="messages-container"></div>
- <textarea placeholder="[Enter] Send a message" id="chat-textbox" rows="1" cols="30" maxlength="64"></textarea>
- <style>
- #chat-textbox{
- resize: none;
- overflow: hidden;
- background: transparent;
- border: none;
- color: white;
- background-color: rgba(0,0,0,0.5);
- margin: 5px;
- }
- #messages-container{
- max-height: 150px;
- overflow: auto;
- scrollbar-width: thin;
- }
- #messages-container::-webkit-scrollbar-track{
- opacity 0%;
- }
- #messages-container::-webkit-scrollbar-thumb {
- background: grey;
- opacity: 50%
- border-radius: 10px;
- }
- #chat-textbox::placeholder{
- color: white;
- }
- #chat-container{
- overflow-wrap: break-word;
- padding: 10px;
- background-color: rgba(0,0,0,0.4);
- }
- .chat-message{
- margin: 5px;
- }
- body{
- overflow: hidden;
- }
- </style>
- `;
- document.body.appendChild(chat_container);
- document.querySelector("#chat-textbox").addEventListener("keydown", function(e){
- this.value = this.value.replaceAll("\n", "");
- if(e.key == "Enter"){
- if(this.value){
- try{
- sendMsg(this.value);
- } catch{}
- }
- this.blur();
- document.querySelector("#game-ui").focus();
- this.value = "";
- e.preventDefault();
- }
- if(e.key == "Escape"){
- this.blur();
- document.querySelector("#game-ui").focus();
- }
- e.stopPropagation();
- });
- document.querySelector("#messages-container").style.maxWidth = document.querySelector("#chat-textbox").getBoundingClientRect().width.toString() + "px";
- chat_container.addEventListener("wheel", function(e){
- e.stopPropagation();
- })
- });
- window.addEventListener("keydown", function(e){
- if(e.key == "Enter"){
- document.querySelector("#chat-textbox").focus();
- e.preventDefault();
- }
- })
- window.addEventListener("resize", function(e){
- document.querySelector("#chat-container").style.right = (document.querySelector("#weapons-container").getBoundingClientRect().width + 20).toString() + "px";
- document.querySelector("#messages-container").style.maxWidth = document.querySelector("#chat-textbox").getBoundingClientRect().width.toString() + "px";
- });
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址