init commit
This commit is contained in:
447
libs/phantombot/scripts/systems/queueSystem.js
Normal file
447
libs/phantombot/scripts/systems/queueSystem.js
Normal file
@@ -0,0 +1,447 @@
|
||||
/*
|
||||
* 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 isOpened = false,
|
||||
info = {},
|
||||
queue = {};
|
||||
|
||||
/*
|
||||
* @function open
|
||||
*
|
||||
* @param {String} username
|
||||
* @param {Number} size
|
||||
* @param {String} title
|
||||
*/
|
||||
function open(username, size, title) {
|
||||
if (isOpened === true) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.open.error.opened'));
|
||||
return;
|
||||
} else if (size === undefined || isNaN(parseInt(size))) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.open.error.usage'));
|
||||
return;
|
||||
} else if (title === undefined) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.open.usage'));
|
||||
return;
|
||||
} else if (Object.keys(queue).length !== 0) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.open.error.clear'));
|
||||
return;
|
||||
}
|
||||
|
||||
info = {
|
||||
size: parseInt(size),
|
||||
time: new Date(),
|
||||
title: title
|
||||
};
|
||||
|
||||
if (parseInt(size) === 0) {
|
||||
$.say($.lang.get('queuesystem.open.normal', title));
|
||||
} else {
|
||||
$.say($.lang.get('queuesystem.open.limit', size, title));
|
||||
}
|
||||
isOpened = true;
|
||||
$.inidb.set('queueSettings', 'isActive', 'true');
|
||||
}
|
||||
|
||||
/*
|
||||
* @function close
|
||||
*
|
||||
* @param {String} username
|
||||
*/
|
||||
function close(username) {
|
||||
if (isOpened === false) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.close.error'));
|
||||
return;
|
||||
}
|
||||
|
||||
$.say($.lang.get('queuesystem.close.success'));
|
||||
isOpened = false;
|
||||
$.inidb.set('queueSettings', 'isActive', 'false');
|
||||
}
|
||||
|
||||
/*
|
||||
* @function clear
|
||||
*
|
||||
* @param {String} username
|
||||
*/
|
||||
function clear(username) {
|
||||
queue = {};
|
||||
info = {};
|
||||
isOpened = false;
|
||||
$.inidb.RemoveFile('queue');
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.clear.success'));
|
||||
}
|
||||
|
||||
/*
|
||||
* @function join
|
||||
*
|
||||
* @param {String} username
|
||||
* @param {String} action
|
||||
*/
|
||||
function join(username, action, command) {
|
||||
if (queue[username] !== undefined) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.join.error.joined'));
|
||||
$.returnCommandCost(username, command, $.isMod(username));
|
||||
return;
|
||||
} else if (info.size !== 0 && (info.size <= Object.keys(queue).length)) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.join.error.full'));
|
||||
$.returnCommandCost(username, command, $.isMod(username));
|
||||
return;
|
||||
} else if (isOpened === false) {
|
||||
$.returnCommandCost(username, command, $.isMod(username));
|
||||
return;
|
||||
}
|
||||
|
||||
queue[username] = {
|
||||
tag: (action === undefined ? '' : action),
|
||||
position: Object.keys(queue).length,
|
||||
time: new Date(),
|
||||
username: username
|
||||
};
|
||||
|
||||
var temp = {
|
||||
'tag': String((action === undefined ? '' : action)),
|
||||
'time': String(date(new Date(), true)),
|
||||
'position': String(Object.keys(queue).length),
|
||||
'username': String(username)
|
||||
};
|
||||
$.inidb.set('queue', username, JSON.stringify(temp));
|
||||
}
|
||||
|
||||
/*
|
||||
* @function remove
|
||||
*
|
||||
* @param {String} username
|
||||
* @param {String} action
|
||||
*/
|
||||
function remove(username, action) {
|
||||
if (action === undefined) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.remove.usage'));
|
||||
return;
|
||||
} else if (queue[action.toLowerCase()] === undefined) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.remove.404'));
|
||||
return;
|
||||
}
|
||||
|
||||
delete queue[action.toLowerCase()];
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.remove.removed', action));
|
||||
}
|
||||
|
||||
/*
|
||||
* @function stats
|
||||
*
|
||||
* @param {String} username
|
||||
*/
|
||||
function stats(username) {
|
||||
if (isOpened === true) {
|
||||
$.say($.lang.get('queuesystem.info.success', info.title, Object.keys(queue).length, info.size, date(info.time)));
|
||||
} else {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.close.error'));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @function date
|
||||
*
|
||||
* @param {Number} time
|
||||
* @return {String}
|
||||
*/
|
||||
function date(time, simple) {
|
||||
var date = new Date(time),
|
||||
format = new java.text.SimpleDateFormat('HH:mm:ss z'),
|
||||
seconds = Math.floor((new Date() - time) / 1000),
|
||||
string = $.getTimeString(seconds);
|
||||
|
||||
format.setTimeZone(java.util.TimeZone.getTimeZone(($.inidb.exists('settings', 'timezone') ? $.inidb.get('settings', 'timezone') : 'GMT')));
|
||||
if (simple === undefined) {
|
||||
return format.format(date) + ' ' + $.lang.get('queuesystem.time.info', string);
|
||||
} else {
|
||||
return format.format(date);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @function position
|
||||
*
|
||||
* @param {String} username
|
||||
* @param {String} action
|
||||
*/
|
||||
function position(username, action) {
|
||||
if (action === undefined) {
|
||||
if (queue[username] !== undefined) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.position.self', queue[username].position, date(queue[username].time)));
|
||||
} else {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.position.self.error'));
|
||||
}
|
||||
} else {
|
||||
action = action.toLowerCase();
|
||||
if (queue[action] !== undefined) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.position.other', action, queue[action].position, date(queue[action].time)));
|
||||
} else {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.position.other.error', action));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @function list
|
||||
*
|
||||
* @param {String} username
|
||||
*/
|
||||
function list(username) {
|
||||
var keys = Object.keys(queue),
|
||||
temp = [],
|
||||
id = 1,
|
||||
i;
|
||||
|
||||
for (i in keys) {
|
||||
temp.push('#' + (id++) + ': ' + queue[keys[i]].username);
|
||||
}
|
||||
|
||||
if (temp.length !== 0) {
|
||||
if (temp.length < 10) {
|
||||
$.say($.lang.get('queuesystem.queue.list', temp.join(', ')));
|
||||
} else {
|
||||
$.say($.lang.get('queuesystem.queue.list.limited', temp.splice(0, 5).join(', '), (temp.length - 5)));
|
||||
}
|
||||
} else {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.queue.list.empty'));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @function next
|
||||
*
|
||||
* @param {String} username
|
||||
* @param {String} action
|
||||
*/
|
||||
function next(username, action) {
|
||||
var total = (action === undefined || isNaN(parseInt(action)) ? 1 : parseInt(action)),
|
||||
keys = Object.keys(queue),
|
||||
temp = [],
|
||||
t = 1,
|
||||
i;
|
||||
|
||||
for (i in keys) {
|
||||
if (total >= t && temp.length < 400) {
|
||||
temp.push('#' + t + ': ' + queue[keys[i]].username);
|
||||
t++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (temp.length !== 0) {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.queue.next', temp.join(', ')));
|
||||
} else {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.queue.list.empty'));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @function resetPosition
|
||||
*/
|
||||
function resetPosition(splice) {
|
||||
var keys = Object.keys(queue),
|
||||
t = 0,
|
||||
i;
|
||||
|
||||
for (i in keys) {
|
||||
if (splice !== -1 && t <= splice) {
|
||||
$.inidb.del('queue', keys[i]);
|
||||
delete queue[keys[i]];
|
||||
}
|
||||
t++;
|
||||
}
|
||||
|
||||
keys = Object.keys(queue);
|
||||
t = 1;
|
||||
|
||||
for (i in keys) {
|
||||
queue[keys[i]].position = t;
|
||||
var temp = JSON.parse($.inidb.get('queue', keys[i]));
|
||||
temp.position = t;
|
||||
$.inidb.set('queue', keys[i], JSON.stringify(temp));
|
||||
t++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* @function pick
|
||||
*
|
||||
* @param {String} username
|
||||
* @param {String} action
|
||||
*/
|
||||
function pick(username, action) {
|
||||
var total = (action === undefined || isNaN(parseInt(action)) ? 1 : parseInt(action)),
|
||||
keys = Object.keys(queue),
|
||||
temp = [],
|
||||
t = 1,
|
||||
i;
|
||||
|
||||
for (i in keys) {
|
||||
if (total >= t && temp.length < 400) {
|
||||
temp.push('#' + t + ': ' + queue[keys[i]].username + (queue[keys[i]].tag !== '' ? ' ' + $.lang.get('queuesystem.gamertag', queue[keys[i]].tag) : ''));
|
||||
t++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (temp.length !== 0) {
|
||||
$.say($.lang.get('queuesystem.pick', temp.join(', ')));
|
||||
} else {
|
||||
$.say($.whisperPrefix(username) + $.lang.get('queuesystem.queue.list.empty'));
|
||||
}
|
||||
|
||||
resetPosition(t - 2);
|
||||
}
|
||||
|
||||
/*
|
||||
* @event command
|
||||
*/
|
||||
$.bind('command', function(event) {
|
||||
var sender = event.getSender(),
|
||||
command = event.getCommand(),
|
||||
args = event.getArgs(),
|
||||
action = args[0],
|
||||
subAction = args[1];
|
||||
|
||||
if (command.equalsIgnoreCase('queue')) {
|
||||
if (action === undefined) {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('queuesystem.usage'));
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue open [max size] [title] - Opens a new queue. Max size is optional.
|
||||
*/
|
||||
if (action.equalsIgnoreCase('open')) {
|
||||
open(sender, (isNaN(parseInt(subAction)) ? 0 : subAction), (isNaN(parseInt(subAction)) ? args.slice(1).join(' ') : args.slice(2).join(' ')));
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue close - Closes the current queue that is opened.
|
||||
*/
|
||||
else if (action.equalsIgnoreCase('close')) {
|
||||
close(sender);
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue clear - Closes and resets the current queue.
|
||||
*/
|
||||
else if (action.equalsIgnoreCase('clear')) {
|
||||
clear(sender);
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue remove [username] - Removes that username from the queue.
|
||||
*/
|
||||
else if (action.equalsIgnoreCase('remove')) {
|
||||
remove(sender, subAction);
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue list - Gives you the current queue list. Note that if the queue list is very long it will only show the first 5 users in the queue.
|
||||
*/
|
||||
else if (action.equalsIgnoreCase('list')) {
|
||||
list(sender);
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue next [amount] - Shows the players that are to be picked next. Note if the amount is not specified it will only show one.
|
||||
*/
|
||||
else if (action.equalsIgnoreCase('next')) {
|
||||
next(sender, subAction);
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue pick [amount] - Picks the players next in line from the queue. Note if the amount is not specified it will only pick one.
|
||||
*/
|
||||
else if (action.equalsIgnoreCase('pick')) {
|
||||
pick(sender, subAction);
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue position [username] - Tells what position that user is in the queue and at what time he joined.
|
||||
*/
|
||||
else if (action.equalsIgnoreCase('position')) {
|
||||
position(sender, subAction);
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath queue info - Gives you the current information about the queue that is opened
|
||||
*/
|
||||
else if (action.equalsIgnoreCase('info')) {
|
||||
stats(sender);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @commandpath joinqueue [gamertag] - Adds you to the current queue. Note that the gamertag part is optional.
|
||||
*/
|
||||
if (command.equalsIgnoreCase('joinqueue')) {
|
||||
join(sender, args.join(' '), command);
|
||||
}
|
||||
});
|
||||
|
||||
$.bind('initReady', function() {
|
||||
$.registerChatCommand('./systems/queueSystem.js', 'joinqueue', 7);
|
||||
$.registerChatCommand('./systems/queueSystem.js', 'queue', 7);
|
||||
|
||||
$.registerChatSubcommand('queue', 'open', 1);
|
||||
$.registerChatSubcommand('queue', 'close', 1);
|
||||
$.registerChatSubcommand('queue', 'clear', 1);
|
||||
$.registerChatSubcommand('queue', 'remove', 1);
|
||||
$.registerChatSubcommand('queue', 'pick', 1);
|
||||
$.registerChatSubcommand('queue', 'list', 7);
|
||||
$.registerChatSubcommand('queue', 'next', 7);
|
||||
$.registerChatSubcommand('queue', 'info', 7);
|
||||
$.registerChatSubcommand('queue', 'position', 7);
|
||||
|
||||
$.inidb.set('queueSettings', 'isActive', 'false');
|
||||
});
|
||||
|
||||
/**
|
||||
* @event webPanelSocketUpdate
|
||||
*/
|
||||
$.bind('webPanelSocketUpdate', function(event) {
|
||||
if (event.getScript().equalsIgnoreCase('./systems/queueSystem.js')) {
|
||||
var action = event.getArgs()[0];
|
||||
|
||||
if (action.equalsIgnoreCase('open')) {
|
||||
open($.channelName, event.getArgs()[1], event.getArgs().slice(2).join(' '));
|
||||
} else if (action.equalsIgnoreCase('close')) {
|
||||
close($.channelName);
|
||||
} else if (action.equalsIgnoreCase('pick')) {
|
||||
pick($.channelName, event.getArgs()[1]);
|
||||
} else if (action.equalsIgnoreCase('remove')) {
|
||||
if (event.getArgs()[1] !== undefined && queue[event.getArgs()[1]] !== undefined) {
|
||||
delete queue[event.getArgs()[1].toLowerCase()];
|
||||
$.inidb.del('queue', event.getArgs()[1].toLowerCase());
|
||||
resetPosition(-1);
|
||||
}
|
||||
} else if (action.equalsIgnoreCase('clear')) {
|
||||
queue = {};
|
||||
info = {};
|
||||
isOpened = false;
|
||||
$.inidb.RemoveFile('queue');
|
||||
}
|
||||
}
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user