Files
pkrstarsbot/libs/phantombot/scripts/core/chatModerator.js
2021-02-16 23:07:41 +01:00

2053 lines
110 KiB
JavaScript

/*
* Copyright (C) 2016-2020 phantombot.github.io/PhantomBot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function() {
var permitList = [],
timeouts = [],
whiteList = [],
blackList = [],
spamTracker = {},
linksToggle = $.getSetIniDbBoolean('chatModerator', 'linksToggle', false),
linksMessage = $.getSetIniDbString('chatModerator', 'linksMessage', 'you were timed out for linking.'),
linkPermitTime = $.getSetIniDbNumber('chatModerator', 'linkPermitTime', 30),
capsToggle = $.getSetIniDbBoolean('chatModerator', 'capsToggle', false),
capsMessage = $.getSetIniDbString('chatModerator', 'capsMessage', 'you were timed out for overusing caps.'),
capsLimitPercent = $.getSetIniDbFloat('chatModerator', 'capsLimitPercent', 70),
capsTriggerLength = $.getSetIniDbNumber('chatModerator', 'capsTriggerLength', 20),
spamToggle = $.getSetIniDbBoolean('chatModerator', 'spamToggle', false),
spamMessage = $.getSetIniDbString('chatModerator', 'spamMessage', 'you were timed out for spamming repeating characters.'),
spamLimit = $.getSetIniDbNumber('chatModerator', 'spamLimit', 15),
symbolsToggle = $.getSetIniDbBoolean('chatModerator', 'symbolsToggle', false),
symbolsMessage = $.getSetIniDbString('chatModerator', 'symbolsMessage', 'you were timed out for overusing symbols.'),
symbolsLimitPercent = $.getSetIniDbFloat('chatModerator', 'symbolsLimitPercent', 50),
symbolsGroupLimit = $.getSetIniDbFloat('chatModerator', 'symbolsGroupLimit', 10),
symbolsTriggerLength = $.getSetIniDbNumber('chatModerator', 'symbolsTriggerLength', 20),
emotesToggle = $.getSetIniDbBoolean('chatModerator', 'emotesToggle', false),
emotesMessage = $.getSetIniDbString('chatModerator', 'emotesMessage', 'you were timed out for overusing emotes.'),
emotesLimit = $.getSetIniDbNumber('chatModerator', 'emotesLimit', 5),
longMessageToggle = $.getSetIniDbBoolean('chatModerator', 'longMessageToggle', false),
longMessageMessage = $.getSetIniDbString('chatModerator', 'longMessageMessage', 'you were timed out for posting a long message.'),
longMessageLimit = $.getSetIniDbNumber('chatModerator', 'longMessageLimit', 325),
colorsToggle = $.getSetIniDbBoolean('chatModerator', 'colorsToggle', false),
colorsMessage = $.getSetIniDbString('chatModerator', 'colorsMessage', 'you were timed out for using colored text.'),
spamTrackerToggle = $.getSetIniDbBoolean('chatModerator', 'spamTrackerToggle', false),
spamTrackerMessage = $.getSetIniDbString('chatModerator', 'spamTrackerMessage', 'you were timed out for spamming chat.'),
spamTrackerTime = $.getSetIniDbNumber('chatModerator', 'spamTrackerTime', 30),
spamTrackerLimit = $.getSetIniDbNumber('chatModerator', 'spamTrackerLimit', 30),
blacklistTimeoutTime = $.getSetIniDbNumber('chatModerator', 'blacklistTimeoutTime', 600),
blacklistMessage = $.getSetIniDbString('chatModerator', 'blacklistMessage', 'you were timed out for using a blacklisted phrase.'),
blacklistMessageBan = $.getSetIniDbString('chatModerator', 'blacklistMessageBan', 'you were banned for using a blacklisted phrase.'),
fakePurgeToggle = $.getSetIniDbBoolean('chatModerator', 'fakePurgeToggle', false),
fakePurgeMessage = $.getSetIniDbString('chatModerator', 'fakePurgeMessage', 'you were timed out for a fake purge.'),
subscribers = {
Links: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateLinks', true),
Caps: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateCaps', true),
Symbols: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateSymbols', true),
Spam: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateSpam', true),
Emotes: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateEmotes', true),
Colors: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateColors', true),
LongMsg: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateLongMsg', true),
SpamTracker: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateSpamTracker', true),
FakePurge: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateFakePurge', true),
},
regulars = {
Links: $.getSetIniDbBoolean('chatModerator', 'regularsModerateLinks', true),
Caps: $.getSetIniDbBoolean('chatModerator', 'regularsModerateCaps', true),
Symbols: $.getSetIniDbBoolean('chatModerator', 'regularsModerateSymbols', true),
Spam: $.getSetIniDbBoolean('chatModerator', 'regularsModerateSpam', true),
Emotes: $.getSetIniDbBoolean('chatModerator', 'regularsModerateEmotes', true),
Colors: $.getSetIniDbBoolean('chatModerator', 'regularsModerateColors', true),
LongMsg: $.getSetIniDbBoolean('chatModerator', 'regularsModerateLongMsg', true),
SpamTracker: $.getSetIniDbBoolean('chatModerator', 'regularsModerateSpamTracker', true),
FakePurge: $.getSetIniDbBoolean('chatModerator', 'regularsModerateFakePurge', true),
},
silentTimeout = {
Links: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutLinks', false),
Caps: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutCaps', false),
Symbols: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutSymbols', false),
Spam: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutSpam', false),
Emotes: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutEmotes', false),
Colors: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutColors', false),
LongMsg: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutLongMsg', false),
Blacklist: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutBlacklist', false),
SpamTracker: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutSpamTracker', false),
FakePurge: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutFakePurge', false),
LinkMessage: $.getSetIniDbString('chatModerator', 'silentLinkMessage', 'Posting links without permission. (Automated by ' + $.botName + ')'),
SpamMessage: $.getSetIniDbString('chatModerator', 'silentSpamMessage', 'Excessive use of repeating characters. (Automated by ' + $.botName + ')'),
CapMessage: $.getSetIniDbString('chatModerator', 'silentCapMessage', 'Excessive use of caps. (Automated by ' + $.botName + ')'),
SymbolMessage: $.getSetIniDbString('chatModerator', 'silentSymbolsMessage', 'Excessive use of symbols. (Automated by ' + $.botName + ')'),
ColorMessage: $.getSetIniDbString('chatModerator', 'silentColorMessage', 'Using colored text. (Automated by ' + $.botName + ')'),
EmoteMessage: $.getSetIniDbString('chatModerator', 'silentEmoteMessage', 'Excessive use of emotes. (Automated by ' + $.botName + ')'),
LongMessage: $.getSetIniDbString('chatModerator', 'silentLongMessage', 'Excessive message length. (Automated by ' + $.botName + ')'),
BlacklistMessage: $.getSetIniDbString('chatModerator', 'silentBlacklistMessage', 'Using a blacklisted phrase. (Automated by ' + $.botName + ')'),
SpamTrackerMessage: $.getSetIniDbString('chatModerator', 'silentSpamTrackerMessage', 'Spamming chat. (Automated by ' + $.botName + ')'),
FakePurgeMessage: $.getSetIniDbString('chatModerator', 'silentFakePurgeMessage', 'Fake purge. (Automated by ' + $.botName + ')'),
},
warningTime = {
Links: $.getSetIniDbNumber('chatModerator', 'warningTimeLinks', 5),
Caps: $.getSetIniDbNumber('chatModerator', 'warningTimeCaps', 5),
Symbols: $.getSetIniDbNumber('chatModerator', 'warningTimeSymbols', 5),
Spam: $.getSetIniDbNumber('chatModerator', 'warningTimeSpam', 5),
Emotes: $.getSetIniDbNumber('chatModerator', 'warningTimeEmotes', 5),
Colors: $.getSetIniDbNumber('chatModerator', 'warningTimeColors', 5),
LongMsg: $.getSetIniDbNumber('chatModerator', 'warningTimeLongMsg', 5),
SpamTracker: $.getSetIniDbNumber('chatModerator', 'warningTimeSpamTracker', 5),
FakePurge: $.getSetIniDbNumber('chatModerator', 'warningTimeFakePurge', 5),
},
timeoutTime = {
Links: $.getSetIniDbNumber('chatModerator', 'timeoutTimeLinks', 600),
Caps: $.getSetIniDbNumber('chatModerator', 'timeoutTimeCaps', 600),
Symbols: $.getSetIniDbNumber('chatModerator', 'timeoutTimeSymbols', 600),
Spam: $.getSetIniDbNumber('chatModerator', 'timeoutTimeSpam', 600),
Emotes: $.getSetIniDbNumber('chatModerator', 'timeoutTimeEmotes', 600),
Colors: $.getSetIniDbNumber('chatModerator', 'timeoutTimeColors', 600),
LongMsg: $.getSetIniDbNumber('chatModerator', 'timeoutTimeLongMsg', 600),
SpamTracker: $.getSetIniDbNumber('chatModerator', 'timeoutTimeSpamTracker', 600),
FakePurge: $.getSetIniDbNumber('chatModerator', 'timeoutTimeFakePurge', 600),
},
moderationLogs = $.getSetIniDbBoolean('chatModerator', 'moderationLogs', false),
msgCooldownSec = $.getSetIniDbNumber('chatModerator', 'msgCooldownSecs', 45),
warningResetTime = $.getSetIniDbNumber('chatModerator', 'warningResetTime', 60),
resetTime = (warningResetTime * 6e4),
messageTime = $.systemTime(),
warning = '',
youtubeLinks = new RegExp('(youtube.com|youtu.be)', 'i'),
i,
j,
k;
/**
* @function reloadModeration
* To be called by the panel to update the chatmod settings after updating the DB directly.
*/
function reloadModeration() {
linksToggle = $.getIniDbBoolean('chatModerator', 'linksToggle');
linksMessage = $.getIniDbString('chatModerator', 'linksMessage');
linkPermitTime = $.getIniDbNumber('chatModerator', 'linkPermitTime');
capsToggle = $.getIniDbBoolean('chatModerator', 'capsToggle');
capsMessage = $.getIniDbString('chatModerator', 'capsMessage');
capsLimitPercent = $.getIniDbFloat('chatModerator', 'capsLimitPercent');
capsTriggerLength = $.getIniDbNumber('chatModerator', 'capsTriggerLength');
spamToggle = $.getIniDbBoolean('chatModerator', 'spamToggle');
spamMessage = $.getIniDbString('chatModerator', 'spamMessage');
spamLimit = $.getIniDbNumber('chatModerator', 'spamLimit');
symbolsToggle = $.getIniDbBoolean('chatModerator', 'symbolsToggle');
symbolsMessage = $.getIniDbString('chatModerator', 'symbolsMessage');
symbolsLimitPercent = $.getIniDbFloat('chatModerator', 'symbolsLimitPercent');
symbolsGroupLimit = $.getIniDbFloat('chatModerator', 'symbolsGroupLimit');
symbolsTriggerLength = $.getIniDbNumber('chatModerator', 'symbolsTriggerLength');
emotesToggle = $.getIniDbBoolean('chatModerator', 'emotesToggle');
emotesMessage = $.getIniDbString('chatModerator', 'emotesMessage');
emotesLimit = $.getIniDbNumber('chatModerator', 'emotesLimit');
longMessageToggle = $.getIniDbBoolean('chatModerator', 'longMessageToggle');
longMessageMessage = $.getIniDbString('chatModerator', 'longMessageMessage');
longMessageLimit = $.getIniDbNumber('chatModerator', 'longMessageLimit');
colorsToggle = $.getIniDbBoolean('chatModerator', 'colorsToggle');
colorsMessage = $.getIniDbString('chatModerator', 'colorsMessage');
spamTrackerToggle = $.getIniDbBoolean('chatModerator', 'spamTrackerToggle');
spamTrackerMessage = $.getIniDbString('chatModerator', 'spamTrackerMessage');
spamTrackerTime = $.getIniDbNumber('chatModerator', 'spamTrackerTime');
spamTrackerLimit = $.getIniDbNumber('chatModerator', 'spamTrackerLimit');
fakePurgeToggle = $.getSetIniDbBoolean('chatModerator', 'fakePurgeToggle');
fakePurgeMessage = $.getSetIniDbString('chatModerator', 'fakePurgeMessage');
subscribers = {
Links: $.getIniDbBoolean('chatModerator', 'subscribersModerateLinks'),
Caps: $.getIniDbBoolean('chatModerator', 'subscribersModerateCaps'),
Symbols: $.getIniDbBoolean('chatModerator', 'subscribersModerateSymbols'),
Spam: $.getIniDbBoolean('chatModerator', 'subscribersModerateSpam'),
Emotes: $.getIniDbBoolean('chatModerator', 'subscribersModerateEmotes'),
Colors: $.getIniDbBoolean('chatModerator', 'subscribersModerateColors'),
LongMsg: $.getIniDbBoolean('chatModerator', 'subscribersModerateLongMsg'),
SpamTracker: $.getIniDbBoolean('chatModerator', 'subscribersModerateSpamTracker'),
FakePurge: $.getSetIniDbBoolean('chatModerator', 'subscribersModerateFakePurge')
};
regulars = {
Links: $.getIniDbBoolean('chatModerator', 'regularsModerateLinks'),
Caps: $.getIniDbBoolean('chatModerator', 'regularsModerateCaps'),
Symbols: $.getIniDbBoolean('chatModerator', 'regularsModerateSymbols'),
Spam: $.getIniDbBoolean('chatModerator', 'regularsModerateSpam'),
Emotes: $.getIniDbBoolean('chatModerator', 'regularsModerateEmotes'),
Colors: $.getIniDbBoolean('chatModerator', 'regularsModerateColors'),
LongMsg: $.getIniDbBoolean('chatModerator', 'regularsModerateLongMsg'),
SpamTracker: $.getIniDbBoolean('chatModerator', 'regularsModerateSpamTracker'),
FakePurge: $.getSetIniDbBoolean('chatModerator', 'regularsModerateFakePurge')
};
silentTimeout = {
Links: $.getIniDbBoolean('chatModerator', 'silentTimeoutLinks'),
Caps: $.getIniDbBoolean('chatModerator', 'silentTimeoutCaps'),
Symbols: $.getIniDbBoolean('chatModerator', 'silentTimeoutSymbols'),
Spam: $.getIniDbBoolean('chatModerator', 'silentTimeoutSpam'),
Emotes: $.getIniDbBoolean('chatModerator', 'silentTimeoutEmotes'),
Colors: $.getIniDbBoolean('chatModerator', 'silentTimeoutColors'),
LongMsg: $.getIniDbBoolean('chatModerator', 'silentTimeoutLongMsg'),
Blacklist: $.getIniDbBoolean('chatModerator', 'silentTimeoutBlacklist'),
SpamTracker: $.getIniDbBoolean('chatModerator', 'silentSpamTracker'),
FakePurge: $.getSetIniDbBoolean('chatModerator', 'silentTimeoutFakePurge'),
LinkMessage: $.getIniDbString('chatModerator', 'silentLinkMessage'),
SpamMessage: $.getIniDbString('chatModerator', 'silentSpamMessage'),
CapMessage: $.getIniDbString('chatModerator', 'silentCapMessage'),
SymbolMessage: $.getIniDbString('chatModerator', 'silentSymbolsMessage'),
ColorMessage: $.getIniDbString('chatModerator', 'silentColorMessage'),
EmoteMessage: $.getIniDbString('chatModerator', 'silentEmoteMessage'),
LongMessage: $.getIniDbString('chatModerator', 'silentLongMessage'),
BlacklistMessage: $.getIniDbString('chatModerator', 'silentBlacklistMessage'),
SpamTrackerMessage: $.getIniDbString('chatModerator', 'silentSpamTrackerMessage'),
FakePurgeMessage: $.getSetIniDbString('chatModerator', 'silentFakePurgeMessage')
};
warningTime = {
Links: $.getIniDbNumber('chatModerator', 'warningTimeLinks'),
Caps: $.getIniDbNumber('chatModerator', 'warningTimeCaps'),
Symbols: $.getIniDbNumber('chatModerator', 'warningTimeSymbols'),
Spam: $.getIniDbNumber('chatModerator', 'warningTimeSpam'),
Emotes: $.getIniDbNumber('chatModerator', 'warningTimeEmotes'),
Colors: $.getIniDbNumber('chatModerator', 'warningTimeColors'),
LongMsg: $.getIniDbNumber('chatModerator', 'warningTimeLongMsg'),
SpamTracker: $.getIniDbNumber('chatModerator', 'warningTimeSpamTracker'),
FakePurge: $.getSetIniDbNumber('chatModerator', 'warningTimeFakePurge')
};
timeoutTime = {
Links: $.getIniDbNumber('chatModerator', 'timeoutTimeLinks'),
Caps: $.getIniDbNumber('chatModerator', 'timeoutTimeCaps'),
Symbols: $.getIniDbNumber('chatModerator', 'timeoutTimeSymbols'),
Spam: $.getIniDbNumber('chatModerator', 'timeoutTimeSpam'),
Emotes: $.getIniDbNumber('chatModerator', 'timeoutTimeEmotes'),
Colors: $.getIniDbNumber('chatModerator', 'timeoutTimeColors'),
LongMsg: $.getIniDbNumber('chatModerator', 'timeoutTimeLongMsg'),
SpamTracker: $.getIniDbNumber('chatModerator', 'timeoutTimeSpamTracker'),
FakePurge: $.getSetIniDbNumber('chatModerator', 'timeoutTimeFakePurge')
};
blacklistMessage = $.getIniDbString('chatModerator', 'blacklistMessage');
blacklistMessageBan = $.getIniDbString('chatModerator', 'blacklistMessageBan');
warningResetTime = $.getIniDbNumber('chatModerator', 'warningResetTime');
msgCooldownSec = $.getIniDbNumber('chatModerator', 'msgCooldownSecs');
resetTime = (warningResetTime * 6e4);
loadBlackList();
loadWhiteList();
}
/*
* @interval
*/
setInterval(function() {
var keys,
i;
if (spamTracker.length !== 0) {
keys = Object.keys(spamTracker);
for (i in keys) {
if (spamTracker[keys[i]].time < $.systemTime()) {
delete spamTracker[keys[i]];
}
}
}
if (timeouts.length !== 0) {
keys = Object.keys(timeouts);
for (i in keys) {
if (timeouts[keys[i]] < $.systemTime()) {
delete timeouts[keys[i]];
}
}
}
}, 8e4, 'scripts::core::chatModerator.js');
/**
* @function loadBlackList
*/
function loadBlackList() {
var keys = $.inidb.GetKeyList('blackList', '');
blackList = [];
for (i = 0; i < keys.length; i++) {
var json = JSON.parse($.inidb.get('blackList', keys[i]));
if (json != null) {
if (json.isRegex) {
try {
json.phrase = new RegExp(json.phrase.replace('regex:', ''));
} catch (ex) {
// Failed to create regex, ignore this and don't make it a blacklist.
continue;
}
} else {
json.phrase = json.phrase.toLowerCase();
}
json.isBan = parseInt(json.timeout) === -1;
blackList.push(json);
}
}
}
/**
* @function addToWhiteList
*
* @param {string} url
*/
function addToWhiteList(url) {
whiteList.push(new RegExp(url.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'));
}
/**
* @function loadWhiteList
*/
function loadWhiteList() {
var keys = $.inidb.GetKeyList('whiteList', '');
whiteList = [];
for (i = 0; i < keys.length; i++) {
addToWhiteList(keys[i] + '');
}
}
/**
* @function timeoutUserFor
*
* @param {string} username
* @param {number} time
* @param {string} reason
* @param {map} tags
*/
function timeoutUserFor(username, time, reason, tags) {
if (time == 0) {
$.session.sayNow('.delete ' + tags.get('id')); // Cannot send a reason/time with this.
} else {
$.session.sayNow('.timeout ' + username + ' ' + time + ' ' + reason);
}
}
/*
* @function banUser
*
* @param {string} username
* @param {string} reason
*/
function banUser(username, reason) {
$.session.sayNow('.ban ' + username + ' ' + reason);
}
/**
* @function timeout
*
* @param {string} username
* @param {number} warningT
* @param {number} timeoutT
* @param {string} reason
* @param {map} tags
*/
function timeout(username, warningT, timeoutT, reason, tags) {
if (timeouts[username] !== undefined) {
if (timeouts[username] > $.systemTime()) {
timeoutUserFor(username, timeoutT, reason, tags);
warning = $.lang.get('chatmoderator.timeout');
} else {
timeoutUserFor(username, warningT, reason, tags);
warning = $.lang.get('chatmoderator.warning');
}
} else {
timeoutUserFor(username, warningT, reason, tags);
warning = $.lang.get('chatmoderator.warning');
}
timeouts[username] = ($.systemTime() + resetTime);
}
/**
* @function sendMessage
*
* @param {string} username
* @param {string} message
* @param {boolean} filter
*/
function sendMessage(username, message, filter) {
if (filter == false && messageTime < $.systemTime() && $.getMessageWrites() < 7) {
$.session.sayNow('@' + username + ', ' + message + ' ' + warning);
messageTime = ((msgCooldownSec * 1000) + $.systemTime());
}
}
/**
* @function permitUser
*
* @param {string} username
*/
function permitUser(username) {
permitList[username] = ((linkPermitTime * 1000) + $.systemTime());
}
/**
* @function getModerationFilterStatus
*
* @param {string} filter
* @param {boolean} toggle
*/
function getModerationFilterStatus(filter, toggle) {
if (toggle) {
return (filter ? $.lang.get('common.enabled') : $.lang.get('common.disabled'));
} else {
return (filter ? 'not allowed' : 'allowed');
}
}
/**
* @function checkPermitList
*
* @param {string} username
*/
function checkPermitList(username) {
if (permitList[username] !== undefined) {
if (permitList[username] > $.systemTime()) {
delete permitList[username];
return true;
}
}
return false;
}
/**
* @function checkBlackList
*
* @param {string} sender
* @param {string} message
* @param {map} tags
*/
function checkBlackList(sender, event, message, tags) {
for (i in blackList) {
if (blackList[i].isRegex) {
if ($.test(message, blackList[i].phrase)) {
if (blackList[i].excludeRegulars && $.isReg(sender) || blackList[i].excludeSubscribers && $.isSubv3(sender, event.getTags())) {
return false;
}
if (blackList[i].isBan) {
banUser(sender, blackList[i].banReason);
warning = $.lang.get('chatmoderator.ban');
sendMessage(sender, blackList[i].message, blackList[i].isSilent);
} else {
timeoutUserFor(sender, blackList[i].timeout, blackList[i].banReason, tags);
warning = $.lang.get('chatmoderator.timeout');
sendMessage(sender, blackList[i].message, blackList[i].isSilent);
}
return true;
}
} else {
if (message.indexOf(blackList[i].phrase) !== -1) {
if (blackList[i].excludeRegulars && $.isReg(sender) || blackList[i].excludeSubscribers && $.isSubv3(sender, event.getTags())) {
return false;
}
if (blackList[i].isBan) {
banUser(sender, blackList[i].banReason);
warning = $.lang.get('chatmoderator.ban');
sendMessage(sender, blackList[i].message, blackList[i].isSilent);
} else {
timeoutUserFor(sender, blackList[i].timeout, blackList[i].banReason, tags);
warning = $.lang.get('chatmoderator.timeout');
sendMessage(sender, blackList[i].message, blackList[i].isSilent);
}
return true;
}
}
}
return false;
}
/**
* @function checkWhiteList
*
* @param {string} message
*/
function checkWhiteList(message) {
function checkLink(link, whiteListItem) {
var baseLink = $.match(link, /[^.]*[^/]*/)[0];
var matches = $.matchAll(link, whiteListItem);
for (k = 0; k < matches.length; k++) {
var matchStart = matches[k].index;
var matchEnd = matches[k].index + matches[k][0].length;
if (matchStart < baseLink.length && matchEnd >= baseLink.length) {
return true;
}
}
return false;
}
var links = $.patternDetector.getLinks(message);
for (i = 0; i < whiteList.length; i++) {
for (j = 0; j < links.length; j++) {
if (checkLink(links[j], whiteList[i])) {
links.splice(j--, 1);
}
}
if (links.length === 0) {
return true;
}
}
return false;
}
/**
* @function checkYoutubePlayer
*
* @param {string} message
*/
function checkYoutubePlayer(message) {
if ($.youtubePlayerConnected && $.test(message, youtubeLinks)) {
return true;
}
return false;
}
/**
* @function performModeration
*/
function performModeration(event) {
var sender = event.getSender(),
message = event.getMessage().toLowerCase(),
messageLength = message.length(),
tags = event.getTags();
if (!$.isModv3(sender, tags)) {
// Blacklist
if (checkBlackList(sender, event, message, tags)) {
return;
}
// Links filter
if (linksToggle && $.patternDetector.hasLinks(event)) {
if (checkYoutubePlayer(message) || checkPermitList(sender) || checkWhiteList(message)) {
return;
} else if (!regulars.Links && $.isReg(sender) || !subscribers.Links && $.isSubv3(sender, event.getTags())) {
return;
}
timeout(sender, warningTime.Links, timeoutTime.Links, silentTimeout.LinkMessage, tags);
sendMessage(sender, linksMessage, silentTimeout.Links);
$.patternDetector.logLastLink(event);
return;
}
// Symbol filter
if (symbolsToggle && messageLength >= symbolsTriggerLength) {
if ($.patternDetector.getLongestNonLetterSequence(event) >= symbolsGroupLimit || (($.patternDetector.getNumberOfNonLetters(event) / messageLength) * 100) >= symbolsLimitPercent) {
if (!regulars.Symbols && $.isReg(sender) || !subscribers.Symbols && $.isSubv3(sender, event.getTags())) {
return;
}
timeout(sender, warningTime.Symbols, timeoutTime.Symbols, silentTimeout.SymbolMessage, tags);
sendMessage(sender, symbolsMessage, silentTimeout.Symbols);
return;
}
}
// Spam filter
if (spamToggle && $.patternDetector.getLongestRepeatedSequence(event) >= spamLimit) {
if (!regulars.Spam && $.isReg(sender) || !subscribers.Spam && $.isSubv3(sender, event.getTags())) {
return;
}
timeout(sender, warningTime.Spam, timeoutTime.Spam, silentTimeout.SpamMessage, tags);
sendMessage(sender, spamMessage, silentTimeout.Spam);
return;
}
// Long msg filter
if (longMessageToggle && messageLength >= longMessageLimit) {
if (!regulars.LongMsg && $.isReg(sender) || !subscribers.LongMsg && $.isSubv3(sender, event.getTags())) {
return;
}
timeout(sender, warningTime.LongMsg, timeoutTime.LongMsg, silentTimeout.LongMessage, tags);
sendMessage(sender, longMessageMessage, silentTimeout.LongMsg);
return;
}
// Fake purge filter
if (fakePurgeToggle && $.patternDetector.getFakePurge(event)) {
if (!regulars.FakePurge && $.isReg(sender) || !subscribers.FakePurge && $.isSubv3(sender, event.getTags())) {
return;
}
timeout(sender, warningTime.FakePurge, timeoutTime.FakePurge, silentTimeout.FakePurgeMessage, tags);
sendMessage(sender, fakePurgeMessage, silentTimeout.FakePurge);
return;
}
// Emotes folter
if (emotesToggle && $.patternDetector.getEmotesCount(event) >= emotesLimit) {
if (!regulars.Emotes && $.isReg(sender) || !subscribers.Emotes && $.isSubv3(sender, event.getTags())) {
return;
}
timeout(sender, warningTime.Emotes, timeoutTime.Emotes, silentTimeout.EmoteMessage, tags);
sendMessage(sender, emotesMessage, silentTimeout.Emotes);
return;
}
// Caps filter
if (capsToggle && messageLength >= capsTriggerLength) {
if ((($.patternDetector.getNumberOfCaps(event) / messageLength) * 100) >= capsLimitPercent) {
if (!regulars.Caps && $.isReg(sender) || !subscribers.Caps && $.isSubv3(sender, event.getTags())) {
return;
}
timeout(sender, warningTime.Caps, timeoutTime.Caps, silentTimeout.CapMessage, tags);
sendMessage(sender, capsMessage, silentTimeout.Caps);
return;
}
}
// Color filter
if (colorsToggle && $.patternDetector.getColoredMessage(event)) {
if (!regulars.Colors && $.isReg(sender) || !subscribers.Colors && $.isSubv3(sender, event.getTags())) {
return;
}
timeout(sender, warningTime.Colors, timeoutTime.Colors, silentTimeout.ColorMessage, tags);
sendMessage(sender, colorsMessage, silentTimeout.Colors);
return;
}
// Spam tracker
if (spamTrackerToggle) {
if (!regulars.SpamTracker && $.isReg(sender) || !subscribers.SpamTracker && $.isSubv3(sender, event.getTags())) {
return;
}
if (spamTracker[sender] !== undefined) {
if (spamTracker[sender].time - $.systemTime() <= 0) {
spamTracker[sender] = {count: 0, time: ($.systemTime() + (spamTrackerTime * 1e3))};
}
spamTracker[sender].count++;
} else {
spamTracker[sender] = {count: 1, time: ($.systemTime() + (spamTrackerTime * 1e3))};
}
if (spamTracker[sender].count >= spamTrackerLimit) {
timeout(sender, warningTime.SpamTracker, timeoutTime.SpamTracker, silentTimeout.SpamTrackerMessage, tags);
sendMessage(sender, spamTrackerMessage, silentTimeout.SpamTracker);
delete spamTracker[sender];
}
}
}
}
/**
* @function extraCommands
* Handles the commands that the normal function can't.
*/
function extraCommands(event) {
var sender = event.getSender(),
command = event.getCommand(),
argString = event.getArguments(),
args = event.getArgs(),
action = args[0],
subAction = args[1];
if (command.equalsIgnoreCase('moderation') || command.equalsIgnoreCase('mod')) { // js can't handle anymore commands in the default function.
if (!action) {
return;
}
/**
* @commandpath moderation togglemoderationlogs - Toggles the moderation logs. You will need to reboot if you are enabling it.
*/
if (action.equalsIgnoreCase('togglemoderationlogs')) {
moderationLogs = !moderationLogs;
$.inidb.set('chatModerator', 'moderationLogs', moderationLogs);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.moderation.logs', (moderationLogs === true ? $.lang.get('chatmoderator.moderation.enabled') : $.lang.get('common.disabled'))));
}
/**
* @commandpath moderation spamtracker [on / off] - Enable/Disable the spam tracker. This limits how many messages a user can sent in 30 seconds by default
*/
if (action.equalsIgnoreCase('spamtracker')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spamtracker.usage', getModerationFilterStatus(spamTrackerToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
spamTrackerToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'spamTrackerToggle', spamTrackerToggle);
$.say($.whisperPrefix(sender) + (spamTrackerToggle ? $.lang.get('chatmoderator.spamtracker.filter.enabled') : $.lang.get('chatmoderator.spamtracker.filter.disabled')));
$.log.event('spam tracker filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation spamtrackerlimit [amount of messages] - Sets how many messages a user can sent in 30 seconds by default
*/
if (action.equalsIgnoreCase('spamtrackerlimit')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spamtracker.limit.usage'));
return;
}
spamTrackerLimit = parseInt(subAction);
$.inidb.set('chatModerator', 'spamTrackerLimit', spamTrackerLimit);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spamtracker.limit.set', spamTrackerLimit));
$.log.event(sender + ' changed the spam tracker limit to ' + spamTrackerLimit);
return;
}
/**
* @commandpath moderation spamtrackertime [amount in seconds] - Sets how many messages a user can sent in 30 seconds by default
*/
if (action.equalsIgnoreCase('spamtrackertime')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spamtracker.time.usage'));
return;
}
spamTrackerTime = parseInt(subAction);
$.inidb.set('chatModerator', 'spamTrackerTime', spamTrackerTime);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spamtracker.time.set', spamTrackerTime));
$.log.event(sender + ' changed the spam tracker time to ' + spamTrackerTime);
return;
}
/**
* @commandpath moderation spamtrackermessage [message] - Sets the spam tracker warning message
*/
if (action.equalsIgnoreCase('spamtrackermessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spamtracker.message.usage'));
return;
}
spamTrackerMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'spamTrackerMessage', spamTrackerMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spamtracker.message.set', spamTrackerMessage));
$.log.event(sender + ' changed the spam tracker warning message to "' + spamTrackerMessage + '"');
return;
}
if (action.equalsIgnoreCase('regulars')) {
if (subAction && subAction.equalsIgnoreCase('spamtracker')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.spamtracker', getModerationFilterStatus(regulars.SpamTracker)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.SpamTracker = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateSpamTracker', regulars.SpamTracker);
$.say($.whisperPrefix(sender) + (regulars.SpamTracker ? $.lang.get('chatmoderator.regulars.spamtracker.allowed') : $.lang.get('chatmoderator.regulars.spamtracker.not.allowed')));
$.log.event(sender + ' changed regulars moderation for spam tracker to ' + args[2]);
return;
}
}
}
if (action.equalsIgnoreCase('subscribers')) {
if (subAction && subAction.equalsIgnoreCase('spamtracker')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.spamtracker', getModerationFilterStatus(subscribers.SpamTracker)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.SpamTracker = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateSpamTracker', subscribers.SpamTracker);
$.say($.whisperPrefix(sender) + (subscribers.SpamTracker ? $.lang.get('chatmoderator.subscribers.spamtracker.allowed') : $.lang.get('chatmoderator.subscribers.spamtracker.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for spam tracker to ' + args[2]);
return;
}
}
}
if (action.equalsIgnoreCase('silenttimeout')) {
if (subAction && subAction.equalsIgnoreCase('spamtracker')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.spamtracker', getModerationFilterStatus(silentTimeout.SpamTracker, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.SpamTracker = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutSpamTracker', silentTimeout.SpamTracker);
$.say($.whisperPrefix(sender) + (silentTimeout.SpamTracker ? $.lang.get('chatmoderator.silenttimeout.spamtracker.true') : $.lang.get('chatmoderator.silenttimeout.spamtracker.false')));
$.log.event(sender + ' changed silent timeout moderation for spam tracker to ' + args[2]);
return;
}
}
}
if (action.equalsIgnoreCase('warningtime')) {
if (subAction && subAction.equalsIgnoreCase('spamtracker')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.spamtracker.usage', warningTime.SpamTracker));
return;
}
warningTime.SpamTracker = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeSpamTracker', warningTime.SpamTracker);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.spamtracker', warningTime.SpamTracker));
$.log.event(sender + ' changed warning time for spam tracker to: ' + warningTime.SpamTracker);
}
}
if (action.equalsIgnoreCase('timeouttime')) {
if (subAction && subAction.equalsIgnoreCase('spamtracker')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.spamtracker.usage', timeoutTime.SpamTracker));
return;
}
timeoutTime.SpamTracker = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeSpamTracker', timeoutTime.SpamTracker);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.spamtracker', timeoutTime.SpamTracker));
$.log.event(sender + ' changed timeout time for spam tracker to: ' + timeoutTime.SpamTracker);
}
}
/**
* @commandpath moderation fakepurge [on / off] - Enable/Disable the fake purges filter. This will remove <message deleted> variations if enabled.
*/
if (action.equalsIgnoreCase('fakepurge')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.fakepurge.usage', getModerationFilterStatus(fakePurgeToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
fakePurgeToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'fakePurgeToggle', fakePurgeToggle);
$.say($.whisperPrefix(sender) + (fakePurgeToggle ? $.lang.get('chatmoderator.fakepurge.filter.enabled') : $.lang.get('chatmoderator.fakepurge.filter.disabled')));
$.log.event('fake purge filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation fakepurgemessage [message] - Sets the fake purge warning message
*/
if (action.equalsIgnoreCase('fakepurgemessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.fakepurge.message.usage'));
return;
}
fakePurgeMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'fakePurgeMessage', fakePurgeMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.fakepurge.message.set', fakePurgeMessage));
$.log.event(sender + ' changed the fake purge warning message to "' + fakePurgeMessage + '"');
return;
}
if (action.equalsIgnoreCase('regulars')) {
if (subAction && subAction.equalsIgnoreCase('fakepurge')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.fakepurge', getModerationFilterStatus(regulars.FakePurge)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.FakePurge = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateFakePurge', regulars.FakePurge);
$.say($.whisperPrefix(sender) + (regulars.FakePurge ? $.lang.get('chatmoderator.regulars.fakepurge.allowed') : $.lang.get('chatmoderator.regulars.fakepurge.not.allowed')));
$.log.event(sender + ' changed regulars moderation for fake purge to ' + args[2]);
return;
}
}
}
if (action.equalsIgnoreCase('subscribers')) {
if (subAction && subAction.equalsIgnoreCase('fakepurge')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.fakepurge', getModerationFilterStatus(subscribers.FakePurge)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.FakePurge = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateFakePurge', subscribers.FakePurge);
$.say($.whisperPrefix(sender) + (subscribers.FakePurge ? $.lang.get('chatmoderator.subscribers.fakepurge.allowed') : $.lang.get('chatmoderator.subscribers.fakepurge.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for fake purge to ' + args[2]);
return;
}
}
}
if (action.equalsIgnoreCase('silenttimeout')) {
if (subAction && subAction.equalsIgnoreCase('fakepurge')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.fakepurge', getModerationFilterStatus(silentTimeout.FakePurge, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.FakePurge = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutFakePurge', silentTimeout.FakePurge);
$.say($.whisperPrefix(sender) + (silentTimeout.FakePurge ? $.lang.get('chatmoderator.silenttimeout.fakepurge.true') : $.lang.get('chatmoderator.silenttimeout.fakepurge.false')));
$.log.event(sender + ' changed silent timeout moderation for fake purge to ' + args[2]);
return;
}
}
}
if (action.equalsIgnoreCase('warningtime')) {
if (subAction && subAction.equalsIgnoreCase('fakepurge')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.fakepurge.usage', warningTime.FakePurge));
return;
}
warningTime.FakePurge = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeFakePurge', warningTime.FakePurge);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.fakepurge', warningTime.FakePurge));
$.log.event(sender + ' changed warning time for fake purge to: ' + warningTime.FakePurge);
}
}
if (action.equalsIgnoreCase('timeouttime')) {
if (subAction && subAction.equalsIgnoreCase('fakepurge')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.fakepurge.usage', timeoutTime.FakePurge));
return;
}
timeoutTime.FakePurge = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeFakePurge', timeoutTime.FakePurge);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.fakepurge', timeoutTime.FakePurge));
$.log.event(sender + ' changed timeout time for fake purge to: ' + timeoutTime.FakePurge);
}
}
}
/**
* @commandpath blacklist - Show usage of command to manipulate the blacklist of words in chat
*/
if (command.equalsIgnoreCase('blacklist')) {
if (!action) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklist.usage'));
return;
}
/**
* @commandpath blacklist add [timeout time (-1 = ban)] [word] - Adds a word to the blacklist. Use regex: at the start to specify a regex blacklist.
*/
if (action.equalsIgnoreCase('add')) {
if (!subAction || !args[2] || isNaN(parseInt(subAction))) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklist.add.usage'));
return;
}
var word = argString.split(' ').slice(2).join(' '),
isRegex = word.startsWith('regex:'),
timeout = parseInt(subAction),
obj = {};
obj = {
id: String(($.inidb.GetKeyList('blackList', '').length + 1)),
timeout: String(timeout),
isRegex: isRegex,
phrase: String(word),
isSilent: false,
excludeRegulars: false,
excludeSubscribers: false,
message: timeout !== -1 ? String(blacklistMessage) : String(blacklistMessageBan),
banReason: String(silentTimeout.BlacklistMessage)
};
$.inidb.set('blackList', word, JSON.stringify(obj));
loadBlackList();
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklist.added'));
$.log.event('"' + word + '" was added to the blacklist by ' + sender);
}
/**
* @commandpath blacklist remove [word] - Removes a word from the blacklist.
*/
if (action.equalsIgnoreCase('remove')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklist.remove.usage'));
return;
} else if (!$.inidb.exists('blackList', argString.split(' ').slice(1).join(' '))) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.err'));
return;
}
$.inidb.del('blackList', argString.split(' ').slice(1).join(' '));
loadBlackList();
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklist.removed'));
}
}
/**
* @commandpath whitelist - Shows usage of command to manipulate the whitelist links
*/
if (command.equalsIgnoreCase('whitelist')) {
if (!action) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.whitelist.usage'));
return;
}
/**
* @commandpath whitelist add [link] - Adds a link to the whitelist
*/
if (action.equalsIgnoreCase('add')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.whitelist.add.usage'));
return;
}
var link = argString.split(' ').slice(1).join(' ').toLowerCase() + '';
$.inidb.set('whiteList', link, 'true');
addToWhiteList(link);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.whitelist.link.added'));
$.log.event('"' + link + '" was added the the whitelist by ' + sender);
}
/**
* @commandpath whitelist remove [link] - Removes a link from the whitelist.
*/
if (action.equalsIgnoreCase('remove')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.whitelist.remove.usage'));
return;
} else if (!$.inidb.exists('whiteList', argString.split(' ').slice(1).join(' ').toLowerCase())) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.err'));
return;
}
$.inidb.del('whiteList', argString.split(' ').slice(1).join(' ').toLowerCase());
loadWhiteList();
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.whitelist.removed'));
}
}
/**
* @commandpath permit [user] - Permit someone to post a link for a configured period of time
*/
if (command.equalsIgnoreCase('permit')) {
if (!linksToggle) {
return;
}
if (!action) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.permit.usage'));
return;
}
action = $.user.sanitize(action);
// if the user got a warning/timeout, unban him, and remove him from the warning/timeout list.
if (timeouts[action] !== undefined) {
$.session.sayNow('.unban ' + action);
delete timeouts[action];
}
permitUser(action);
$.say(action + $.lang.get('chatmoderator.permited', linkPermitTime));
$.log.event(action + ' was permited by ' + sender);
return;
}
}
/**
* @event ircClearchat
*/
/* Removed this for now because sometimes it fails and it fails to send the moderation timeout and message because of it.
$.bind('ircClearchat', function(event) {
$.log.event(event.getUser() + ' has been timed out for ' + String(event.getDuration()) + ' seconds. Reason: ' + event.getReason());
});
*/
/**
* @event command
*/
$.bind('command', function(event) {
var sender = event.getSender(),
command = event.getCommand(),
argString = event.getArguments(),
args = event.getArgs(),
action = args[0],
subAction = args[1];
/**
* Handle extra commands
*/
extraCommands(event);
/**
* @commandpath moderation - Shows usage for the various chat moderation options
*/
if (command.equalsIgnoreCase('moderation') || command.equalsIgnoreCase('mod')) {
if (!action) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.usage.toggles'));
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.usage.messages'));
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.options'));
return;
}
/**
* @commandpath moderation links [on / off] - Enable/Disable the link filter
*/
if (action.equalsIgnoreCase('links')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.link.usage', getModerationFilterStatus(linksToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
linksToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'linksToggle', linksToggle);
$.say($.whisperPrefix(sender) + (linksToggle ? $.lang.get('chatmoderator.link.filter.enabled') : $.lang.get('chatmoderator.link.filter.disabled')));
$.log.event('Link filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation caps [on / off] - Enable/Disable the caps filter
*/
if (action.equalsIgnoreCase('caps')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.caps.usage', getModerationFilterStatus(capsToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
capsToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'capsToggle', capsToggle);
$.say($.whisperPrefix(sender) + (capsToggle ? $.lang.get('chatmoderator.caps.filter.enabled') : $.lang.get('chatmoderator.caps.filter.disabled')));
$.log.event('Caps filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation spam [on / off] - Enable/Disable the spam filter
*/
if (action.equalsIgnoreCase('spam')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spam.usage', getModerationFilterStatus(spamToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
spamToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'spamToggle', spamToggle);
$.say($.whisperPrefix(sender) + (spamToggle ? $.lang.get('chatmoderator.spam.filter.enabled') : $.lang.get('chatmoderator.spam.filter.disabled')));
$.log.event('Spam filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation symbols [on / off] - Enable/Disable the symbol filter
*/
if (action.equalsIgnoreCase('symbols')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.usage', getModerationFilterStatus(symbolsToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
symbolsToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'symbolsToggle', symbolsToggle);
$.say($.whisperPrefix(sender) + (symbolsToggle ? $.lang.get('chatmoderator.symbols.filter.enabled') : $.lang.get('chatmoderator.symbols.filter.disabled')));
$.log.event('Symbols filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation emotes [on / off] - Enable/Disable the emotes filter
*/
if (action.equalsIgnoreCase('emotes')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.emotes.usage', getModerationFilterStatus(emotesToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
emotesToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'emotesToggle', emotesToggle);
$.say($.whisperPrefix(sender) + (emotesToggle ? $.lang.get('chatmoderator.emotes.filter.enabled') : $.lang.get('chatmoderator.emotes.filter.disabled')));
$.log.event('Emotes filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation colors [on / off] - Enable/Disable the message color filter
*/
if (action.equalsIgnoreCase('colors')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.colors.usage', getModerationFilterStatus(colorsToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
colorsToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'colorsToggle', colorsToggle);
$.say($.whisperPrefix(sender) + (colorsToggle ? $.lang.get('chatmoderator.colors.filter.enabled') : $.lang.get('chatmoderator.colors.filter.disabled')));
$.log.event('Colors filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation longmessages [on / off] - Enable/Disable the longmessages filter
*/
if (action.equalsIgnoreCase('longmessages')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.message.usage', getModerationFilterStatus(longMessageToggle, true)));
return;
}
if (subAction.equalsIgnoreCase('on') || subAction.equalsIgnoreCase('off')) {
longMessageToggle = subAction.equalsIgnoreCase('on');
$.inidb.set('chatModerator', 'longMessageToggle', longMessageToggle);
$.say($.whisperPrefix(sender) + (longMessageToggle ? $.lang.get('chatmoderator.message.filter.enabled') : $.lang.get('chatmoderator.message.filter.disabled')));
$.log.event('Long Message filter was turned ' + subAction + ' by ' + sender);
return;
}
}
/**
* @commandpath moderation regulars [links / caps / symbols / spam / emotes / colors / longmessages / spamtracker / fakepurge] [true / false] - Enable or disable if regulars get moderated by that filter
*/
if (action.equalsIgnoreCase('regulars')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.usage'));
return;
}
if (subAction.equalsIgnoreCase('links')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.link', getModerationFilterStatus(regulars.Links)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.Links = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateLinks', regulars.Links);
$.say($.whisperPrefix(sender) + (regulars.Links ? $.lang.get('chatmoderator.regulars.links.allowed') : $.lang.get('chatmoderator.regulars.links.not.allowed')));
$.log.event(sender + ' changed regulars moderation for links to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('caps')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.caps', getModerationFilterStatus(regulars.Caps)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.Caps = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateCaps', regulars.Caps);
$.say($.whisperPrefix(sender) + (regulars.Caps ? $.lang.get('chatmoderator.regulars.caps.allowed') : $.lang.get('chatmoderator.regulars.caps.not.allowed')));
$.log.event(sender + ' changed regulars moderation for caps to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('symbols')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.symbols', getModerationFilterStatus(regulars.Symbols)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.Symbols = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateSymbols', regulars.Symbols);
$.say($.whisperPrefix(sender) + (regulars.Symbols ? $.lang.get('chatmoderator.regulars.symbols.allowed') : $.lang.get('chatmoderator.regulars.symbols.not.allowed')));
$.log.event(sender + ' changed regulars moderation for symbols to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('spam')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.spam', getModerationFilterStatus(regulars.Spam)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.Spam = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateSpam', regulars.Spam);
$.say($.whisperPrefix(sender) + (regulars.Spam ? $.lang.get('chatmoderator.regulars.spam.allowed') : $.lang.get('chatmoderator.regulars.spam.not.allowed')));
$.log.event(sender + ' changed regulars moderation for spam to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('emotes')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.emotes', getModerationFilterStatus(regulars.Emotes)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.Emotes = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateEmotes', regulars.Emotes);
$.say($.whisperPrefix(sender) + (regulars.Emotes ? $.lang.get('chatmoderator.regulars.emotes.allowed') : $.lang.get('chatmoderator.regulars.emotes.not.allowed')));
$.log.event(sender + ' changed regulars moderation for emotes to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('colors')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.colors', getModerationFilterStatus(regulars.Colors)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.Colors = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateColors', regulars.Colors);
$.say($.whisperPrefix(sender) + (regulars.Colors ? $.lang.get('chatmoderator.regulars.colors.allowed') : $.lang.get('chatmoderator.regulars.colors.not.allowed')));
$.log.event(sender + ' changed regulars moderation for colors to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('longmessages')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.regulars.toggle.long.msg', getModerationFilterStatus(regulars.LongMsg)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
regulars.LongMsg = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'regularsModerateColors', regulars.LongMsg);
$.say($.whisperPrefix(sender) + (regulars.LongMsg ? $.lang.get('chatmoderator.regulars.long.messages.allowed') : $.lang.get('chatmoderator.regulars.long.messages.not.allowed')));
$.log.event(sender + ' changed regulars moderation for long messages to ' + args[2]);
return;
}
}
}
/**
* @commandpath moderation subscribers [links / caps / symbols / spam / emotes / colors / longmessages / spamtracker / fakepurge] [true / false] - Enable or disable if subscribers get moderated by that filter
*/
if (action.equalsIgnoreCase('subscribers')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.usage'));
return;
}
if (subAction.equalsIgnoreCase('links')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.link', getModerationFilterStatus(subscribers.Links)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.Links = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateLinks', subscribers.Links);
$.say($.whisperPrefix(sender) + (subscribers.Links ? $.lang.get('chatmoderator.subscribers.links.allowed') : $.lang.get('chatmoderator.subscribers.links.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for links to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('caps')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.caps', getModerationFilterStatus(subscribers.Caps)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.Caps = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateCaps', subscribers.Caps);
$.say($.whisperPrefix(sender) + (subscribers.Caps ? $.lang.get('chatmoderator.subscribers.caps.allowed') : $.lang.get('chatmoderator.subscribers.caps.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for caps to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('symbols')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.symbols', getModerationFilterStatus(subscribers.Symbols)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.Symbols = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateSymbols', subscribers.Symbols);
$.say($.whisperPrefix(sender) + (subscribers.Symbols ? $.lang.get('chatmoderator.subscribers.symbols.allowed') : $.lang.get('chatmoderator.subscribers.symbols.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for symbols to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('spam')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.spam', getModerationFilterStatus(subscribers.Spam)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.Spam = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateSpam', subscribers.Spam);
$.say($.whisperPrefix(sender) + (subscribers.Spam ? $.lang.get('chatmoderator.subscribers.spam.allowed') : $.lang.get('chatmoderator.subscribers.spam.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for spam to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('emotes')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.emotes', getModerationFilterStatus(subscribers.Emotes)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.Emotes = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateEmotes', subscribers.Emotes);
$.say($.whisperPrefix(sender) + (subscribers.Emotes ? $.lang.get('chatmoderator.subscribers.emotes.allowed') : $.lang.get('chatmoderator.subscribers.emotes.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for emotes to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('colors')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.colors', getModerationFilterStatus(subscribers.Colors)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.Colors = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateColors', subscribers.Colors);
$.say($.whisperPrefix(sender) + (subscribers.Colors ? $.lang.get('chatmoderator.subscribers.colors.allowed') : $.lang.get('chatmoderator.subscribers.colors.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for colors to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('longmessages')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.subscribers.toggle.long.msg', getModerationFilterStatus(subscribers.LongMsg)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
subscribers.LongMsg = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'subscribersModerateColors', subscribers.LongMsg);
$.say($.whisperPrefix(sender) + (subscribers.LongMsg ? $.lang.get('chatmoderator.subscribers.long.messages.allowed') : $.lang.get('chatmoderator.subscribers.long.messages.not.allowed')));
$.log.event(sender + ' changed subscribers moderation for long messages to ' + args[2]);
return;
}
}
}
/**
* @commandpath moderation silenttimeout [links / caps / symbols / spam / emotes / colors / longmessages / spamtracker / fakepurge / all] [true / false] - Enable or disable if the warning and timeout message will be said for that filter
*/
if (action.equalsIgnoreCase('silenttimeout')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.usage'));
return;
}
if (subAction.equalsIgnoreCase('links')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.link', getModerationFilterStatus(silentTimeout.Links, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.Links = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutLinks', silentTimeout.Links);
$.say($.whisperPrefix(sender) + (silentTimeout.Links ? $.lang.get('chatmoderator.silenttimeout.links.true') : $.lang.get('chatmoderator.silenttimeout.links.false')));
$.log.event(sender + ' changed silent timeout moderation for links to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('caps')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.caps', getModerationFilterStatus(silentTimeout.Caps, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.Caps = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutCaps', silentTimeout.Caps);
$.say($.whisperPrefix(sender) + (silentTimeout.Caps ? $.lang.get('chatmoderator.silenttimeout.caps.true') : $.lang.get('chatmoderator.silenttimeout.caps.false')));
$.log.event(sender + ' changed silent timeout moderation for caps to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('symbols')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.symbols', getModerationFilterStatus(silentTimeout.Symbols, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.Symbols = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutSymbols', silentTimeout.Symbols);
$.say($.whisperPrefix(sender) + (silentTimeout.Symbols ? $.lang.get('chatmoderator.silenttimeout.symbols.true') : $.lang.get('chatmoderator.silenttimeout.symbols.false')));
$.log.event(sender + ' changed silent timeout moderation for symbols to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('spam')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.spam', getModerationFilterStatus(silentTimeout.Spam, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.Spam = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutSpam', silentTimeout.Spam);
$.say($.whisperPrefix(sender) + (silentTimeout.Spam ? $.lang.get('chatmoderator.silenttimeout.spam.true') : $.lang.get('chatmoderator.silenttimeout.spam.false')));
$.log.event(sender + ' changed silent timeout moderation for spam to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('emotes')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.emotes', getModerationFilterStatus(silentTimeout.Emotes, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.Emotes = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutEmotes', silentTimeout.Emotes);
$.say($.whisperPrefix(sender) + (silentTimeout.Emotes ? $.lang.get('chatmoderator.silenttimeout.emotes.true') : $.lang.get('chatmoderator.silenttimeout.emotes.false')));
$.log.event(sender + ' changed silent timeout moderation for emotes to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('colors')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.colors', getModerationFilterStatus(silentTimeout.Colors, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.Colors = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutColors', silentTimeout.Colors);
$.say($.whisperPrefix(sender) + (silentTimeout.Colors ? $.lang.get('chatmoderator.silenttimeout.colors.true') : $.lang.get('chatmoderator.silenttimeout.colors.false')));
$.log.event(sender + ' changed silent timeout moderation for colors to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('longmessages')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.toggle.long.msg', getModerationFilterStatus(silentTimeout.LongMsg, true)));
return;
}
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.LongMsg = args[2].equalsIgnoreCase('true');
$.inidb.set('chatModerator', 'silentTimeoutColors', silentTimeout.LongMsg);
$.say($.whisperPrefix(sender) + (silentTimeout.LongMsg ? $.lang.get('chatmoderator.silenttimeout.long.messages.true') : $.lang.get('chatmoderator.silenttimeout.long.messages.false')));
$.log.event(sender + ' changed silent timeout moderation for long messages to ' + args[2]);
return;
}
} else if (subAction.equalsIgnoreCase('all')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.silenttimeout.usage.all'));
return;
}
var toggle = args[2].equalsIgnoreCase('true');
if (args[2].equalsIgnoreCase('true') || args[2].equalsIgnoreCase('false')) {
silentTimeout.Links = toggle;
silentTimeout.Caps = toggle;
silentTimeout.Symbols = toggle;
silentTimeout.Spam = toggle;
silentTimeout.Colors = toggle;
silentTimeout.LongMsg = toggle;
silentTimeout.Emotes = toggle;
silentTimeout.SpamTracker = toggle;
$.inidb.set('chatModerator', 'silentTimeoutLinks', silentTimeout.Links);
$.inidb.set('chatModerator', 'silentTimeoutCaps', silentTimeout.Caps);
$.inidb.set('chatModerator', 'silentTimeoutSymbols', silentTimeout.Symbols);
$.inidb.set('chatModerator', 'silentTimeoutSpam', silentTimeout.Spam);
$.inidb.set('chatModerator', 'silentTimeoutEmotes', silentTimeout.Emotes);
$.inidb.set('chatModerator', 'silentTimeoutLongMsg', silentTimeout.LongMsg);
$.inidb.set('chatModerator', 'silentTimeoutColors', silentTimeout.Colors);
$.inidb.set('chatModerator', 'silentTimeoutSpamTacker', silentTimeout.SpamTracker);
$.inidb.set('chatModerator', 'silentTimeoutFakePurge', silentTimeout.FakePurge);
$.say($.whisperPrefix(sender) + (toggle ? $.lang.get('chatmoderator.silenttimeout.true') : $.lang.get('chatmoderator.silenttimeout.false')));
}
}
}
/**
* @commandpath moderation warningtime [links / caps / symbols / spam / emotes / colors / longmessages / spamtracker / fakepurge] [time in seconds] - Sets a warning time for a filter. This is when the user gets timed out for the first time
*/
if (action.equalsIgnoreCase('warningtime')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.usage'));
return;
}
if (subAction.equalsIgnoreCase('links')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.links.usage', warningTime.Links));
return;
}
warningTime.Links = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeLinks', warningTime.Links);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.links', warningTime.Links));
$.log.event(sender + ' changed warning time for links to: ' + warningTime.Links);
} else if (subAction.equalsIgnoreCase('caps')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.caps.usage', warningTime.Caps));
return;
}
warningTime.Caps = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeCaps', warningTime.Caps);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.caps', warningTime.Caps));
$.log.event(sender + ' changed warning time for caps to: ' + warningTime.Caps);
} else if (subAction.equalsIgnoreCase('symbols')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.symbols.usage', warningTime.Symbols));
return;
}
warningTime.Symbols = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeSymbols', warningTime.Symbols);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.symbols', warningTime.Symbols));
$.log.event(sender + ' changed warning time for symbols to: ' + warningTime.Symbols);
} else if (subAction.equalsIgnoreCase('spam')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.spam.usage', warningTime.Spam));
return;
}
warningTime.Spam = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeSpam', warningTime.Spam);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.spam', warningTime.Spam));
$.log.event(sender + ' changed warning time for spam to: ' + warningTime.Spam);
} else if (subAction.equalsIgnoreCase('emotes')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.emotes.usage', warningTime.Emotes));
return;
}
warningTime.Emotes = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeEmotes', warningTime.Emotes);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.emotes', warningTime.Emotes));
$.log.event(sender + ' changed warning time for emotes to: ' + warningTime.Emotes);
} else if (subAction.equalsIgnoreCase('colors')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.colors.usage', warningTime.Colors));
return;
}
warningTime.Colors = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeColors', warningTime.Colors);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.colors', warningTime.Colors));
$.log.event(sender + ' changed warning time for colors to: ' + warningTime.Colors);
} else if (subAction.equalsIgnoreCase('longmessages')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.longmsg.usage', warningTime.LongMsg));
return;
}
warningTime.LongMsg = parseInt(args[2]);
$.inidb.set('chatModerator', 'warningTimeLongMsg', warningTime.LongMsg);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningtime.longmsg', warningTime.LongMsg));
$.log.event(sender + ' changed warning time for longmsg to: ' + warningTime.LongMsg);
}
}
/**
* @commandpath moderation timeouttime [links / caps / symbols / spam / emotes / colors / longmessages / spamtracker / fakepurge] [time in seconds] - Sets a timeout time for a filter. This is when a user gets timed out the for the second time
*/
if (action.equalsIgnoreCase('timeouttime')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.usage'));
return;
}
if (subAction.equalsIgnoreCase('links')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.links.usage', timeoutTime.Links));
return;
}
timeoutTime.Links = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeLinks', timeoutTime.Links);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.links', timeoutTime.Links));
$.log.event(sender + ' changed timeout time for links to: ' + timeoutTime.Links);
} else if (subAction.equalsIgnoreCase('caps')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.caps.usage', timeoutTime.Caps));
return;
}
timeoutTime.Caps = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeCaps', timeoutTime.Caps);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.caps', timeoutTime.Caps));
$.log.event(sender + ' changed timeout time for caps to: ' + timeoutTime.Caps);
} else if (subAction.equalsIgnoreCase('symbols')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.symbols.usage', timeoutTime.Symbols));
return;
}
timeoutTime.Symbols = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeSymbols', timeoutTime.Symbols);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.symbols', timeoutTime.Symbols));
$.log.event(sender + ' changed timeout time for symbols to: ' + timeoutTime.Symbols);
} else if (subAction.equalsIgnoreCase('spam')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.spam.usage', timeoutTime.Spam));
return;
}
timeoutTime.Spam = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeSpam', timeoutTime.Spam);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.spam', timeoutTime.Spam));
$.log.event(sender + ' changed timeout time for spam to: ' + timeoutTime.Spam);
} else if (subAction.equalsIgnoreCase('emotes')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.emotes.usage', timeoutTime.Emotes));
return;
}
timeoutTime.Emotes = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeEmotes', timeoutTime.Emotes);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.emotes', timeoutTime.Emotes));
$.log.event(sender + ' changed timeout time for emotes to: ' + timeoutTime.Emotes);
} else if (subAction.equalsIgnoreCase('colors')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.colors.usage', timeoutTime.Colors));
return;
}
timeoutTime.Colors = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeColors', timeoutTime.Colors);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.colors', timeoutTime.Colors));
$.log.event(sender + ' changed timeout time for colors to: ' + timeoutTime.Colors);
} else if (subAction.equalsIgnoreCase('longmessages')) {
if (!args[2]) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.longmsg.usage', timeoutTime.LongMsg));
return;
}
timeoutTime.LongMsg = parseInt(args[2]);
$.inidb.set('chatModerator', 'timeoutTimeLongMsg', timeoutTime.LongMsg);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.timeouttime.longmsg', timeoutTime.LongMsg));
$.log.event(sender + ' changed timeout time for longmsg to: ' + timeoutTime.LongMsg);
}
}
/**
* @commandpath moderation linksmessage [message] - Sets the link warning message
*/
if (action.equalsIgnoreCase('linksmessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.link.message.usage'));
return;
}
linksMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'linksMessage', linksMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.link.message.set', linksMessage));
$.log.event(sender + ' changed the links warning message to "' + linksMessage + '"');
return;
}
/**
* @commandpath moderation capsmessage [message] - Sets the cap warning message
*/
if (action.equalsIgnoreCase('capsmessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.caps.message.usage'));
return;
}
capsMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'capsMessage', capsMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.caps.message.set', capsMessage));
$.log.event(sender + ' changed the caps warning message to "' + capsMessage + '"');
return;
}
/**
* @commandpath moderation symbolsmessage [message] - Sets the symbols warning message
*/
if (action.equalsIgnoreCase('symbolsmessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.message.usage'));
return;
}
symbolsMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'symbolsMessage', symbolsMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.message.set', symbolsMessage));
$.log.event(sender + ' changed the symbols warning message to "' + symbolsMessage + '"');
return;
}
/**
* @commandpath moderation emotesmessage [message] - Sets the emotes warning message
*/
if (action.equalsIgnoreCase('emotesmessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.emotes.message.usage'));
return;
}
emotesMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'emotesMessage', emotesMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.emotes.message.set', emotesMessage));
$.log.event(sender + ' changed the emotes warning message to "' + emotesMessage + '"');
return;
}
/**
* @commandpath moderation colorsmessage [message] - Sets the color warning message
*/
if (action.equalsIgnoreCase('colorsmessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.colors.message.usage'));
return;
}
colorsMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'colorsMessage', colorsMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.colors.message.set', colorsMessage));
$.log.event(sender + ' changed the colors warning message to "' + colorsMessage + '"');
return;
}
/**
* @commandpath moderation longmsgmessage [message] - Sets the long message warning message
*/
if (action.equalsIgnoreCase('longmsgmessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.message.message.usage'));
return;
}
longMessageMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'longMessageMessage', longMessageMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.message.message.set', longMessageMessage));
$.log.event(sender + ' changed the long messages warning message to "' + longMessageMessage + '"');
return;
}
/**
* @commandpath moderation spammessage [message] - Sets the spam warning message
*/
if (action.equalsIgnoreCase('spammessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spam.message.usage'));
return;
}
spamMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'spamMessage', spamMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spam.message.set', spamMessage));
$.log.event(sender + ' changed the spam warning message to "' + spamMessage + '"');
return;
}
/**
* @commandpath moderation blacklistmessage [message] - Sets the blacklist warning message that will be default for blacklists you add from chat. This can be custom on the panel.
*/
if (action.equalsIgnoreCase('blacklistmessage')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklist.message.usage'));
return;
}
blacklistMessage = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'blacklistMessage', blacklistMessage);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklist.message.set', blacklistMessage));
$.log.event(sender + ' changed the blacklist warning message to "' + blacklistMessage + '"');
return;
}
/**
* @commandpath moderation blacklistmessageban [message] - Sets the blacklist ban message that will be default for blacklists you add from chat. This can be custom on the panel.
*/
if (action.equalsIgnoreCase('blacklistmessageban')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklistban.message.usage'));
return;
}
blacklistMessageBan = argString.replace(action, '').trim();
$.inidb.set('chatModerator', 'blacklistMessageBan', blacklistMessageBan);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.blacklistban.message.set', blacklistMessageBan));
$.log.event(sender + ' changed the blacklist ban message to "' + blacklistMessageBan + '"');
return;
}
/**
* @commandpath moderation permittime [seconds] - Sets the permit time in seconds
*/
if (action.equalsIgnoreCase('permittime')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.permit.time.usage'));
return;
}
linkPermitTime = parseInt(subAction);
$.inidb.set('chatModerator', 'linkPermitTime', linkPermitTime);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.permit.time.set', linkPermitTime));
$.log.event(sender + ' changed the link permit time to ' + linkPermitTime + ' seconds');
return;
}
/**
* @commandpath moderation capslimit [amount] - Sets the amount (in percent) of caps allowed in a message
*/
if (action.equalsIgnoreCase('capslimit')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.caps.limit.usage'));
return;
}
capsLimitPercent = parseFloat(subAction);
$.inidb.set('chatModerator', 'capsLimitPercent', capsLimitPercent);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.caps.limit.set', capsLimitPercent));
$.log.event(sender + ' changed the caps limit to ' + capsLimitPercent);
return;
}
/**
* @commandpath moderation capstriggerlength [amount] - Sets the minimum amount of charaters before checking for caps
*/
if (action.equalsIgnoreCase('capstriggerlength')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.caps.trigger.length.usage'));
return;
}
capsTriggerLength = parseInt(subAction);
$.inidb.set('chatModerator', 'capsTriggerLength', capsTriggerLength);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.caps.trigger.length.set', capsTriggerLength));
$.log.event(sender + ' changed the caps trigger length to ' + capsTriggerLength);
return;
}
/**
* @commandpath moderation spamlimit [amount] - Sets the amount of repeating charaters allowed in a message
*/
if (action.equalsIgnoreCase('spamlimit')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spam.limit.usage'));
return;
}
spamLimit = parseInt(subAction);
$.inidb.set('chatModerator', 'spamLimit', spamLimit);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.spam.limit.set', spamLimit));
$.log.event(sender + ' changed the spam limit to ' + spamLimit);
return;
}
/**
* @commandpath moderation symbolslimit [amount] - Sets the amount (in percent) of symbols allowed in a message
*/
if (action.equalsIgnoreCase('symbolslimit')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.limit.usage'));
return;
}
symbolsLimitPercent = parseFloat(subAction);
$.inidb.set('chatModerator', 'symbolsLimitPercent', symbolsLimitPercent);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.limit.set', symbolsLimitPercent));
$.log.event(sender + ' changed the symbols limit to ' + symbolsLimitPercent);
return;
}
/**
* @commandpath moderation symbolsgrouplimit [amount] - Sets the max amount of grouped symbols allowed in a message
*/
if (action.equalsIgnoreCase('symbolsgrouplimit')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.group.limit.usage'));
return;
}
symbolsGroupLimit = parseInt(subAction);
$.inidb.set('chatModerator', 'symbolsGroupLimit', symbolsGroupLimit);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.group.limit.set', symbolsGroupLimit));
$.log.event(sender + ' changed the symbols group limit to ' + symbolsGroupLimit);
return;
}
/**
* @commandpath moderation symbolstriggerlength [amount] - Sets the minimum amount of charaters before checking for symbols
*/
if (action.equalsIgnoreCase('symbolsTriggerLength')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.trigger.length.usage'));
return;
}
symbolsTriggerLength = parseInt(subAction);
$.inidb.set('chatModerator', 'symbolsTriggerLength', symbolsTriggerLength);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.symbols.trigger.length.set', symbolsTriggerLength));
$.log.event(sender + ' changed the symbols trigger length to ' + symbolsTriggerLength);
return;
}
/**
* @commandpath moderation emoteslimit [amount] - Sets the amount of emotes allowed in a message
*/
if (action.equalsIgnoreCase('emoteslimit')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.emotes.limit.usage'));
return;
}
emotesLimit = parseInt(subAction);
$.inidb.set('chatModerator', 'emotesLimit', emotesLimit);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.emotes.limit.set', emotesLimit));
return;
}
/**
* @commandpath moderation messagecharacterlimit [amount] - Sets the amount of characters allowed in a message
*/
if (action.equalsIgnoreCase('messagecharacterlimit')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.message.limit.usage'));
return;
}
longMessageLimit = parseInt(subAction);
$.inidb.set('chatModerator', 'longMessageLimit', longMessageLimit);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.message.limit.set', longMessageLimit));
return;
}
/**
* @commandpath moderation messagecooldown [seconds] - Sets a cooldown in seconds on the timeout messages (minimum is 30 seconds)
*/
if (action.equalsIgnoreCase('messagecooldown')) {
if (!subAction || parseInt(subAction) < 30) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.msgcooldown.usage'));
return;
}
msgCooldownSec = parseInt(subAction);
$.inidb.set('chatModerator', 'msgCooldownSecs', msgCooldownSec);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.msgcooldown.set', msgCooldownSec));
}
/**
* @commandpath moderation warningresettime [seconds] - Sets how long a user stays on his first offence for (there are 2 offences). Default is 60 minutes (minimum is 30 minutes)
*/
if (action.equalsIgnoreCase('warningresettime')) {
if (!subAction) {
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningresettime.usage'));
return;
}
warningResetTime = parseInt(subAction);
$.inidb.set('chatModerator', 'warningResetTime', warningResetTime);
$.say($.whisperPrefix(sender) + $.lang.get('chatmoderator.warningresettime.set', warningResetTime));
}
}
});
/**
* @event initReady
*/
$.bind('initReady', function() {
loadWhiteList();
loadBlackList();
$.registerChatCommand('./core/chatModerator.js', 'permit', 2);
$.registerChatCommand('./core/chatModerator.js', 'moderation', 1);
$.registerChatCommand('./core/chatModerator.js', 'mod', 1);
$.registerChatCommand('./core/chatModerator.js', 'blacklist', 1);
$.registerChatCommand('./core/chatModerator.js', 'whitelist', 1);
});
/** Export functions to API */
$.performModeration = performModeration;
$.timeoutUser = timeoutUserFor;
$.permitUserLink = permitUser;
$.reloadModeration = reloadModeration;
})();