您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Plugin for custom commands
当前为
// ==UserScript== // @name InstaSynchP Commands // @namespace InstaSynchP // @description Plugin for custom commands // @version 1.0.1 // @author Zod- // @source https://github.com/Zod-/InstaSynchP-Commands // @license MIT // @include http://*.instasynch.com/* // @include http://instasynch.com/* // @include http://*.instasync.com/* // @include http://instasync.com/* // @grant none // @run-at document-start // @require https://gf.zukizuki.org/scripts/5647-instasynchp-library/code/InstaSynchP%20Library.js // ==/UserScript== function Commands(version) { "use strict"; this.version = version; this.name = "InstaSynchP Commands"; this.commandMap = {}; this.sendcmdReady = true; this.commandQueue = []; } Commands.prototype.executeOnceCore = function () { "use strict"; var th = this; window.commands = { //add a command bind: function (commands) { if (typeof commands === 'undefined') { return; } for (var command in commands) { if (commands.hasOwnProperty(command)) { commands[command].name = command; th.commandMap[command.toLowerCase()] = commands[command]; } } }, //get the commands get: function (key) { return th.commandMap[key.toLowerCase()]; }, //get all commands getAll: function () { return th.commandMap; }, //execute a command execute: function () { if (th.commandMap.hasOwnProperty(arguments[0].toLowerCase())) { //send the event to the site window.postMessage(JSON.stringify({ action: 'ExecuteCommand', data: { //turn arguments to array 'arguments': [].slice.call(arguments) } }), "*"); } } }; /*{ "'command": { 'hasArguments':true, 'type':'mod', 'reference': this 'description':'description', 'callback': function(){ } } }*/ var defaultCommands = { "'resynch": {}, "'toggleFilter": {}, "'toggleAutosynch": {}, "'togglePlaylistLock": {'type':'mod'}, "'kick": {'hasArguments':true,'type':'mod'}, "'ban": {'hasArguments':true,'type':'mod'}, "'unban": {'hasArguments':true,'type':'mod'}, "'clean": {'type':'mod'}, "'remove": {'hasArguments':true,'type':'mod'}, "'purge": {'hasArguments':true,'type':'mod'}, "'move": {'hasArguments':true,'type':'mod'}, "'play": {'hasArguments':true,'type':'mod'}, "'pause": {'type':'mod'}, "'resume": {'type':'mod'}, "'seekto": {'hasArguments':true,'type':'mod'}, "'seekfrom": {'hasArguments':true,'type':'mod'}, "'setskip": {'hasArguments':true,'type':'mod'}, "'banlist": {'type':'mod'}, "'modlist": {'type':'mod'}, "'leaverban": {'hasArguments':true,'type':'mod'}, //commented those so you can't accidently use them //"'clearbans", //"'motd ", //"'mod ", //"'demod ", //"'description ", "'next": {'type':'mod'} }; function empty() { return undefined; } //prepare default commands for (var command in defaultCommands) { if (defaultCommands.hasOwnProperty(command)) { defaultCommands[command].description = 'http://instasynch.com/help.php#commands'; defaultCommands[command].callback = empty; if (!defaultCommands[command].type) { defaultCommands[command].type = 'regular'; } } } //bind them commands.bind(defaultCommands); //commands gets executed by posting a message to the site and catching it //in the script scope events.on(th, 'ExecuteCommand', function (data) { var command = th.commandMap[data.arguments[0].toLowerCase()], opts = { usernames: [], videos: [], numbers: [] }, i, videoInfo; for (i = 1; i < data.arguments.length; i += 1) { videoInfo = urlParser.parse(data.arguments[i]); if(videoInfo){ opts.videos.push(videoInfo); } if(isBlackname(data.arguments[i])){ opts.usernames.push(data.arguments[i]); } if(data.arguments[i] !== '' && !isNaN(data.arguments[i])){ opts.numbers.push(Number(data.arguments[i])); } } data.arguments.splice(0, 1, opts); command.callback.apply(command.reference, data.arguments); }); events.on(th, 'SendChat', function (message) { commands.execute.apply(commands, message.split(/\s/)); }); //load flood protect var oldsendcmd = window.global.sendcmd; window.global.sendcmd = function (command, data) { var i; if (command) { //add the command to the cache th.commandQueue.push({ command: command, data: data }); } //early return if we can't send anything if (!th.sendcmdReady || th.commandQueue.length === 0) { return; } //set not ready th.sendcmdReady = false; //send and remove the last 4 commands for (i = 0; i < 4 && th.commandQueue.length > 0; i += 1) { oldsendcmd(th.commandQueue[0].command, th.commandQueue[0].data); th.commandQueue.splice(0, 1); } //after a second send the next ones setTimeout(function () { th.sendcmdReady = true; window.global.sendcmd(); }, 1010); }; }; window.plugins = window.plugins || {}; window.plugins.commands = new Commands('1.0.1');