您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
allows to add handlers for onMessage requests
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/423665/913868/Camamba%20Hook%20Into%20OnMessage.js
// ==UserScript== // @name Camamba Hook Into OnMessage // @namespace dannysaurus.camamba // @version 0.1 // @description allows to add handlers for onMessage requests // @license MIT License // @include https://www.camamba.com/chat/ // @include https://www.de.camamba.com/chat/ // ==/UserScript== /* jslint esnext: true */ /* global me, camData, rooms, blockList, friendList, friendRequests, adminMessages, jsLang, byId, myRooms, knownUsers, activeRoom, selectedUser, settings */ // === overwrite relevant property to add handler before onMessage is going to be processed const onMessageHandlers = { // Keepalive response pong: data => { return true; }, // Chat message roomChat: data => { return true; }, // Private message private: data => { return true; }, // Control messages control: data => { return true; }, // User Joined Room joined: data => { return true; }, // User left left: data => { return true; }, // User disconnected from server disco: data => { return true; }, // Room User List roomList: data => { return true; }, // Room access denied denied: data => { return true; }, // Private room ready privateCreate: data => { return true; }, // Owner of a private room left the chat ownerLeft: data => { return true; }, // User joins my room joinRequest: data => { return true; }, // Room user count roomStats: data => { return true; }, // Private room data privStats: data => { return true; }, // Image Upload file: data => { return true; }, // Cam published camOn: data => { return true; }, // Cam turned off camOff: data => { return true; }, // AFK mark afk: data => { return true; }, // Second login overrides duplicate: data => { return true; }, // Admin messages admin: data => { return true; }, // Admin ban ban: data => { return true; }, // Connected (control layer) connectConfirm: data => { return true; } }; // === overwrite relevant property to add handler after onMessage got processed const postMessageHandlers = { // Keepalive response pong: data => { return; }, // Chat message roomChat: data => { return; }, // Private message private: data => { return; }, // Control messages control: data => { return; }, // User Joined Room joined: data => { return; }, // User left left: data => { return; }, // User disconnected from server disco: data => { return; }, // Room User List roomList: data => { return; }, // Room access denied denied: data => { return; }, // Private room ready privateCreate: data => { return; }, // Owner of a private room left the chat ownerLeft: data => { return; }, // User joins my room joinRequest: data => { return; }, // Room user count roomStats: data => { return; }, // Private room data privStats: data => { return; }, // Image Upload file: data => { return; }, // Cam published camOn: data => { return; }, // Cam turned off camOff: data => { return; }, // AFK mark afk: data => { return; }, // Second login overrides duplicate: data => { return; }, // Admin messages admin: data => { return; }, // Admin ban ban: data => { return; }, // Connected (control layer) connectConfirm: data => { return; } }; // perform hook const hookIntoOnMessage = function({ onMessage = (m => true), postMessage = (m => {}), timeOutRetryMillis = 350 } = {}) { /* eslint-disable no-undef */ if (!ws || !ws.onmessage) { // retry setTimeout(() => { hookIntoOnMessage({ onMessage, postMessage, timeOutRetryMillis }); }, timeOutRetryMillis); return; } // perform hook const originalOnMessage = ws.onmessage; ws.onmessage = (message) => { const resultOnMessage = onMessage(message); if (resultOnMessage) { originalOnMessage(message); postMessage(message); } }; /* eslint-enable no-undef */ }; hookIntoOnMessage({ onMessage: (message) => { const data = JSON.parse(message.data); let handler = onMessageHandlers[data.command]; return (typeof handler === 'function') ? handler(data) : true; }, postMessage: (message) => { const data = JSON.parse(message.data); let handler = postMessageHandlers[data.command]; if (typeof handler === 'function') { handler(data); } } });