|
|
|
@ -31,20 +31,9 @@ class TwitchChannel extends Channel {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_generateRandomString(length) {
|
|
|
|
|
var result = '';
|
|
|
|
|
|
|
|
|
|
var randomChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
|
|
|
for(var i = 0; i < length; i++) {
|
|
|
|
|
result += randomChars.charAt(Math.floor(Math.random() * randomChars.length));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sendChat(message) {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
var nonce = this._generateRandomString(32);
|
|
|
|
|
var nonce = this.chat._generateRandomString(32);
|
|
|
|
|
this.chat.ws.privmsg(this.name, message, { clientNonce: nonce });
|
|
|
|
|
this.chat.getUserInfo(this.chat.username).then((data) => {
|
|
|
|
|
this.emit('message', {
|
|
|
|
@ -227,9 +216,209 @@ class TwitchChannel extends Channel {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getStatus() {
|
|
|
|
|
getStatus(original) {
|
|
|
|
|
var languages = [{
|
|
|
|
|
code: "ar",
|
|
|
|
|
label: "العربية",
|
|
|
|
|
tagID: "73cc486a-e56b-41ed-a1df-7afedbc84f6f"
|
|
|
|
|
}, {
|
|
|
|
|
code: "bg",
|
|
|
|
|
label: "Български",
|
|
|
|
|
tagID: "21d85c73-701f-4259-8c4e-4321265847b5"
|
|
|
|
|
}, {
|
|
|
|
|
code: "ca",
|
|
|
|
|
label: "Català",
|
|
|
|
|
tagID: "b1650f8e-cf56-4e62-99e3-0142cfc7e081"
|
|
|
|
|
}, {
|
|
|
|
|
code: "cs",
|
|
|
|
|
label: "Čeština",
|
|
|
|
|
tagID: "a6cddaba-f0ce-4526-9087-6de2f603a24d"
|
|
|
|
|
}, {
|
|
|
|
|
code: "da",
|
|
|
|
|
label: "Dansk",
|
|
|
|
|
tagID: "43e598cc-918b-4247-b02c-b13543a1eac9"
|
|
|
|
|
}, {
|
|
|
|
|
code: "de",
|
|
|
|
|
label: "Deutsch",
|
|
|
|
|
tagID: "9166ad14-41f1-4b04-a3b8-c8eb838c6be6"
|
|
|
|
|
}, {
|
|
|
|
|
code: "el",
|
|
|
|
|
label: "Ελληνικά",
|
|
|
|
|
tagID: "902f6815-a655-4918-99e7-48c74a71feac"
|
|
|
|
|
}, {
|
|
|
|
|
code: "en",
|
|
|
|
|
label: "English",
|
|
|
|
|
tagID: "6ea6bca4-4712-4ab9-a906-e3336a9d8039"
|
|
|
|
|
}, {
|
|
|
|
|
code: "es",
|
|
|
|
|
label: "Español",
|
|
|
|
|
tagID: "d4bb9c58-2141-4881-bcdc-3fe0505457d1"
|
|
|
|
|
}, {
|
|
|
|
|
code: "fi",
|
|
|
|
|
label: "Suomi",
|
|
|
|
|
tagID: "220eb274-ab25-425b-8a9b-826103404997"
|
|
|
|
|
}, {
|
|
|
|
|
code: "fr",
|
|
|
|
|
label: "Français",
|
|
|
|
|
tagID: "6f655045-9989-4ef7-8f85-1edcec42d648"
|
|
|
|
|
}, {
|
|
|
|
|
code: "hi",
|
|
|
|
|
label: "मानक हिन्दी",
|
|
|
|
|
tagID: "56d53a63-f048-40a9-ab61-d363aa3b9c57"
|
|
|
|
|
}, {
|
|
|
|
|
code: "hu",
|
|
|
|
|
label: "Magyar",
|
|
|
|
|
tagID: "a298cca5-d408-47c7-a1e7-0c76ca878bc6"
|
|
|
|
|
}, {
|
|
|
|
|
code: "id",
|
|
|
|
|
label: "Bahasa Indonesia",
|
|
|
|
|
tagID: "8b1246f2-2cec-4b90-9d86-01ebdf13b848"
|
|
|
|
|
}, {
|
|
|
|
|
code: "it",
|
|
|
|
|
label: "Italiano",
|
|
|
|
|
tagID: "5b9935eb-1e9a-4217-98ad-62bda5cff0d1"
|
|
|
|
|
}, {
|
|
|
|
|
code: "ja",
|
|
|
|
|
label: "日本語",
|
|
|
|
|
tagID: "6ba1d230-e52f-4d81-b1e0-41f25a8a9f5d"
|
|
|
|
|
}, {
|
|
|
|
|
code: "ko",
|
|
|
|
|
label: "한국어",
|
|
|
|
|
tagID: "ab2975e3-b9ca-4b1a-a93e-fb61a5d5c3a4"
|
|
|
|
|
}, {
|
|
|
|
|
code: "ms",
|
|
|
|
|
label: "بهاس ملايو",
|
|
|
|
|
tagID: "34a56dbd-6add-49e6-83b6-cffacbf18bcd"
|
|
|
|
|
}, {
|
|
|
|
|
code: "nl",
|
|
|
|
|
label: "Nederlands",
|
|
|
|
|
tagID: "e13e6734-37ae-4d85-897b-3015f0168355"
|
|
|
|
|
}, {
|
|
|
|
|
code: "no",
|
|
|
|
|
label: "Norsk",
|
|
|
|
|
tagID: "5647bf35-f99e-49aa-8578-0e07d936188c"
|
|
|
|
|
}, {
|
|
|
|
|
code: "pl",
|
|
|
|
|
label: "Polski",
|
|
|
|
|
tagID: "f9d04efa-6e25-49bf-bf0a-da3e2addaf1b"
|
|
|
|
|
}, {
|
|
|
|
|
code: "pt",
|
|
|
|
|
label: "Português",
|
|
|
|
|
tagID: "39ee8140-901a-4762-bfca-8260dea1310f"
|
|
|
|
|
}, {
|
|
|
|
|
code: "ro",
|
|
|
|
|
label: "Română",
|
|
|
|
|
tagID: "75a99c80-0f15-4159-b1fd-3812c25b4aca"
|
|
|
|
|
}, {
|
|
|
|
|
code: "ru",
|
|
|
|
|
label: "Русский",
|
|
|
|
|
tagID: "0569b171-2a2b-476e-a596-5bdfb45a1327"
|
|
|
|
|
}, {
|
|
|
|
|
code: "sk",
|
|
|
|
|
label: "Slovenčina",
|
|
|
|
|
tagID: "9b773670-05f8-4c06-ac99-e6649f906171"
|
|
|
|
|
}, {
|
|
|
|
|
code: "sv",
|
|
|
|
|
label: "Svenska",
|
|
|
|
|
tagID: "145b073b-cb70-4e91-b170-f5fab2ebba05"
|
|
|
|
|
}, {
|
|
|
|
|
code: "th",
|
|
|
|
|
label: "ภาษาไทย",
|
|
|
|
|
tagID: "f19c7524-c18d-41af-9f39-034c8d0b0fee"
|
|
|
|
|
}, {
|
|
|
|
|
code: "tl",
|
|
|
|
|
label: "Tagalog",
|
|
|
|
|
tagID: "91d21edf-9d63-4ac8-9508-5448c3daf3f0"
|
|
|
|
|
}, {
|
|
|
|
|
code: "tr",
|
|
|
|
|
label: "Türkçe",
|
|
|
|
|
tagID: "f08d5873-f0c7-4912-94ba-a41933b4c141"
|
|
|
|
|
}, {
|
|
|
|
|
code: "uk",
|
|
|
|
|
label: "Українська",
|
|
|
|
|
tagID: "b547f13b-4b4b-460f-97e6-3af350356a69"
|
|
|
|
|
}, {
|
|
|
|
|
code: "vi",
|
|
|
|
|
label: "Tiếng Việt",
|
|
|
|
|
tagID: "ba3b69fe-899c-4518-ac46-707275e3eba1"
|
|
|
|
|
}, {
|
|
|
|
|
code: "zh",
|
|
|
|
|
label: "中文",
|
|
|
|
|
tagID: "74c92063-a389-4fd2-8460-b1bb82b04ec7"
|
|
|
|
|
}, {
|
|
|
|
|
code: "zh-hk",
|
|
|
|
|
label: "粵語",
|
|
|
|
|
tagID: "0c8c6543-4019-47d0-9b8a-57a81ee6ace5"
|
|
|
|
|
}];
|
|
|
|
|
var otherLanguages = [{
|
|
|
|
|
code: "asl",
|
|
|
|
|
label: "American Sign Language",
|
|
|
|
|
tagID: "5ad4b978-495f-4093-9461-c194f58201ab"
|
|
|
|
|
}, {
|
|
|
|
|
code: "other",
|
|
|
|
|
label: "Other",
|
|
|
|
|
tagID: "fd76c790-0505-4c4c-865a-d6bd139c0901"
|
|
|
|
|
}];
|
|
|
|
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
resolve({ viewers: this.viewerCount, platform: this.chat.getPlatformName() });
|
|
|
|
|
this.chat.api.channelShell(this.name).then((result) => {
|
|
|
|
|
if(original) {
|
|
|
|
|
resolve(result);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let startTime = result.user.stream ? (new Date(result.user.stream.createdAt)).getTime() / 1000 : null;
|
|
|
|
|
|
|
|
|
|
let language = null;
|
|
|
|
|
if(result.user.stream && result.user.stream.tags) {
|
|
|
|
|
for(let t of result.user.stream.tags) {
|
|
|
|
|
for(let l of languages) {
|
|
|
|
|
if(t.id == l.tagID) {
|
|
|
|
|
language = l.label;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for(let l of otherLanguages) {
|
|
|
|
|
if(t.id == l.tagID) {
|
|
|
|
|
language = l.label;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resolve({
|
|
|
|
|
platform: this.chat.getPlatformName(),
|
|
|
|
|
clientId: this.chat.id,
|
|
|
|
|
channelId: this.id,
|
|
|
|
|
user: {
|
|
|
|
|
displayName: result.user.displayName,
|
|
|
|
|
username: result.user.login,
|
|
|
|
|
id: result.user.id,
|
|
|
|
|
avatar: result.user.profileImageURL,
|
|
|
|
|
followers: result.user.followers.totalCount,
|
|
|
|
|
},
|
|
|
|
|
channel: {
|
|
|
|
|
description: result.user.description,
|
|
|
|
|
},
|
|
|
|
|
stream: result.user.stream ? {
|
|
|
|
|
isLive: true,
|
|
|
|
|
startTime: startTime,
|
|
|
|
|
preview: result.user.stream.previewImageURL,
|
|
|
|
|
viewers: result.user.stream.viewersCount,
|
|
|
|
|
title: result.user.stream.broadcaster.broadcastSettings.title,
|
|
|
|
|
language: language,
|
|
|
|
|
audienceType: result.user.stream.broadcaster.broadcastSettings.isMature ? 'Mature' : null,
|
|
|
|
|
category: {
|
|
|
|
|
name: result.user.stream.game.displayName,
|
|
|
|
|
id: result.user.stream.game.id,
|
|
|
|
|
}
|
|
|
|
|
} : { isLive: false },
|
|
|
|
|
chat: {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}, reject);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|