// ==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()}] : 请先到插件中填写自己的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);
}
})();