-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.js
90 lines (77 loc) · 3.2 KB
/
extension.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
'use strict';
var Constellation = require('constellation-client');
var request = require('request');
function array_contains(arr, obj) {
for (var i = 0; i < arr.length; ++i) {
if (arr[i] === obj){
return true;
}
}
return false;
}
module.exports = function (nodecg) {
var RepsAndNames = require('./reps-and-names.js')(nodecg);
function UpdateChannelFromRestAPIDelayed() {
//@TODO: Use debounce
setTimeout(UpdateChannelFromRestAPI, 6000);
}
function UpdateChannelFromRestAPI()
{
request(`https://beam.pro/api/v1/channels/${nodecg.bundleConfig.channel}`, function (error, response, body) {
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
Object.keys(data).forEach(function(key,index) {
if (key == "user") {
Object.keys(data.user).forEach(function(user_key, user_index) {
if (RepsAndNames.ReplicantData.user.hasOwnProperty(user_key)) {
RepsAndNames.ReplicantData.user[user_key].value = data.user[user_key];
}
});
} else {
if (RepsAndNames.ReplicantData.channel.hasOwnProperty(key)) {
RepsAndNames.ReplicantData.channel[key].value = data[key];
}
}
});
}
});
}
UpdateChannelFromRestAPI();
const channelId = nodecg.bundleConfig.channel;
const userId = nodecg.bundleConfig.user;
const constellation = new Constellation();
constellation.on(`user:${userId}:update`, data => {
Object.keys(data).forEach(function(key,index) {
if (RepsAndNames.ReplicantData.user.hasOwnProperty(key)) {
RepsAndNames.ReplicantData.user[key].value = data[key];
}
});
});
constellation.on(`channel:${channelId}:followed`, data => {
if (data.following) {
var refollowing = array_contains(RepsAndNames.ReplicantData.channel.announcedFollowers.value, data.user.username);
if (RepsAndNames.ReplicantData.dashboard.allowRefollow.value || !refollowing) {
if (!refollowing) {
RepsAndNames.ReplicantData.channel.announcedFollowers.value.push(data.user.username);
}
nodecg.sendMessage(RepsAndNames.MessageNames.channel.followed, data.user);
}
}
else {
nodecg.sendMessage(RepsAndNames.MessageNames.channel.unfollowed, data.user);
}
});
constellation.on(`channel:${channelId}:status`, data => {
//nodecg.sendMessage('beam-channel-status', data);
});
constellation.on(`channel:${channelId}:update`, data => {
Object.keys(data).forEach(function(key,index) {
if (RepsAndNames.ReplicantData.channel.hasOwnProperty(key)) {
RepsAndNames.ReplicantData.channel[key].value = data[key];
}
});
});
nodecg.listenFor(RepsAndNames.MessageNames.dashboard.updateRequest, function(message) {
UpdateChannelFromRestAPI();
});
};