1
0

⬆️ Upgrade dependencies and migrate to @twurple/*

This commit is contained in:
2022-01-06 01:16:49 +01:00
parent f1ea2a1b64
commit 213fb9d390
7 changed files with 639 additions and 650 deletions

View File

@@ -3,7 +3,7 @@ import { getAuthProvider, getUsernameFromId } from "../helpers/twitch";
import { Action } from "../../interfaces/actions/Action";
import { ActionType } from "../../enums/ActionType";
import { ChatClient } from "twitch-chat-client";
import { ChatClient } from "@twurple/chat";
import { broadcast } from "../helpers/webServer";
import { start } from "../helpers/miniDb";
@@ -20,7 +20,10 @@ async function connect(channels: Array<any>): Promise<void> {
return;
}
chatClient = new ChatClient(authProvider, { channels: channels });
chatClient = new ChatClient({
authProvider,
channels
});
chatClient.onConnect(onConnect);

View File

@@ -1,20 +1,17 @@
import { TokenData } from "../../interfaces/TokenData";
import { AccessToken } from "@twurple/auth";
import { promises as fs } from "fs";
import { resolve } from "path";
const TOKENS_FILE = "tokens.json";
const LOG_PREFIX = "[TokenData] ";
export {
getTokenData,
saveTokenData
};
export { getTokenData, saveTokenData };
function getTokenDataFilePath(): string {
return resolve(process.cwd(), TOKENS_FILE);
}
async function getTokenData(): Promise<TokenData> {
async function getTokenData(): Promise<AccessToken> {
const tokenDataFilePath = getTokenDataFilePath();
let buffer: Buffer;
@@ -34,7 +31,7 @@ async function getTokenData(): Promise<TokenData> {
return tokenData;
}
async function saveTokenData(tokenData: TokenData): Promise<void> {
async function saveTokenData(tokenData: AccessToken): Promise<void> {
const tokenDataFilePath = getTokenDataFilePath();
const jsonTokenData = JSON.stringify(tokenData);
@@ -42,8 +39,8 @@ async function saveTokenData(tokenData: TokenData): Promise<void> {
console.log(`${LOG_PREFIX}Token data saved`);
}
function checkTokenData(tokenData: TokenData): void {
if (!tokenData.access_token || !tokenData.refresh_token) {
function checkTokenData(tokenData: AccessToken): void {
if (!tokenData.accessToken || !tokenData.refreshToken) {
console.error(
`${LOG_PREFIX}Missing refresh_token or access_token in ${TOKENS_FILE}.`
);

View File

@@ -1,29 +1,17 @@
import {
AccessToken,
RefreshableAuthProvider,
StaticAuthProvider
} from "twitch-auth";
import { AccessToken, RefreshingAuthProvider } from "@twurple/auth";
import { getTokenData, saveTokenData } from "./tokenData";
import { ApiClient } from "twitch";
import { ApiClient } from "@twurple/api";
import { ClientCredentials } from "../../interfaces/ClientCredentials";
import { TokenData } from "../../interfaces/TokenData";
const LOG_PREFIX = "[Twitch] ";
let refreshAuthProvider: RefreshableAuthProvider;
let refreshAuthProvider: RefreshingAuthProvider;
export {
getAuthProvider,
getApiClient,
getUsernameFromId
};
export { getAuthProvider, getApiClient, getUsernameFromId };
function getClientCredentials(): ClientCredentials {
if (
!process.env.TWITCH_CLIENT_ID ||
!process.env.TWITCH_CLIENT_SECRET
) {
if (!process.env.TWITCH_CLIENT_ID || !process.env.TWITCH_CLIENT_SECRET) {
console.error(
`${LOG_PREFIX}Missing environment parameters TWITCH_CLIENT_ID or TWITCH_CLIENT_SECRET`
);
@@ -36,57 +24,31 @@ function getClientCredentials(): ClientCredentials {
};
}
async function createStaticAuthProvider(): Promise<StaticAuthProvider> {
let tokenData = await getTokenData();
const credentials = getClientCredentials();
return new StaticAuthProvider(credentials.clientId, tokenData.access_token);
}
async function getAuthProvider(): Promise<RefreshableAuthProvider> {
async function getAuthProvider(): Promise<RefreshingAuthProvider> {
if (refreshAuthProvider) {
return refreshAuthProvider;
}
let tokenData = await getTokenData();
const staticAuthProvider = await createStaticAuthProvider();
const credentials = getClientCredentials();
const expiry =
tokenData.expiryTimestamp === null
? null
: new Date(tokenData.expiryTimestamp);
refreshAuthProvider = new RefreshableAuthProvider(staticAuthProvider, {
clientSecret: credentials.clientSecret,
refreshToken: tokenData.refresh_token,
expiry,
onRefresh: onRefresh
});
refreshAuthProvider = new RefreshingAuthProvider(
{
clientId: credentials.clientId,
clientSecret: credentials.clientSecret,
onRefresh
},
tokenData
);
return refreshAuthProvider;
}
async function onRefresh(refreshData: AccessToken): Promise<void> {
const {
accessToken,
refreshToken,
expiryDate
} = refreshData;
console.log(`${LOG_PREFIX}Tokens refreshed`);
const expiryTimestamp = expiryDate === null
? 0
: expiryDate.getTime();
const newTokenData: TokenData = {
access_token: accessToken,
refresh_token: refreshToken,
expiryTimestamp
};
await saveTokenData(newTokenData);
await saveTokenData(refreshData);
}
async function getApiClient(): Promise<ApiClient> {

View File

@@ -1,13 +1,14 @@
import { PubSubClient, PubSubRedemptionMessage } from "twitch-pubsub-client";
import { PubSubClient, PubSubRedemptionMessage } from "@twurple/pubsub";
import { RedemptionIds } from "../../enums/Redemptions";
import { RedemptionMessage } from "../../interfaces/RedemptionMessage";
import { UserIdResolvable } from "twitch";
import { UserIdResolvable } from "@twurple/api";
import { broadcast } from "../helpers/webServer";
import { getApiClient } from "../helpers/twitch";
import { getAuthProvider } from "../helpers/twitch";
import { getVip } from "./actions/getVip";
import { hidrate } from "./actions/hidrate";
import { highlightMessage } from "./actions/highlightMessage";
import { rawDataSymbol } from "@twurple/common";
import { russianRoulette } from "./actions/russianRoulette";
import { stealVip } from "./actions/stealVip";
import { timeoutFriend } from "./actions/timeoutFriend";
@@ -15,10 +16,11 @@ import { timeoutFriend } from "./actions/timeoutFriend";
const LOG_PREFIX = "[PubSub] ";
async function registerUserListener(user: UserIdResolvable) {
const apiClient = await getApiClient();
const pubSubClient = new PubSubClient();
const userId = await pubSubClient.registerUserListener(apiClient, user);
const userId = await pubSubClient.registerUserListener(
await getAuthProvider(),
user
);
/*const listener = */ await pubSubClient.onRedemption(userId, onRedemption);
console.log(`${LOG_PREFIX}Connected & registered`);
@@ -26,24 +28,23 @@ async function registerUserListener(user: UserIdResolvable) {
async function onRedemption(message: PubSubRedemptionMessage) {
console.log(
`${LOG_PREFIX}Reward: "${message.rewardName}" (${message.rewardId}) redeemed by ${message.userDisplayName}`
`${LOG_PREFIX}Reward: "${message.rewardTitle}" (${message.rewardId}) redeemed by ${message.userDisplayName}`
);
// @ts-ignore
const reward = message._data.data.redemption.reward;
const raw = message[rawDataSymbol];
const msg: RedemptionMessage = {
id: message.id,
channelId: message.channelId,
rewardId: message.rewardId,
rewardName: message.rewardName,
rewardName: message.rewardTitle,
rewardImage: message.rewardImage
? message.rewardImage.url_4x
: "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png",
message: message.message,
userId: message.userId,
userDisplayName: message.userDisplayName,
// non directly available values from PubSubRedemptionMessage
backgroundColor: reward.background_color
backgroundColor: raw.data.redemption.reward.background_color
};
let handledMessage: RedemptionMessage | undefined;