Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Supinic/supibot
Browse files Browse the repository at this point in the history
  • Loading branch information
Supinic committed Apr 25, 2024
2 parents fffba8d + d678e64 commit d286943
Showing 1 changed file with 39 additions and 9 deletions.
48 changes: 39 additions & 9 deletions crons/fetch-twitch-subscriber-list/index.mjs
Original file line number Diff line number Diff line change
@@ -1,24 +1,49 @@
let noConfigWarningSent = false;
let tooManySubsWarningSent = false;

export const definition = {
name: "fetch-twitch-subscriber-list",
expression: "0 0 * * * *",
description: "Fetches the current subscriber list, then saves it to sb.Cache",
code: (async function fetchTwitchSubscriberList () {
const requiredConfigs = [
"TWITCH_GQL_CLIENT_ID",
"TWITCH_CLIENT_ID",
"TWITCH_READ_SUBSCRIPTIONS_ACCESS_TOKEN",
"TWITCH_READ_SUBSCRIPTIONS_REFRESH_TOKEN",
"ADMIN_USER_ID"
];

if (!requiredConfigs.every(config => sb.Config.has(config, true))) {
const missingConfigs = requiredConfigs.filter(config => !sb.Config.has(config, true));
if (missingConfigs.length !== 0) {
if (!noConfigWarningSent) {
console.warn("Cannot fetch subscribers, config(s) are missing", { missingConfigs })
noConfigWarningSent = true;
}

return;
}

const response = await sb.Got("Helix", {
const identityResponse = await sb.Got("GenericAPI", {
url: "https://id.twitch.tv/oauth2/token",
method: "POST",
searchParams: {
grant_type: "refresh_token",
refresh_token: sb.Config.get("TWITCH_READ_SUBSCRIPTIONS_REFRESH_TOKEN"),
client_id: sb.Config.get("TWITCH_CLIENT_ID"),
client_secret: sb.Config.get("TWITCH_CLIENT_SECRET")
}
});

const authToken = identityResponse.body.access_token;
await Promise.all([
sb.Config.set("TWITCH_READ_SUBSCRIPTIONS_ACCESS_TOKEN", authToken),
sb.Config.set("TWITCH_READ_SUBSCRIPTIONS_REFRESH_TOKEN", identityResponse.body.refresh_token)
]);

const subsResponse = await sb.Got("Helix", {
url: "subscriptions",
headers: {
// client ID for @Supinic
"Client-ID": sb.Config.get("TWITCH_READ_SUBSCRIPTIONS_CLIENT_ID"),
// read subscriptions-only token for @Supinic
"Client-ID": sb.Config.get("TWITCH_CLIENT_ID"),
Authorization: `Bearer ${sb.Config.get("TWITCH_READ_SUBSCRIPTIONS_ACCESS_TOKEN")}`
},
searchParams: {
Expand All @@ -27,13 +52,18 @@ export const definition = {
}
});

if (response.statusCode !== 200) {
console.warn("Could not fetch subscriber list", { response });
if (!subsResponse.ok) {
console.warn("Could not fetch subscriber list", { subsResponse });
return;
}

/** @type {SubscriberData[]} */
const data = response.body.data;
const data = subsResponse.body.data;
if (data.length >= 100 && !tooManySubsWarningSent) {
console.warn("Maximum subscribers reached for a single Helix call! Update to use pagination", { data });
tooManySubsWarningSent = true;
}

await sb.Cache.setByPrefix("twitch-subscriber-list-supinic", data, {
expiry: 864e5 // 1 day
});
Expand Down

0 comments on commit d286943

Please sign in to comment.