闲鱼消息提醒增强,新消息提示音

监听闲鱼 WebSocket 消息格式并播放提示音

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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 被动监听器已初始化,等待符合条件的消息...");
})();