Skip to content

Commit

Permalink
widgets/subscribers: add latest subs widget #166
Browse files Browse the repository at this point in the history
  • Loading branch information
sogehige committed Apr 27, 2017
1 parent 2f837f7 commit ee8d5b5
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 0 deletions.
23 changes: 23 additions & 0 deletions libs/widgets/subscribers.js
@@ -0,0 +1,23 @@
'use strict'

function SubscribersWidget () {
global.configuration.register('subscribersWidgetShow', 'core.no-response', 'number', 5)
global.configuration.register('subscribersWidgetFontSize', 'core.no-response', 'number', 20)

global.panel.addWidget('subscribers', 'widget-title-latest-subscribers', 'user')
global.panel.socketListening(this, 'subscribers.latest.get', this.emitLatestSubscribers)
global.panel.socketListening(this, 'subscribers.configuration.get', this.sendConfiguration)
}

SubscribersWidget.prototype.sendConfiguration = function (self, socket) {
socket.emit('subscribers.configuration', {
subscribersWidgetShow: global.configuration.getValue('subscribersWidgetShow'),
subscribersWidgetFontSize: global.configuration.getValue('subscribersWidgetFontSize')
})
}

SubscribersWidget.prototype.emitLatestSubscribers = function (self, socket) {
socket.emit('subscribers.latest', global.twitch.cached.subscribers)
}

module.exports = new SubscribersWidget()
2 changes: 2 additions & 0 deletions locales/cs.json
Expand Up @@ -222,6 +222,7 @@
"create-and-use-a-new-title": "Vytvoř a použij nový název",
"followers-show-number": "Zobrazit",
"followers-show": "followerů",
"subscribers-show": "subscriberů",
"followers-size": "Velikost fontu",
"custom-message": "Vlastní zpráva",
"minimal-watched-time": "Minimální čas sledování:",
Expand All @@ -234,6 +235,7 @@
"widget-title-monitor": "TWITCH STREAM MONITOR",
"widget-title-ytplayer": "PŘEHRÁVAČ HUDBY",
"widget-title-latest-followers": "NEJNOVĚJŠÍ FOLLOWEŘI",
"widget-title-latest-subscribers": "NEJNOVĚJŠÍ SUBSCRIBEŘI",
"event": "událost",
"operation": "operace",
"user-joined-channel": "uživatel se připojil do chatu",
Expand Down
2 changes: 2 additions & 0 deletions locales/en.json
Expand Up @@ -222,6 +222,7 @@
"create-and-use-a-new-title": "Create and use a new title",
"followers-show-number": "Show",
"followers-show": "followers",
"subscribers-show": "subscribers",
"followers-size": "Font size",
"custom-message": "Custom message",
"minimal-watched-time": "Minimal watched time:",
Expand All @@ -234,6 +235,7 @@
"widget-title-monitor": "TWITCH STREAM MONITOR",
"widget-title-ytplayer": "MUSIC PLAYER",
"widget-title-latest-followers": "LATEST FOLLOWERS",
"widget-title-latest-subscribers": "LATEST SUBSCRIBERS",
"event": "event",
"operation": "operation",
"user-joined-channel": "user joined a channel",
Expand Down
4 changes: 4 additions & 0 deletions main.js
Expand Up @@ -157,11 +157,15 @@ global.client.on('clearchat', function (channel) {
global.client.on('subscription', function (channel, username, method) {
global.users.set(username, { is: { subscriber: true } })
global.events.fire('subscription', { username: username, method: (!_.isNil(method.prime) && method.prime) ? 'Twitch Prime' : '' })
global.twitch.cached.subscribers.unshift(username)
global.twitch.cached.subscribers = _.chunk(global.twitch.cached.subscribers, 100)[0]
})

global.client.on('resub', function (channel, username, months, message) {
global.users.set(username, { is: { subscriber: true } })
global.events.fire('resub', { username: username, months: months, message: message })
global.twitch.cached.subscribers.unshift(username + ', ' + months + ' ' + global.parser.getLocalizedName(months, 'months'))
global.twitch.cached.subscribers = _.chunk(global.twitch.cached.subscribers, 100)[0]
})

// Bot is checking if it is a mod
Expand Down
77 changes: 77 additions & 0 deletions public/widgets/subscribers.html
@@ -0,0 +1,77 @@
<div class="widget">
<h6 data-lang="widget-title-latest-subscribers"></h6>
<ul class="nav nav-pills" role="tablist">
<li role="presentation" class="active">
<a href="#subscribers-main" aria-controls="home" role="tab" data-toggle="tab" title="Latest Subscribers">
<i class="fa fa-user" aria-hidden="true"></i>
</a>
</li>
<li role="presentation">
<a href="#subscribers-settings" aria-controls="home" role="tab" data-toggle="tab" title="Settings">
<i class="fa fa-cog" aria-hidden="true"></i>
</a>
</li>
</ul>

<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="subscribers-main">
<div id="subscribers-widget"></div>
</div> <!-- /MAIN -->

<div role="tabpanel" class="tab-pane" id="subscribers-settings">
<div class="input-group">
<span class="input-group-addon" data-lang="followers-show-number"></span>
<input type="text" class="form-control" id="subscribersShow">
<span class="input-group-addon" data-lang="subscribers-show"></span>
</div>
<div class="input-group">
<span class="input-group-addon" data-lang="followers-size"></span>
<input type="text" class="form-control" id="subscribersSize">
</div>
<button type="button" class="btn btn-danger btn-block" onclick="deleteWidget('subscribers')" style="margin-top: 20px;" data-lang="remove-widget"></button>
</div> <!-- /SETTINGS -->
</div>

<script>
if (!_.isUndefined(Isubscribers)) window.clearInterval(Isubscribers)
var Isubscribers = setInterval(function() { socket.emit('subscribers.latest.get') }, 2000)

socket.emit('subscribers.configuration.get')
socket.off('subscribers.configuration')
socket.on('subscribers.configuration', function(data) {
$("#subscribersShow").val(data.subscribersWidgetShow)
$("#subscribersSize").val(data.subscribersWidgetFontSize)
})

socket.off('subscribers.latest')
socket.on('subscribers.latest', function (items) {
$("#subscribers-widget").empty()
var toShow = $("#subscribersShow").val()
var output = ''
_.each(items, function(item, index) {
if (index < toShow) {
output += '<p class="text-center text-uppercase" style="font-size: ' + $('#subscribersSize').val() + 'px">' + item + '</p>'
} else return false
})
$("#subscribers-widget").html(output)
})

var $subscribersShow = $('#subscribersShow')
$subscribersShow.off()
$subscribersShow.on('focusout', function() {
var value = $subscribersShow.val()
var data = {}
data['subscribersWidgetShow'] = value
socket.emit('saveConfiguration', data)
})

var $subscribersSize = $('#subscribersSize')
$subscribersSize.off()
$subscribersSize.on('focusout', function() {
var value = $subscribersSize.val()
var data = {}
data['subscribersWidgetFontSize'] = value
socket.emit('saveConfiguration', data)
})
</script>

0 comments on commit ee8d5b5

Please sign in to comment.