监听闲鱼 WebSocket 消息格式并播放提示音
// ==UserScript==
// @name 闲鱼消息提醒增强,新消息提示音
// @namespace https://greasyfork.org/zh-CN/scripts/514326
// @version 1.1
// @description 监听闲鱼 WebSocket 消息格式并播放提示音
// @match https://www.goofish.com/im
// @author kukemc
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// 提示音文件
const audio = new Audio('https://m.ccw.site/gandi_application/user_assets/82913b503c6ce20ad838609ee68e32c7.mp3'); // 替换为你的提示音 URL
audio.addEventListener("canplaythrough", () => {
console.log("提示音文件加载成功");
}, false);
// 检查消息结构的函数
function isTargetMessage(parsedMessage) {
// 检查消息是否包含符合条件的字段和结构
return (
parsedMessage.headers &&
parsedMessage.headers['app-key'] === '444e9908a51d1cb236a27862abc769c9' &&
parsedMessage.body &&
parsedMessage.body.syncPushPackage &&
Array.isArray(parsedMessage.body.syncPushPackage.data) &&
parsedMessage.body.syncPushPackage.data.some(item => item.bizType === 40 && item.objectType === 40000)
);
}
// 为 WebSocket 实例添加消息监听器
function addMessageListener(ws) {
ws.addEventListener('message', (event) => {
console.log("收到 WebSocket 消息:", event.data);
try {
const parsedMessage = JSON.parse(event.data);
// 如果消息符合条件,则播放提示音并弹出通知
if (isTargetMessage(parsedMessage)) {
console.log("匹配到符合条件的消息,正在播放提示音");
audio.play(); // 播放提示音
} else {
console.log("消息不符合指定条件");
}
} catch (error) {
console.log("收到的消息不是 JSON 格式:", event.data);
}
});
}
// 使用 Proxy 监听 WebSocket 连接
const originalWebSocket = window.WebSocket;
window.WebSocket = new Proxy(originalWebSocket, {
construct(target, args) {
const wsInstance = new target(...args);
// 仅监听目标 WebSocket URL
if (args[0].includes("wss-goofish.dingtalk.com")) {
console.log("已连接到目标 WebSocket:", args[0]);
addMessageListener(wsInstance);
}
return wsInstance;
}
});
console.log("WebSocket 被动监听器已初始化,等待符合条件的消息...");
})();