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,237 @@
/*
* 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/>.
*/
/**
* followHandler.js
*
* Register new followers and unfollows in the channel
* Optionally supports rewarding points for a follow (Only the first time!)
*
* The follow train:
* Checks if the previous follow was less than 5 minutes ago.
* It will trigger on 3, 4, 5, 10 and 20+ followers.
* anymore to reduce spam. Unless the 5 minutes have past, then it will start over.
*
*/
(function () {
var followToggle = $.getSetIniDbBoolean('settings', 'followToggle', false),
followReward = $.getSetIniDbNumber('settings', 'followReward', 0),
followMessage = $.getSetIniDbString('settings', 'followMessage', $.lang.get('followhandler.follow.message')),
followDelay = $.getSetIniDbNumber('settings', 'followDelay', 5),
followQueue = new java.util.concurrent.ConcurrentLinkedQueue,
lastFollow = $.systemTime(),
announceFollows = false;
/*
* @function updateFollowConfig
*/
function updateFollowConfig() {
followReward = $.getIniDbNumber('settings', 'followReward');
followMessage = $.getIniDbString('settings', 'followMessage');
followToggle = $.getIniDbBoolean('settings', 'followToggle');
followDelay = $.getIniDbNumber('settings', 'followDelay');
}
/*
* @function runFollows
*/
function runFollows() {
if (!followQueue.isEmpty() && (lastFollow + (followDelay * 1e3)) < $.systemTime()) {
var s = followQueue.poll();
if (s.match(/\(alert [,.\w\W]+\)/g)) {
var filename = s.match(/\(alert ([,.\w\W]+)\)/)[1];
$.alertspollssocket.alertImage(filename);
s = (s + '').replace(/\(alert [,.\w\W]+\)/, '');
}
if (s.match(/\(playsound\s([a-zA-Z1-9_]+)\)/g)) {
if (!$.audioHookExists(s.match(/\(playsound\s([a-zA-Z1-9_]+)\)/)[1])) {
$.log.error('Could not play audio hook: Audio hook does not exist.');
return null;
}
$.alertspollssocket.triggerAudioPanel(s.match(/\(playsound\s([a-zA-Z1-9_]+)\)/)[1]);
s = $.replace(s, s.match(/\(playsound\s([a-zA-Z1-9_]+)\)/)[0], '');
}
if (s != '') {
$.say(s);
}
lastFollow = $.systemTime();
}
}
/*
* @event twitchFollowsInitialized
*/
$.bind('twitchFollowsInitialized', function () {
$.consoleLn('>> Enabling follower announcements');
announceFollows = true;
});
/*
* @event twitchFollow
*/
$.bind('twitchFollow', function (event) {
var follower = event.getFollower(),
s = followMessage;
if (announceFollows === true && followToggle === true) {
if (s.match(/\(name\)/)) {
s = $.replace(s, '(name)', $.username.resolve(follower));
}
if (s.match(/\(reward\)/)) {
s = $.replace(s, '(reward)', $.getPointsString(followReward));
}
if (s.match(/^\/w/)) {
s = s.replace('/w', ' /w');
}
followQueue.add(s);
if (followReward > 0) {
$.inidb.incr('points', follower, followReward);
}
$.writeToFile(follower + ' ', './addons/followHandler/latestFollower.txt', false);
$.inidb.set('streamInfo', 'lastFollow', follower);
}
});
/*
* @event command
*/
$.bind('command', function (event) {
var sender = event.getSender(),
command = event.getCommand(),
args = event.getArgs(),
action = args[0];
/*
* @commandpath followreward [amount] - Set the points reward for following
*/
if (command.equalsIgnoreCase('followreward')) {
if (isNaN(parseInt(action))) {
$.say($.whisperPrefix(sender) + $.lang.get('followhandler.set.followreward.usage', $.pointNameMultiple, followReward));
return;
}
followReward = parseInt(action);
$.inidb.set('settings', 'followReward', followReward);
$.say($.whisperPrefix(sender) + $.lang.get('followhandler.set.followreward.success', $.getPointsString(followReward)));
}
/*
* @commandpath followmessage [message] - Set the new follower message when there is a reward
*/
if (command.equalsIgnoreCase('followmessage')) {
if (action === undefined) {
$.say($.whisperPrefix(sender) + $.lang.get('followhandler.set.followmessage.usage'));
return;
}
followMessage = args.slice(0).join(' ');
$.inidb.set('settings', 'followMessage', followMessage);
$.say($.whisperPrefix(sender) + $.lang.get('followhandler.set.followmessage.success', followMessage));
}
/*
* @commandpath followdelay [message] - Set the delay in seconds between follow announcements
*/
if (command.equalsIgnoreCase('followdelay')) {
if (isNaN(parseInt(action)) || parseInt(action) < 5) {
$.say($.whisperPrefix(sender) + $.lang.get('followhandler.set.followdelay.usage'));
return;
}
followDelay = parseInt(action);
$.inidb.set('settings', 'followDelay', followDelay);
$.say($.whisperPrefix(sender) + $.lang.get('followhandler.set.followdelay.success', followDelay));
}
/*
* @commandpath followtoggle - Enable or disable the anouncements for new followers
*/
if (command.equalsIgnoreCase('followtoggle')) {
followToggle = !followToggle;
$.setIniDbBoolean('settings', 'followToggle', followToggle);
$.say($.whisperPrefix(sender) + (followToggle ? $.lang.get('followhandler.followtoggle.on') : $.lang.get('followhandler.followtoggle.off')));
}
/*
* @commandpath checkfollow [username] - Check if a user is following the channel
*/
if (command.equalsIgnoreCase('checkfollow')) {
if (action === undefined) {
$.say($.whisperPrefix(sender) + $.lang.get('followhandler.check.usage'));
return;
}
action = $.user.sanitize(action);
if ($.user.isFollower(action)) {
$.say($.lang.get('followhandler.check.follows', $.username.resolve(action)));
} else {
$.say($.lang.get('followhandler.check.notfollows', $.username.resolve(action)));
}
}
/*
* @commandpath shoutout [streamer] - Give a shout out to a streamer.
*/
if (command.equalsIgnoreCase('shoutout')) {
if (action === undefined) {
$.say($.whisperPrefix(sender) + $.lang.get('followhandler.shoutout.usage', command));
return;
}
var streamer = $.user.sanitize(args[0]),
streamerDisplay = $.username.resolve(streamer),
streamerGame = $.getGame(streamer),
streamerURL = 'https://twitch.tv/' + streamer;
if (streamerGame == null || streamerGame.length === 0) {
$.say($.lang.get('followhandler.shoutout.no.game', streamerDisplay, streamerURL));
return;
}
if (!$.isOnline(streamer)) {
$.say($.lang.get('followhandler.shoutout.offline', streamerDisplay, streamerURL, streamerGame));
} else {
$.say($.lang.get('followhandler.shoutout.online', streamerDisplay, streamerURL, streamerGame));
}
}
});
/*
* @event initReady
*/
$.bind('initReady', function () {
$.registerChatCommand('./handlers/followHandler.js', 'followreward', 1);
$.registerChatCommand('./handlers/followHandler.js', 'followtoggle', 1);
$.registerChatCommand('./handlers/followHandler.js', 'followdelay', 1);
$.registerChatCommand('./handlers/followHandler.js', 'followmessage', 1);
$.registerChatCommand('./handlers/followHandler.js', 'checkfollow', 2);
$.registerChatCommand('./handlers/followHandler.js', 'shoutout', 2);
setInterval(runFollows, 2e3, 'scripts::handlers::followHandler.js');
});
$.updateFollowConfig = updateFollowConfig;
})();