// ==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');