init commit
This commit is contained in:
202
libs/phantombot/scripts/systems/greetingSystem.js
Normal file
202
libs/phantombot/scripts/systems/greetingSystem.js
Normal file
@@ -0,0 +1,202 @@
|
||||
/*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* greetingSystem.js
|
||||
*
|
||||
* Tags in greetings:
|
||||
* - (name) The username corresponding to the target user
|
||||
*/
|
||||
(function() {
|
||||
var autoGreetEnabled = $.getSetIniDbBoolean('greeting', 'autoGreetEnabled', false),
|
||||
defaultJoinMessage = $.getSetIniDbString('greeting', 'defaultJoin', '(name) joined!'),
|
||||
greetingCooldown = $.getSetIniDbNumber('greeting', 'cooldown', (6 * 36e5)),
|
||||
/* 6 Hours */
|
||||
greetingQueue = new java.util.concurrent.ConcurrentLinkedQueue,
|
||||
lastAutoGreet = $.systemTime();
|
||||
|
||||
/**
|
||||
* @event ircChannelJoin
|
||||
*/
|
||||
$.bind('ircChannelJoin', function(event) {
|
||||
if ($.isOnline($.channelName) && autoGreetEnabled) {
|
||||
var sender = event.getUser().toLowerCase(),
|
||||
username = $.resolveRank(sender),
|
||||
message = $.getIniDbString('greeting', sender, ''),
|
||||
lastUserGreeting = $.getIniDbNumber('greetingCoolDown', sender, 0),
|
||||
now = $.systemTime();
|
||||
|
||||
if (lastUserGreeting + greetingCooldown < now) {
|
||||
if (message) {
|
||||
greetingQueue.add(message.replace('(name)', username));
|
||||
$.inidb.set('greetingCoolDown', sender, now);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @function doUserGreetings
|
||||
* Provides timer function for sending greetings into chat. Will delete messages if the
|
||||
* host disables autoGreetings in the middle of a loop. The reason for a delay is to
|
||||
* ensure that the output queue does not become overwhelmed.
|
||||
*/
|
||||
function doUserGreetings() {
|
||||
setInterval(function() {
|
||||
|
||||
/* Send a greeting out into chat. */
|
||||
if (!greetingQueue.isEmpty() && autoGreetEnabled) {
|
||||
$.say(greetingQueue.poll());
|
||||
}
|
||||
|
||||
/* There are greetings, however, autoGreet has been disabled, so destroy the queue. */
|
||||
if (!greetingQueue.isEmpty() && !autoGreetEnabled) {
|
||||
greetingQueue = new java.util.concurrent.ConcurrentLinkedQueue;
|
||||
}
|
||||
|
||||
}, 15000, 'scripts::systems::greetingSystem.js');
|
||||
}
|
||||
|
||||
/**
|
||||
* @function greetingspanelupdate
|
||||
*/
|
||||
function greetingspanelupdate() {
|
||||
autoGreetEnabled = $.getIniDbBoolean('greeting', 'autoGreetEnabled');
|
||||
defaultJoinMessage = $.getIniDbString('greeting', 'defaultJoin');
|
||||
greetingCooldown = $.getIniDbNumber('greeting', 'cooldown');
|
||||
}
|
||||
|
||||
/**
|
||||
* @event command
|
||||
*/
|
||||
$.bind('command', function(event) {
|
||||
var sender = event.getSender().toLowerCase(),
|
||||
command = event.getCommand(),
|
||||
args = event.getArgs(),
|
||||
action = args[0],
|
||||
cooldown,
|
||||
message;
|
||||
|
||||
/**
|
||||
* @commandpath greeting - Base command for controlling greetings.
|
||||
*/
|
||||
if (command.equalsIgnoreCase('greeting')) {
|
||||
if (!action) {
|
||||
if ($.isAdmin(sender)) {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.generalusage.admin'));
|
||||
} else {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.generalusage.other'));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @commandpath greeting cooldown [hours] - Cooldown in hours before displaying a greeting for a person rejoining chat.
|
||||
*/
|
||||
if (action.equalsIgnoreCase('cooldown')) {
|
||||
if (!args[1]) {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.cooldown.usage'));
|
||||
return;
|
||||
}
|
||||
cooldown = parseInt(args[1]);
|
||||
if (isNaN(cooldown)) {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.cooldown.usage'));
|
||||
return;
|
||||
}
|
||||
|
||||
greetingCooldown = cooldown * 36e5; // Convert hours to ms
|
||||
$.inidb.set('greeting', 'cooldown', greetingCooldown);
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.cooldown.success', cooldown));
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @commandpath greeting toggle - Enable/disable the greeting system.
|
||||
*/
|
||||
if (action.equalsIgnoreCase('toggle')) {
|
||||
autoGreetEnabled = !autoGreetEnabled;
|
||||
$.setIniDbBoolean('greeting', 'autoGreetEnabled', autoGreetEnabled);
|
||||
if (autoGreetEnabled) {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.set.autogreet.enabled', $.username.resolve($.botName)));
|
||||
} else {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.set.autogreet.disabled', $.username.resolve($.botName)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @commandpath greeting setdefault - Set the default greeting message
|
||||
*/
|
||||
if (action.equalsIgnoreCase('setdefault')) {
|
||||
message = args.splice(1, args.length - 1).join(' ');
|
||||
|
||||
if (!message) {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.generalusage.admin'));
|
||||
return;
|
||||
}
|
||||
|
||||
$.inidb.set('greeting', 'defaultJoin', message);
|
||||
defaultJoinMessage = message;
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.set.default.success', defaultJoinMessage));
|
||||
}
|
||||
|
||||
/**
|
||||
* @commandpath greeting enable [default | message] - Enable greetings and use the default or set a message.
|
||||
*/
|
||||
if (action.equalsIgnoreCase('enable')) {
|
||||
message = args.splice(1, args.length - 1).join(' ');
|
||||
|
||||
if (!message) {
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.generalusage.other'));
|
||||
return;
|
||||
}
|
||||
|
||||
if (message.equalsIgnoreCase('default')) {
|
||||
$.inidb.set('greeting', sender, defaultJoinMessage);
|
||||
} else {
|
||||
$.inidb.set('greeting', sender, message);
|
||||
}
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.set.personal.success', $.inidb.get('greeting', sender)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @commandpath greeting disable - Delete personal greeting and automated greeting at join
|
||||
*/
|
||||
if (action.equalsIgnoreCase('disable')) {
|
||||
if ($.inidb.exists('greeting', sender)) {
|
||||
$.inidb.del('greeting', sender);
|
||||
$.say($.whisperPrefix(sender) + $.lang.get('greetingsystem.remove.personal.success'));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @event initReady
|
||||
*/
|
||||
$.bind('initReady', function() {
|
||||
$.registerChatCommand('./systems/greetingSystem.js', 'greeting', 6);
|
||||
$.registerChatSubcommand('greeting', 'cooldown', 1);
|
||||
$.registerChatSubcommand('greeting', 'toggle', 1);
|
||||
$.registerChatSubcommand('greeting', 'setdefault', 2);
|
||||
$.registerChatSubcommand('greeting', 'enable', 6);
|
||||
$.registerChatSubcommand('greeting', 'disable', 6);
|
||||
|
||||
doUserGreetings();
|
||||
});
|
||||
|
||||
$.greetingspanelupdate = greetingspanelupdate;
|
||||
})();
|
||||
Reference in New Issue
Block a user