various twitch fixes

master
vampi 9 months ago
parent ed15a5bd3a
commit 9e83426334

@ -77,6 +77,27 @@ class TwitchApi extends EventEmitter {
});
}
getUserInfo(login) {
return this.post({
"operationName":"ChannelShell",
"variables":{
"login":login
},
"query": `
query ChannelShell(
$login: String!
) {
user(login: $login) {
id
login
displayName
profileImageURL(width: 70)
}
}
`
});
}
channelShell(login) {
return this.post({
"operationName":"ChannelShell",
@ -91,7 +112,99 @@ class TwitchApi extends EventEmitter {
id
login
displayName
primaryColorHex
profileImageURL(width: 70)
followers {
totalCount
}
description
stream {
id
previewImageURL(width: 1920, height: 1080)
viewersCount
isEncrypted
broadcasterSoftware
createdAt
restriction {
id
options
type
exemptions {
type
}
}
tags {
id
localizedName
isAutomated
localizedDescription
tagName
}
broadcaster {
id
broadcastSettings {
id
title
isMature
}
}
viewersCount
self {
canWatch
isRestricted
restrictionType
}
game {
id
displayName
name
}
restriction {
id
type
}
type
}
channel {
id
self {
isAuthorized
restrictionType
}
trailer {
video {
id
self {
viewingHistory {
updatedAt
}
}
}
}
}
bannerImageURL
channel {
id
self {
isAuthorized
restrictionType
}
trailer {
video {
id
self {
viewingHistory {
updatedAt
}
}
}
}
home {
preferences {
heroPreset
}
}
}
}
}
`

@ -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);
});
}
}

@ -65,9 +65,11 @@ class TwitchChat extends Chat {
if(!channelData || !channelData.username)
return reject(new Error('No username specified!'));
var channel = new TwitchChannel(this, channelData);
let channel = new TwitchChannel(this, channelData);
this.channels.push(channel);
channel.id = channelData.username + '-' + this._generateRandomString(8);
this.channels[channel.id] = channel;
return resolve(channel);
});
@ -80,7 +82,7 @@ class TwitchChat extends Chat {
return;
}
this.api.channelShell(login).then((data) => {
this.api.getUserInfo(login).then((data) => {
this.userInfoCache[login] = data.user;
resolve(this.userInfoCache[login]);
}).catch((e) => {

Loading…
Cancel
Save