您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
8/6/2022, 1:13:53 AM
当前为
// ==UserScript== // @name MPP - AdvancedChatLogger // @namespace Violentmonkey Scripts // @match https://mppclone.com/* // @grant none // @version 1.3 // @author Wolfy0615 // @description 8/6/2022, 1:13:53 AM // ==/UserScript== function init() { let logger = { messages: [], log: (msg, msgTime) => { // msg = `[${msgTime}] ` + msg; msg = "[" + msgTime + "] " + msg; msg += "\n"; if (this.messages.includes(msg)) return; this.messages.push(msg); }, clear: () => { this.messages = []; }, }; const protocol = { chatList: "c", chat: "a", directMessage: "dm", channelUpdate: "ch", }; const client = MPP.client; let lastChannel = ""; client.on(protocol.channelUpdate, (msg) => { if (lastChannel === msg.ch.id) return; logger.clear(); console.log("Detected room change. Clearing logs..."); lastChannel = msg.ch.id; }); client.on(protocol.chatList, (msg) => { if (msg.c) { msg.c.forEach((cmsg) => { if (cmsg.m === "dm") { const time = new Date(cmsg.t).toLocaleTimeString(); const sender = cmsg.sender; const senderId = sender.id; const senderName = sender.name; const recipient = cmsg.recipient; const recipientId = recipient.id; const recipientName = recipient.name; if (senderId === client.getOwnParticipant().id) { logger.log( `${time} ${senderId} (DM) ${senderName} to ${recipientId} ${recipientName}: ${cmsg.a}`, cmsg.t ); } else { logger.log( `${time} ${recipientId} (DM) ${recipientName} from ${senderId} ${senderName}: ${cmsg.a}`, cmsg.t ); } } else { const time = new Date(cmsg.t).toLocaleTimeString(); logger.log( `${time} ${cmsg.p.id} (--) ${cmsg.p.name}: ${cmsg.a}`, cmsg.t ); } }); } }); client.on(protocol.chat, (msg) => { const time = new Date(msg.t).toLocaleTimeString(); logger.log(`${time} ${msg.p.id} (--) ${msg.p.name}: ${msg.a}`, msg.t); }); client.on(protocol.directMessage, (msg) => { const time = new Date(msg.t).toLocaleTimeString(); const sender = msg.sender; const senderId = sender.id; const senderName = sender.name; const recipient = msg.recipient; const recipientId = recipient.id; const recipientName = recipient.name; if (senderId === client.getOwnParticipant().id) { logger.log( `${time} ${senderId} (DM) ${senderName} to ${recipientId} ${recipientName}: ${msg.a}`, msg.t ); } else { logger.log( `${time} ${recipientId} (DM) ${recipientName} from ${senderId} ${senderName}: ${msg.a}`, msg.t ); } }); window.messages = logger.messages; const btn = `<div id="chat-download-btn" class="ugly-button">Download Chat</div>`; $("#bottom .relative").append(btn); $("#chat-download-btn").css({ position: "absolute", left: "1020px", top: "32px", }); $("#chat-download-btn").on("click", () => { let uri = URL.createObjectURL( new Blob(messages, { type: "text/plain" }) ); new MPP.Notification({ id: "chat-download", class: "classic", title: "Chat Download", html: `<a href="${uri}" download="${client.channel.id}">Here</a> is your download.`, duration: 7000, target: "#piano", }); }); } const initInterval = setInterval(() => { if (window.MPP) { clearInterval(initInterval); init(); } });