forked from night/TwitchStatus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
chat-servers.js
113 lines (97 loc) · 2.69 KB
/
chat-servers.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
var config = require('./config.json'),
request = require('request');
var chatServers = function(servers, callback) {
request({
url: "https://api.twitch.tv/api/channels/"+config.irc.username+"/chat_properties",
json: true,
timeout: 10000
}, function(error, response, data) {
if(error || !data.chat_servers || data.eventchat || data.devchat) {
callback(servers);
return;
}
data.chat_servers.forEach(function(server) {
var host = server.split(':')[0],
port = parseInt(server.split(':')[1]);
servers.push({
name: host+":"+port,
type: "chat",
description: "Chat Server",
host: host,
port: port
});
});
var length = servers.length
for(var i=0; i<length; i++) {
var server = servers[i];
servers.push({
name: server.host+":"+6667,
type: "chat",
description: "Chat Server",
host: server.host,
port: 6667
});
}
callback(servers);
});
}
var eventChatServers = function(servers, callback) {
request({
url: "https://api.twitch.tv/api/channels/riotgames/chat_properties",
json: true,
timeout: 10000
}, function(error, response, data) {
if(error || !data.chat_servers || !data.eventchat || data.devchat) {
callback(servers);
return;
}
data.chat_servers.forEach(function(server) {
var host = server.split(':')[0],
port = parseInt(server.split(':')[1]);
servers.push({
name: host+":"+port,
type: "chat",
description: "Event Chat Server",
host: host,
port: port
});
});
callback(servers);
});
}
var groupChatServers = function(servers, callback) {
request({
url: "https://chatdepot.twitch.tv/room_memberships?oauth_token="+config.irc.access_token,
json: true,
timeout: 10000
}, function(error, response, data) {
if(error || !data.memberships || data.memberships.length === 0) {
callback(servers);
return;
}
data.memberships[0].room.servers.forEach(function(server) {
var host = server.split(':')[0],
port = parseInt(server.split(':')[1]);
servers.push({
name: host+":"+port,
type: "chat",
description: "Group Chat Server",
host: host,
port: port
});
});
callback(servers);
});
}
module.exports = function(callback) {
chatServers([], function(servers) {
eventChatServers(servers, function(servers) {
groupChatServers(servers, function(servers) {
servers.sort(function(a, b) {
return a.port - b.port || a.host.localeCompare(b.host);
});
callback(servers);
});
});
});
}