您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Log user actions into the chat (login/off, video add)
// ==UserScript== // @name InstaSynchP UserSpy // @namespace InstaSynchP // @description Log user actions into the chat (login/off, video add) // @version 1.1.3 // @author Zod- // @source https://github.com/Zod-/InstaSynchP-UserSpy // @license MIT // @include *://instasync.com/r/* // @include *://*.instasync.com/r/* // @grant none // @run-at document-start // @require https://greasyfork.org/scripts/5647-instasynchp-library/code/InstaSynchP%20Library.js?version=37716 // ==/UserScript== function UserSpy(version) { 'use strict'; this.version = version; this.name = 'InstaSynchP UserSpy'; this.settings = [{ label: 'Show user logs in or off', id: 'login-off-log', type: 'checkbox', 'default': true, section: ['UserSpy'] }, { label: 'Show when a greyname logs in or off', id: 'login-off-greynames-log', type: 'checkbox', 'default': true, section: ['UserSpy'] }, { label: 'Show when a greyname renames himself', id: 'rename-log', type: 'checkbox', 'default': true, section: ['UserSpy'] }, { label: 'Show when someone adds a video', title: 'Includes the title', id: 'add-video-log', type: 'checkbox', 'default': true, section: ['UserSpy'] }, { label: 'Show when a video gets played', id: 'play-video-log', type: 'checkbox', 'default': true, section: ['UserSpy'] }]; this.lastVideo = {}; } UserSpy.prototype.getAddVideoMessage = function (video) { 'use strict'; //user added <a href="url">title</a> return ''.concat( video.addedby, ' added ', '<a target="_blank" href="', urlParser.create({ videoInfo: video.info, format: 'long' }), '">', video.title.substr(0, 240), '</a>' ); }; UserSpy.prototype.getRenameMessage = function (user) { 'use strict'; //ip renamed to username return ''.concat( user.ip, ' renamed to ', user.username ); }; UserSpy.prototype.getLogOnMessage = function (user) { 'use strict'; //user(ip) logged on return ''.concat( user.username, '(', user.ip, ') logged on' ); }; UserSpy.prototype.getLogOffMessage = function (user) { 'use strict'; //user(ip) logged off return ''.concat( user.username, '(', user.ip, ') logged off' ); }; UserSpy.prototype.getPlayVideoMessage = function (video) { 'use strict'; //Now playing title via user return ''.concat( 'Now playing ', '<a target="_blank" href="', urlParser.create({ videoInfo: video.info, format: 'long' }), '">', video.title.substr(0, 240), '</a>', ' via ', video.addedby); }; UserSpy.prototype.executeOnce = function () { 'use strict'; var _this = this; events.on(_this, 'RenameUser', function (user) { if (gmc.get('rename-log')) { addSystemMessage(_this.getRenameMessage(user)); } }); }; UserSpy.prototype.postConnect = function () { 'use strict'; var _this = this; //add events after we connected so it doesn't spam the chat for every user/video events.on(_this, 'AddUser', _this.userLoggedOn); events.on(_this, 'RemoveUser', _this.userLoggedOff); events.on(_this, 'AddVideo', _this.videoAdded); events.on(_this, 'PlayVideo', _this.videoPlayed); }; UserSpy.prototype.resetVariables = function () { 'use strict'; var _this = this; //remove events when disconnecting/changing room and readd at postConnect events.unbind('AddUser', _this.userLoggedOn); events.unbind('RemoveUser', _this.userLoggedOff); events.unbind('AddVideo', _this.videoAdded); events.unbind('PlayVideo', _this.videoPlayed); _this.lastVideo = {}; }; UserSpy.prototype.videoPlayed = function (video) { 'use strict'; var _this = this; if (gmc.get('play-video-log') && !videoInfoEquals(video.info, _this.lastVideo.info)) { _this.lastVideo = video; addSystemMessage(_this.getPlayVideoMessage(video)); } }; UserSpy.prototype.videoAdded = function (video) { 'use strict'; var _this = this; if (gmc.get('add-video-log')) { addSystemMessage(_this.getAddVideoMessage(video)); } }; UserSpy.prototype.isUserLogged = function (user) { 'use strict'; return gmc.get('login-off-log') && (user.loggedin || gmc.get('login-off-greynames-log')); }; UserSpy.prototype.userLoggedOn = function (user) { 'use strict'; var _this = this; if (_this.isUserLogged(user)) { addSystemMessage(_this.getLogOnMessage(user)); } }; UserSpy.prototype.wasUserForcedOff = function (user) { 'use strict'; var _this = this; var reg = new RegExp('^[^\\s]+ has (?:kicked|banned) {0}\\({1}\\)$' .format(user.username, user.ip)); return (!isUdef(window.plugins.modSpy) && $('#chat_messages > :last-child').find('.username').text() === ': ' && $('#chat_messages > :last-child').find('.message').text().match(reg)); }; UserSpy.prototype.userLoggedOff = function (user) { 'use strict'; var _this = this; if (_this.isUserLogged(user) && !_this.wasUserForcedOff(user)) { addSystemMessage(_this.getLogOffMessage(user)); } }; window.plugins = window.plugins || {}; window.plugins.userSpy = new UserSpy('1.1.3');