init commit

This commit is contained in:
zino
2021-02-16 23:07:41 +01:00
parent ec3fc78e0f
commit 12b4ef5db4
5000 changed files with 2596132 additions and 0 deletions

View File

@@ -0,0 +1,358 @@
/*
* 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/>.
*/
/*
* commandCoolDown.js
*
* Manage cooldowns for commands
*
* To use the cooldown in other scipts use the $.coolDown API
*/
(function() {
var defaultCooldownTime = $.getSetIniDbNumber('cooldownSettings', 'defaultCooldownTime', 5),
modCooldown = $.getSetIniDbBoolean('cooldownSettings', 'modCooldown', false),
defaultCooldowns = {},
cooldowns = {};
$.raffleCommand = null;
/*
* @class Cooldown
*
* @param {String} command
* @param {Number} seconds
* @param {Boolean} isGlobal
*/
function Cooldown(command, seconds, isGlobal) {
this.isGlobal = isGlobal;
this.command = command;
this.seconds = seconds;
this.cooldowns = [];
this.time = 0;
}
/*
* @function loadCooldowns
*/
function loadCooldowns() {
var commands = $.inidb.GetKeyList('cooldown', ''),
json,
i;
for (i in commands) {
json = JSON.parse($.inidb.get('cooldown', commands[i]));
cooldowns[commands[i]] = new Cooldown(json.command, json.seconds, json.isGlobal.toString().equals('true'));
}
}
/*
* @function canIgnore
*
* @param {String} username
* @param {Boolean} isMod
* @return {Boolean}
*/
function canIgnore(username, isMod) {
return (!modCooldown && isMod) || $.isAdmin(username);
}
/*
* @function isSpecial
*
* @param {String} command
* @return {Boolean}
*/
function isSpecial(command) {
return command == 'bet' ||
command == 'tickets' ||
command == 'bid' ||
command == 'adventure' ||
command == 'vote' ||
command == 'joinqueue' ||
command == $.raffleCommand;
}
/*
* @function get
*
* @export $.coolDown
* @param {String} command
* @param {String} username
* @param {Boolean} isMod
* @return {Number}
*/
function get(command, username, isMod) {
var cooldown = cooldowns[command];
if (isSpecial(command)) {
if (command == 'adventure' && defaultCooldowns[command] !== undefined && defaultCooldowns[command] > $.systemTime()) {
return defaultCooldowns[command];
} else {
return 0;
}
} else {
if (cooldown !== undefined && cooldown.seconds > 0) {
if (cooldown.isGlobal) {
if (cooldown.time > $.systemTime()) {
return (canIgnore(username, isMod) ? 0 : cooldown.time);
} else {
return set(command, true, cooldown.seconds, isMod);
}
} else {
if (cooldown.cooldowns[username] !== undefined && cooldown.cooldowns[username] > $.systemTime()) {
return (canIgnore(username, isMod) ? 0 : cooldown.cooldowns[username]);
} else {
return set(command, true, cooldown.seconds, isMod, username);
}
}
} else {
if (defaultCooldowns[command] !== undefined && defaultCooldowns[command] > $.systemTime()) {
return (canIgnore(username, isMod) ? 0 : defaultCooldowns[command]);
} else {
return set(command, false, defaultCooldownTime, isMod);
}
}
}
}
/*
* @function getSecs
*
* @export $.coolDown
* @param {String} command
* @param {String} username
* @return {Number}
*/
function getSecs(username, command, isMod) {
var cooldown = cooldowns[command];
if (cooldown !== undefined && cooldown.seconds > 0) {
if (cooldown.isGlobal) {
if (cooldown.time > $.systemTime()) {
return (cooldown.time - $.systemTime() > 1000 ? Math.ceil(((cooldown.time - $.systemTime()) / 1000)) : 1);
} else {
return set(command, true, cooldown.seconds, isMod);
}
} else {
if (cooldown.cooldowns[username] !== undefined && cooldown.cooldowns[username] > $.systemTime()) {
return (cooldown.cooldowns[username] - $.systemTime() > 1000 ? Math.ceil(((cooldown.cooldowns[username] - $.systemTime()) / 1000)) : 1);
}
}
} else {
if (defaultCooldowns[command] !== undefined && defaultCooldowns[command] > $.systemTime()) {
return (defaultCooldowns[command] - $.systemTime() > 1000 ? Math.ceil(((defaultCooldowns[command] - $.systemTime()) / 1000)) : 1);
} else {
return set(command, false, defaultCooldownTime, isMod);
}
}
return 0;
}
/*
* @function set
*
* @export $.coolDown
* @param {String} command
* @param {Boolean} hasCooldown
* @param {Number} seconds
* @param {Boolean} isMod
* @param {String} username
* @return {Number}
*/
function set(command, hasCooldown, seconds, isMod, username) {
seconds = (seconds > 0 ? ((parseInt(seconds) * 1e3) + $.systemTime()) : 0);
if (hasCooldown) {
if (username === undefined) {
cooldowns[command].time = seconds;
} else {
cooldowns[command].cooldowns[username] = seconds;
}
} else {
defaultCooldowns[command] = seconds;
}
return 0;
}
/*
* @function add
*
* @export $.coolDown
* @param {String} command
* @param {Number} seconds
* @param {Boolean} isGlobal
*/
function add(command, seconds, isGlobal) {
// Make sure we have the right type.
if (typeof seconds !== 'number') {
seconds = (parseInt(seconds + ''));
}
if (cooldowns[command] === undefined) {
cooldowns[command] = new Cooldown(command, seconds, isGlobal);
$.inidb.set('cooldown', command, JSON.stringify({
command: String(command),
seconds: String(seconds),
isGlobal: String(isGlobal)
}));
} else {
cooldowns[command].isGlobal = isGlobal;
cooldowns[command].seconds = seconds;
$.inidb.set('cooldown', command, JSON.stringify({
command: String(command),
seconds: String(seconds),
isGlobal: String(isGlobal)
}));
}
}
/*
* @function remove
*
* @export $.coolDown
* @param {String} command
*/
function remove(command) {
$.inidb.del('cooldown', command);
if (cooldowns[command] !== undefined) {
delete cooldowns[command];
}
}
/*
* @function clear
*
* @export $.coolDown
* @param {String} command
*/
function clear(command) {
if (cooldowns[command] !== undefined) {
cooldowns[command].time = 0;
}
}
/*
* @event command
*/
$.bind('command', function(event) {
var sender = event.getSender(),
command = event.getCommand(),
args = event.getArgs(),
action = args[0],
subAction = args[1],
actionArgs = args[2];
/*
* @commandpath coolcom [command] [seconds] [type (global / user)] - Sets a cooldown for a command, default is global. Using -1 for the seconds removes the cooldown.
*/
if (command.equalsIgnoreCase('coolcom')) {
if (action === undefined || isNaN(parseInt(subAction))) {
$.say($.whisperPrefix(sender) + $.lang.get('cooldown.coolcom.usage'));
return;
}
actionArgs = (actionArgs !== undefined && actionArgs == 'user' ? false : true);
action = action.replace('!', '').toLowerCase();
subAction = parseInt(subAction);
if (subAction > -1) {
$.say($.whisperPrefix(sender) + $.lang.get('cooldown.coolcom.set', action, subAction));
add(action, subAction, actionArgs);
} else {
$.say($.whisperPrefix(sender) + $.lang.get('cooldown.coolcom.remove', action));
remove(action);
}
clear(command);
return;
}
if (command.equalsIgnoreCase('cooldown')) {
if (action === undefined) {
$.say($.whisperPrefix(sender) + $.lang.get('cooldown.cooldown.usage'));
return;
}
/*
* @commandpath cooldown togglemoderators - Toggles if moderators ignore command cooldowns.
*/
if (action.equalsIgnoreCase('togglemoderators')) {
modCooldown = !modCooldown;
$.setIniDbBoolean('cooldownSettings', 'modCooldown', modCooldown);
$.say($.whisperPrefix(sender) + $.lang.get('cooldown.set.togglemodcooldown', (modCooldown ? $.lang.get('common.enabled') : $.lang.get('common.disabled'))));
return;
}
/*
* @commandpath cooldown setdefault [seconds] - Sets a default global cooldown for commands without a cooldown.
*/
if (action.equalsIgnoreCase('setdefault')) {
if (isNaN(parseInt(subAction))) {
$.say($.whisperPrefix(sender) + $.lang.get('cooldown.default.usage'));
return;
} else if (parseInt(subAction) < 5) {
$.say($.whisperPrefix(sender) + $.lang.get('cooldown.coolcom.err'));
return;
}
defaultCooldownTime = parseInt(subAction);
$.setIniDbNumber('cooldownSettings', 'defaultCooldownTime', defaultCooldownTime);
$.say($.whisperPrefix(sender) + $.lang.get('cooldown.default.set', defaultCooldownTime));
}
}
});
/*
* @event initReady
*/
$.bind('initReady', function() {
$.registerChatCommand('./core/commandCoolDown.js', 'coolcom', 1);
$.registerChatCommand('./core/commandCoolDown.js', 'cooldown', 1);
$.registerChatSubcommand('cooldown', 'togglemoderators', 1);
$.registerChatSubcommand('cooldown', 'setdefault', 1);
loadCooldowns();
});
/*
* @event webPanelSocketUpdate
*/
$.bind('webPanelSocketUpdate', function(event) {
if (event.getScript().equalsIgnoreCase('./core/commandCoolDown.js')) {
if (event.getArgs()[0] == 'add') {
add(event.getArgs()[1], event.getArgs()[2], event.getArgs()[3].equals('true'));
} else if (event.getArgs()[0] == 'update') {
defaultCooldownTime = $.getIniDbNumber('cooldownSettings', 'defaultCooldownTime', 5);
modCooldown = $.getIniDbBoolean('cooldownSettings', 'modCooldown', false);
} else {
remove(event.getArgs()[1]);
}
}
});
/* Export to the $. API */
$.coolDown = {
remove: remove,
clear: clear,
get: get,
set: set,
add: add,
getSecs: getSecs
};
})();