// ==UserScript== // @name 银河奶牛放置-Fishpi增强 // @namespace https://github.com/HereIsYui // @version 0.0.1 // @description 现在,你可以在挤奶的时候在鱼排聊天聊! // @author Yui // @match https://www.milkywayidle.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=milkywayidle.com // @grant GM_xmlhttpRequest // @grant GM_addStyle // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; var tabMenu; var chatContent; var preSendBtn; var fishpiSendBtn; var isFishpiPage = false; // 请填写你的鱼排 ApiKey var fishpiApiKey = ""; addFishpiTab(); GM_addStyle('.fishpi-content p{margin:0}') // 添加鱼排聊天室tab function addFishpiTab() { log('尝试加载Tab...'); tabMenu = document.querySelector('.GamePage_chatPanel__mVaVt .MuiTabs-flexContainer'); chatContent = document.querySelector('.Chat_tabsComponentContainer__3ZoKe .TabsComponent_tabPanelsContainer__26mzo'); if (!tabMenu) { setTimeout(() => { addFishpiTab(); }, 500); return; } log('加载Tab列表成功'); let fishpiTab = document.createElement('button'); fishpiTab.innerHTML = '鱼排0'; fishpiTab.classList.add('MuiButtonBase-root', 'MuiTab-root', 'MuiTab-textColorPrimary', 'css-1q2h7u5', 'fishpi-tab'); fishpiTab.addEventListener('click', () => { changeMenuTabToFish(); }) let list = tabMenu.children; for (let i = 0; i < list.length; i++) { let item = list[i]; item.addEventListener('click', () => { changeMenuTabToOther(); }) } let fishpiContent = document.createElement('div'); fishpiContent.innerHTML = '
'; fishpiContent.classList.add('TabPanel_tabPanel__tXMJF', 'TabPanel_hidden__26UM3', 'fishpi-content'); tabMenu.appendChild(fishpiTab); chatContent.appendChild(fishpiContent); window.tabMenu = tabMenu; window.fishpiContent = fishpiContent; preSendBtn = document.querySelector('.Chat_chat__3DQkj .Button_button__1Fe9z.Button_fullWidth__17pVU'); fishpiSendBtn = document.createElement('button'); fishpiSendBtn.classList.add('Button_button__1Fe9z', 'Button_fullWidth__17pVU', 'fishpi_send_btn'); fishpiSendBtn.innerHTML = "发送2"; fishpiSendBtn.addEventListener('click', () => { fishpiSendMsg(); }) let btnBox = document.querySelector('.Chat_buttonContainer__1rw8b'); fishpiSendBtn.style.display = 'none'; btnBox.appendChild(fishpiSendBtn); log('鱼排注入成功'); if (fishpiApiKey != "") { initFishpiWS(); }else{ addTips(); } window.addEventListener( "keydown", function (event) { let str = "KeyboardEvent: key='" + event.key + "' | code='" + event.code + "'"; console.log(str) if (event.code === "Enter" && isFishpiPage) { fishpiSendMsg() } }, true, ); }; // 切换到fishpi聊天室 function changeMenuTabToFish() { let list = tabMenu.children; for (let i = 0; i < list.length; i++) { let item = list[i]; let contentItem = chatContent.children[i]; item.classList.remove('Mui-selected'); contentItem.classList.add('TabPanel_hidden__26UM3'); if (item.innerHTML.indexOf('鱼排') > 0) { item.classList.add('Mui-selected') contentItem.classList.remove('TabPanel_hidden__26UM3'); } } fishpiSendBtn.style.display = 'block'; preSendBtn.style.display = 'none'; isFishpiPage = true; } function changeMenuTabToOther() { let fishpiTab = document.querySelector('.fishpi-tab'); if (fishpiTab) { fishpiTab.classList.remove('Mui-selected'); } let fishpiContent = document.querySelector('.fishpi-content'); if (fishpiContent) { fishpiContent.classList.add('TabPanel_hidden__26UM3'); } fishpiSendBtn.style.display = 'none'; preSendBtn.style.display = 'block'; isFishpiPage = false; } // 打印日志 function log(text) { console.log(`%c[Fishpi] %c${text}`, 'color:#e59230;font-weight:bold;', 'color:#333;'); } function autoScrollToBottom(element) { // 检查是否已经接近底部(避免不必要的滚动) element.scrollTop = element.scrollHeight; } /** * 以下是鱼排api */ function getFishpiApikey(nameOrEmail, userPassword, mfaCode) { GM_xmlhttpRequest({ method: "POST", url: "https://fishpi.cn/api/getKey", headers: { "Content-Type": "application/json", }, data: JSON.stringify({ nameOrEmail: nameOrEmail, userPassword: userPassword, mfaCode: mfaCode }), onload: function (res) { log(res); }, onerror: function (error) { log(error); }, ontimeout: function () { log("请求超时"); } }); } function initFishpiWS() { let ws = new WebSocket("wss://rhyus-wuan.fishpi.cn:10834?apiKey=" + fishpiApiKey); ws.onopen = function () { log("fishpi连接成功"); }; ws.onmessage = function (event) { let message = JSON.parse(event.data); if (message.type == "msg") { log(message.content) let msgObj = document.createElement('div'); msgObj.innerHTML = `[${message.time}]
${message.userNickname ?? message.userName}
:
${message.content}`; msgObj.classList.add('ChatMessage_chatMessage__2wev4'); msgObj.style = 'display:flex;align-items:center;'; let fishpiContent = document.querySelector('.fishpi-content .ChatHistory_chatHistory__1EiG3'); let fishpiChatContent = document.querySelector('.fishpi-content .ChatHistory_chatHistory__1EiG3'); fishpiChatContent.appendChild(msgObj); autoScrollToBottom(fishpiContent); } }; } function fishpiSendMsg() { let msg = document.querySelector('.Chat_chatInput__16dhX'); if(fishpiApiKey == ""){ msg.value = ""; addTips(); return; } if (msg.value != "") { GM_xmlhttpRequest({ method: "POST", url: "https://fishpi.cn/chat-room/send", headers: { "Content-Type": "application/json", }, data: JSON.stringify({ content: msg.value, apiKey: fishpiApiKey, client: 'IceNet/milk小分队', }), }) } msg.value = ""; } function addTips(){ let msgObj = document.createElement('div'); msgObj.innerHTML = `[${new Date().toLocaleString()}]
YuiNet
:
请先到插件中填写自己的ApiKey,填写好后请刷新页面`; msgObj.classList.add('ChatMessage_chatMessage__2wev4'); msgObj.style = 'display:flex;align-items:center;'; let fishpiContent = document.querySelector('.fishpi-content .ChatHistory_chatHistory__1EiG3'); let fishpiChatContent = document.querySelector('.fishpi-content .ChatHistory_chatHistory__1EiG3'); fishpiChatContent.appendChild(msgObj); autoScrollToBottom(fishpiContent); } })();