init commit
This commit is contained in:
531
libs/phantombot/scripts/core/streamInfo.js
Normal file
531
libs/phantombot/scripts/core/streamInfo.js
Normal file
@@ -0,0 +1,531 @@
|
||||
/*
|
||||
* 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 currentGame = null;
|
||||
var count = 1;
|
||||
var gamesPlayed;
|
||||
|
||||
/**
|
||||
* @event twitchOnline
|
||||
*/
|
||||
$.bind('twitchOnline', function(event) {
|
||||
if (($.systemTime() - $.inidb.get('panelstats', 'playTimeReset')) >= (480 * 6e4)) {
|
||||
var uptime = getStreamUptimeSeconds($.channelName);
|
||||
$.inidb.set('panelstats', 'gameCount', 1);
|
||||
count = $.inidb.get('panelstats', 'gameCount');
|
||||
$.inidb.del('streamInfo', 'gamesPlayed');
|
||||
$.inidb.set('panelstats', 'playTimeStart', $.systemTime());
|
||||
$.inidb.set('panelstats', 'playTimeReset', $.systemTime());
|
||||
$.inidb.set('streamInfo', 'gamesPlayed', (count + ': ' + $.twitchcache.getGameTitle() + ' - ' + (uptime / 3600 < 10 ? '0' : '') + Math.floor(uptime / 3600) + ':' + ((uptime % 3600) / 60 < 10 ? '0' : '') + Math.floor((uptime % 3600) / 60) + '='));
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @event twitchOffline
|
||||
*/
|
||||
$.bind('twitchOffline', function(event) {
|
||||
if (($.systemTime() - $.inidb.get('panelstats', 'playTimeReset')) >= (480 * 6e4)) {
|
||||
$.inidb.set('panelstats', 'playTimeStart', 0);
|
||||
$.inidb.set('panelstats', 'playTimeReset', 0);
|
||||
$.inidb.set('panelstats', 'gameCount', 1);
|
||||
$.inidb.del('streamInfo', 'gamesPlayed');
|
||||
}
|
||||
$.inidb.set('streamInfo', 'downtime', String($.systemTime()));
|
||||
});
|
||||
|
||||
/**
|
||||
* @event twitchGameChange
|
||||
*/
|
||||
$.bind('twitchGameChange', function(event) {
|
||||
var uptime = getStreamUptimeSeconds($.channelName);
|
||||
|
||||
if ($.isOnline($.channelName)) {
|
||||
$.inidb.set('panelstats', 'playTimeStart', $.systemTime());
|
||||
if ($.inidb.exists('streamInfo', 'gamesPlayed')) {
|
||||
$.inidb.incr('panelstats', 'gameCount', 1);
|
||||
count = $.inidb.get('panelstats', 'gameCount');
|
||||
gamesPlayed = $.inidb.get('streamInfo', 'gamesPlayed');
|
||||
gamesPlayed += (count + ': ' + $.twitchcache.getGameTitle() + ' - ' + (uptime / 3600 < 10 ? '0' : '') + Math.floor(uptime / 3600) + ':' + ((uptime % 3600) / 60 < 10 ? '0' : '') + Math.floor((uptime % 3600) / 60) + '=');
|
||||
$.inidb.set('streamInfo', 'gamesPlayed', gamesPlayed);
|
||||
} else {
|
||||
count = $.inidb.get('panelstats', 'gameCount');
|
||||
$.inidb.set('streamInfo', 'gamesPlayed', (count + ': ' + $.twitchcache.getGameTitle() + ' - ' + (uptime / 3600 < 10 ? '0' : '') + Math.floor(uptime / 3600) + ':' + ((uptime % 3600) / 60 < 10 ? '0' : '') + Math.floor((uptime % 3600) / 60) + '='));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @function getGamesPlayed()
|
||||
* @export $
|
||||
* @return string
|
||||
*/
|
||||
function getGamesPlayed() {
|
||||
if ($.inidb.exists('streamInfo', 'gamesPlayed')) {
|
||||
var games = $.inidb.get('streamInfo', 'gamesPlayed'),
|
||||
string = games.split('=').join(', ');
|
||||
|
||||
return string;
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getPlayTime()
|
||||
* @export $
|
||||
*/
|
||||
function getPlayTime() {
|
||||
var playTime = parseInt($.inidb.get('panelstats', 'playTimeStart')),
|
||||
time;
|
||||
|
||||
if (playTime) {
|
||||
time = ($.systemTime() - playTime);
|
||||
return $.getTimeStringMinutes(time / 1000);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function isOnline
|
||||
* @export $
|
||||
* @param {string} channelName
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function isOnline(channelName) {
|
||||
if ($.twitchCacheReady.equals('true') && channelName.equalsIgnoreCase($.channelName)) {
|
||||
return $.twitchcache.isStreamOnlineString().equals('true');
|
||||
} else {
|
||||
return !$.twitch.GetStream(channelName).isNull('stream');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getStatus
|
||||
* @export $
|
||||
* @param {string} channelName
|
||||
* @returns {string}
|
||||
*/
|
||||
function getStatus(channelName) {
|
||||
if ($.twitchCacheReady.equals('true') && channelName.equalsIgnoreCase($.channelName)) {
|
||||
return ($.twitchcache.getStreamStatus() + '');
|
||||
} else {
|
||||
var channelData = $.twitch.GetChannel(channelName);
|
||||
|
||||
if (!channelData.isNull('status') && channelData.getInt('_http') == 200) {
|
||||
return channelData.getString('status');
|
||||
} else if (channelData.isNull('status') && channelData.getInt('_http') == 200) {
|
||||
return $.lang.get('common.twitch.no.status');
|
||||
}
|
||||
$.log.error('Failed to get the current status: ' + channelData.getString('message'));
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getGame
|
||||
* @export $
|
||||
* @param channelName
|
||||
* @returns {string}
|
||||
*/
|
||||
function getGame(channelName) {
|
||||
if ($.twitchCacheReady.equals('true') && channelName.equalsIgnoreCase($.channelName)) {
|
||||
return ($.twitchcache.getGameTitle() + '');
|
||||
} else {
|
||||
var channelData = $.twitch.GetChannel(channelName);
|
||||
|
||||
if (!channelData.isNull('game') && channelData.getInt('_http') == 200) {
|
||||
return channelData.getString("game");
|
||||
} else if (channelData.isNull('game') && channelData.getInt('_http') == 200) {
|
||||
return $.lang.get('common.twitch.no.game');
|
||||
}
|
||||
|
||||
if (!channelData.isNull('message')) {
|
||||
$.log.error('Failed to get the current game: ' + channelData.getString('message'));
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getLogo
|
||||
* @export $
|
||||
* @param channelName
|
||||
* @returns {Url}
|
||||
*/
|
||||
function getLogo(channelName) {
|
||||
var channel = $.twitch.GetChannel(channelName);
|
||||
|
||||
if (!channel.isNull('logo') && channel.getInt('_http') == 200) {
|
||||
return channel.getString('logo');
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getStreamUptimeSeconds
|
||||
* @export $
|
||||
* @param channelName
|
||||
* @returns {number}
|
||||
*/
|
||||
function getStreamUptimeSeconds(channelName) {
|
||||
if ($.twitchCacheReady.equals('true') && channelName.equalsIgnoreCase($.channelName)) {
|
||||
return $.twitchcache.getStreamUptimeSeconds();
|
||||
} else {
|
||||
var stream = $.twitch.GetStream(channelName),
|
||||
now = new Date(),
|
||||
createdAtDate,
|
||||
time;
|
||||
|
||||
if (stream.isNull('stream')) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
createdAtDate = new Date(stream.getJSONObject('stream').getString('created_at'));
|
||||
if (createdAtDate) {
|
||||
time = (now - createdAtDate);
|
||||
return Math.floor(time / 1000);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getStreamUptime
|
||||
* @export $
|
||||
* @param channelName
|
||||
* @returns {string}
|
||||
*/
|
||||
function getStreamUptime(channelName) {
|
||||
if ($.twitchCacheReady.equals('true') && channelName.equalsIgnoreCase($.channelName)) {
|
||||
var uptime = $.twitchcache.getStreamUptimeSeconds();
|
||||
|
||||
if (uptime === 0) {
|
||||
$.consoleLn("Fallback uptime");
|
||||
var stream = $.twitch.GetStream(channelName),
|
||||
now = new Date(),
|
||||
createdAtDate,
|
||||
time;
|
||||
|
||||
if (stream.isNull('stream')) {
|
||||
return '';
|
||||
}
|
||||
|
||||
createdAtDate = new Date(stream.getJSONObject('stream').getString('created_at'));
|
||||
time = (now - createdAtDate);
|
||||
return $.getTimeString(time / 1000);
|
||||
}
|
||||
return $.getTimeString(uptime);
|
||||
} else {
|
||||
var stream = $.twitch.GetStream(channelName),
|
||||
now = new Date(),
|
||||
createdAtDate,
|
||||
time;
|
||||
|
||||
if (stream.isNull('stream')) {
|
||||
return '';
|
||||
}
|
||||
|
||||
createdAtDate = new Date(stream.getJSONObject('stream').getString('created_at'));
|
||||
if (createdAtDate) {
|
||||
time = now - createdAtDate;
|
||||
return $.getTimeString(time / 1000);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getStreamDownTime
|
||||
* @export $
|
||||
* @returns {string}
|
||||
*/
|
||||
function getStreamDownTime() {
|
||||
var now = $.systemTime(),
|
||||
down = $.inidb.get('streamInfo', 'downtime'),
|
||||
time;
|
||||
|
||||
if (down > 0) {
|
||||
time = (now - down);
|
||||
return $.getTimeString(time / 1000);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getStreamStartedAt
|
||||
* @export $
|
||||
* @param channelName
|
||||
* @returns {string}
|
||||
*/
|
||||
function getStreamStartedAt(channelName) {
|
||||
if ($.twitchCacheReady.equals('true') && channelName.equalsIgnoreCase($.channelName)) {
|
||||
if ($.twitchcache.getStreamOnlineString === 'false') {
|
||||
return 'Stream is offline';
|
||||
}
|
||||
createdAtDate = new Date($.twitchcache.getStreamCreatedAt() + '');
|
||||
return $.dateToString(createdAtDate);
|
||||
} else {
|
||||
var stream = $.twitch.GetStream(channelName),
|
||||
createdAtDate;
|
||||
|
||||
if (stream.isNull('stream')) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
createdAtDate = new Date(stream.getJSONObject('stream').getString('created_at'));
|
||||
return $.dateToString(createdAtDate);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getViewers
|
||||
* @export $
|
||||
* @param channelName
|
||||
* @returns {Number}
|
||||
*/
|
||||
function getViewers(channelName) {
|
||||
if ($.twitchCacheReady.equals('true') && channelName.equalsIgnoreCase($.channelName)) {
|
||||
return $.twitchcache.getViewerCount();
|
||||
} else {
|
||||
var stream = $.twitch.GetStream(channelName);
|
||||
|
||||
if (!stream.isNull('stream') && stream.getInt('_http') == 200) {
|
||||
return stream.getJSONObject('stream').getInt('viewers');
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getFollows
|
||||
* @export $
|
||||
* @param channelName
|
||||
* @returns {Number}
|
||||
*/
|
||||
function getFollows(channelName) {
|
||||
var channel = $.twitch.GetChannel(channelName);
|
||||
|
||||
if (!channel.isNull('followers') && channel.getInt('_http') == 200) {
|
||||
return channel.getInt('followers');
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getFollowDate
|
||||
* @export $
|
||||
* @param username
|
||||
* @param channelName
|
||||
*/
|
||||
function getFollowDate(sender, username, channelName) {
|
||||
username = $.user.sanitize(username);
|
||||
channelName = $.user.sanitize(channelName);
|
||||
|
||||
var user = $.twitch.GetUserFollowsChannel(username, channelName);
|
||||
|
||||
if (user.getInt('_http') === 404) {
|
||||
return $.lang.get('followhandler.follow.age.datefmt.404');
|
||||
}
|
||||
|
||||
var date = new Date(user.getString('created_at')),
|
||||
dateFormat = new java.text.SimpleDateFormat($.lang.get('followhandler.follow.age.datefmt')),
|
||||
dateFinal = dateFormat.format(date);
|
||||
|
||||
return dateFinal;
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getFollowAge
|
||||
* @export $
|
||||
* @param username
|
||||
* @param channelName
|
||||
*/
|
||||
function getFollowAge(sender, username, channelName) {
|
||||
username = $.user.sanitize(username);
|
||||
channelName = $.user.sanitize(channelName);
|
||||
|
||||
var user = $.twitch.GetUserFollowsChannel(username, channelName);
|
||||
|
||||
if (user.getInt('_http') === 404) {
|
||||
$.say($.lang.get('followhandler.follow.age.err.404', $.userPrefix(sender, true), username, channelName));
|
||||
return;
|
||||
}
|
||||
|
||||
var date = new Date(user.getString('created_at')),
|
||||
dateFormat = new java.text.SimpleDateFormat("MMMM dd', 'yyyy"),
|
||||
dateFinal = dateFormat.format(date),
|
||||
days = Math.floor((($.systemTime() - date.getTime()) / 1000) / 86400);
|
||||
|
||||
if (days > 0) {
|
||||
$.say($.lang.get('followhandler.follow.age.time.days', $.userPrefix(sender, true), username, channelName, dateFinal, days));
|
||||
} else {
|
||||
$.say($.lang.get('followhandler.follow.age.time', $.userPrefix(sender, true), username, channelName, dateFinal));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getChannelAge
|
||||
* @export $
|
||||
* @param event
|
||||
*/
|
||||
function getChannelAge(event) {
|
||||
var channelData = $.twitch.GetChannel((!event.getArgs()[0] ? event.getSender() : $.user.sanitize(event.getArgs()[0])));
|
||||
|
||||
if (channelData.getInt('_http') === 404) {
|
||||
$.say($.userPrefix(event.getSender(), true) + $.lang.get('channel.age.user.404'));
|
||||
return;
|
||||
}
|
||||
|
||||
var date = new Date(channelData.getString('created_at')),
|
||||
dateFormat = new java.text.SimpleDateFormat("MMMM dd', 'yyyy"),
|
||||
dateFinal = dateFormat.format(date),
|
||||
days = Math.floor((Math.abs((date.getTime() - $.systemTime()) / 1000)) / 86400);
|
||||
|
||||
if (days > 0) {
|
||||
$.say($.lang.get('common.get.age.days', $.userPrefix(event.getSender(), true), (!event.getArgs()[0] ? event.getSender() : $.user.sanitize(event.getArgs()[0])), dateFinal, days));
|
||||
} else {
|
||||
$.say($.lang.get('common.get.age', $.userPrefix(event.getSender(), true), (!event.getArgs()[0] ? event.getSender() : $.user.sanitize(event.getArgs()[0])), dateFinal));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function getSubscriberCount
|
||||
* @export $
|
||||
* @return {number} count
|
||||
*/
|
||||
function getSubscriberCount() {
|
||||
var jsonObject = $.twitch.GetChannelSubscriptions($.channelName.toLowerCase(), 100, 0, true);
|
||||
|
||||
if (jsonObject.getInt('_http') !== 200) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return jsonObject.getInt('_total') - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @function updateGame
|
||||
* @export $
|
||||
* @param {string} channelName
|
||||
* @param {string} game
|
||||
* @param {string} sender
|
||||
* @param {boolean} silent
|
||||
*/
|
||||
function updateGame(channelName, game, sender, silent) {
|
||||
var http = $.twitch.UpdateChannel(channelName, '', game);
|
||||
|
||||
if (http.getBoolean('_success')) {
|
||||
if (http.getInt('_http') == 200) {
|
||||
if (!silent) {
|
||||
$.say($.lang.get('common.game.change', http.getString('game')));
|
||||
}
|
||||
|
||||
$.twitchcache.setGameTitle(http.getString('game'));
|
||||
$.inidb.set('streamInfo', 'game', http.getString('game'));
|
||||
$.log.event($.username.resolve(sender) + ' changed the current game to ' + http.getString('game'));
|
||||
if ($.bot.isModuleEnabled('./commands/deathctrCommand.js')) {
|
||||
$.deathUpdateFile(game);
|
||||
}
|
||||
} else {
|
||||
$.log.error('Failed to change the game. The Twitch API might be having issues.');
|
||||
$.log.error(http.getString('message'));
|
||||
}
|
||||
} else {
|
||||
$.log.error('Failed to change the game. Make sure you have your api oauth code set. https://phantombot.github.io/PhantomBot/oauth/');
|
||||
$.log.error(http.getString('_exception') + ' ' + http.getString('_exceptionMessage'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function updateStatus
|
||||
* @export $
|
||||
* @param {string} channelName
|
||||
* @param {string} status
|
||||
* @param {string} sender
|
||||
* @param {boolean} silent
|
||||
*/
|
||||
function updateStatus(channelName, status, sender, silent) {
|
||||
var http = $.twitch.UpdateChannel(channelName, status, '');
|
||||
|
||||
if (http.getBoolean('_success')) {
|
||||
if (http.getInt('_http') == 200) {
|
||||
if (!silent) {
|
||||
$.say($.lang.get('common.title.change', http.getString('status')));
|
||||
}
|
||||
$.twitchcache.setStreamStatus(http.getString('status'));
|
||||
$.inidb.set('streamInfo', 'title', http.getString('status'));
|
||||
$.log.event(sender + ' changed the current status to ' + http.getString('status'));
|
||||
} else {
|
||||
$.log.error('Failed to change the status. The Twitch API might be having issues.');
|
||||
$.log.error(http.getString('message'));
|
||||
}
|
||||
} else {
|
||||
$.log.error('Failed to change the status. Make sure you have your api oauth code set. https://phantombot.github.io/PhantomBot/oauth/');
|
||||
$.log.error(http.getString('_exception') + ' ' + http.getString('_exceptionMessage'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @function updateStatus
|
||||
* @export $
|
||||
* @param {string} channelName
|
||||
* @param {string} communities
|
||||
* @param {string} sender
|
||||
* @param {boolean} silent
|
||||
*/
|
||||
function updateCommunity(channelName, communities, sender, silent) {
|
||||
var http = $.twitch.UpdateCommunities(channelName, communities);
|
||||
|
||||
if (http.getBoolean('_success') && http.getInt('_http') == 204) {
|
||||
if (!silent) {
|
||||
$.say($.lang.get('common.communities.change'));
|
||||
}
|
||||
$.twitchcache.setCommunities(communities);
|
||||
$.inidb.set('streamInfo', 'communities', communities.join(', '));
|
||||
} else {
|
||||
$.log.error('Failed to change the status. Make sure you have your api oauth code set. https://phantombot.github.io/PhantomBot/oauth/');
|
||||
$.log.error(http.getString('_exception') + ' ' + http.getString('_exceptionMessage'));
|
||||
}
|
||||
}
|
||||
|
||||
/** Export functions to API */
|
||||
$.getPlayTime = getPlayTime;
|
||||
$.getFollows = getFollows;
|
||||
$.getGame = getGame;
|
||||
$.getLogo = getLogo;
|
||||
$.getStatus = getStatus;
|
||||
$.getStreamStartedAt = getStreamStartedAt;
|
||||
$.getStreamUptime = getStreamUptime;
|
||||
$.getStreamUptimeSeconds = getStreamUptimeSeconds;
|
||||
$.getViewers = getViewers;
|
||||
$.isOnline = isOnline;
|
||||
$.updateGame = updateGame;
|
||||
$.updateStatus = updateStatus;
|
||||
$.updateCommunity = updateCommunity;
|
||||
$.getFollowAge = getFollowAge;
|
||||
$.getFollowDate = getFollowDate;
|
||||
$.getChannelAge = getChannelAge;
|
||||
$.getStreamDownTime = getStreamDownTime;
|
||||
$.getGamesPlayed = getGamesPlayed;
|
||||
$.getSubscriberCount = getSubscriberCount;
|
||||
})();
|
||||
Reference in New Issue
Block a user