前回
前回はTwitchトークンを取得して、Bot起動までやった。
現在のコード
index.js
const { TwitchClient } = require("@suzuki3jp/twitch.js");
// クライアントのオプション定義
const authOptions = {
accessToken: "token",
refreshToken: "refresh token",
clientId: "client id",
clientSecret: "client secret",
};
const clientOptions = { channels: ["hoge"] };
// クライアント定義
const client = new TwitchClient(authOptions, clientOptions);
// readyイベント
client.on("ready", () => {
console.log("twitch client is ready!");
});
client.login();
トークンのリフレッシュ時に保存する
Twitchのトークンには期限があり、その期限が切れる前にrefresh token
を使用してtoken
をリフレッシュしています。
これで極論ずっとメンテナンスをしなくてもAPIが廃止されない限り、運用できます!
しかし、ここで一つ問題が
リフレッシュ後のトークンをどこにも保存していないので、何らかのトラブルで、Botが落ちた時に次回以降のログインが元のトークンだとできなくなっています。
それを解消するために、AuthConfig#onRefresh
を使って、トークンがリフレッシュされた時に実行される関数にトークン保存の処理を入れます。
authConfig.json
{
"accessToken": "token",
"refreshToken": "refresh token",
"clientId": "client id",
"clientSecret": "client secret",
}
index.js
const { TwitchClient } = require("@suzuki3jp/twitch.js");
const { writeFileSync } = require("fs");
const path = require("path");
// クライアントのオプション定義
const authConfig = require("./authConfig.json");
authConfig.onRefresh = (accessToken) => {
// accessTokenの中身 -> https://twurple.js.org/reference/auth/interfaces/AccessToken.html
// 新しいトークンデータを含んだオブジェクトを定義
const newAuthConfig = {
accessToken: accessToken.accessToken,
refreshToken: accessToken.refreshToken,
clientId: authConfig.clientId,
clientSecret: authConfig.clientSecret,
};
const data = JSON.stringify(newAuthConfig, null, "\t");
writeFileSync(path.resolve(__dirname, "./authConfig.json"), data); // authConfig.jsonに新しいデータを保存
};
const clientOptions = { channels: ["hoge"] };
// クライアント定義
const client = new TwitchClient(authOptions, clientOptions);
// readyイベント以下省略
トークンなどのデータをjson
ではなく.env
で管理している人もいると思います。
.env
でも同様にonRefresh
の中で保存の処理をしてあげることで、永続化することができます。
オブジェクト形式から.env
の記法にパースするutilはこちら↓
メッセージを出力する
index.js
// クライアント、オプション定義部分などは省略
client.on("messageCreate", (message) => {
// ここでメッセージが送信された時の処理を記述する
console.log(`${message.member.name}: ${message.content}`);
});
hoge
さんがあいうえお
とコメントしたときのconsole↓
hoge: あいうえお
今回はこれで以上です。twitch.js
のドキュメントが未整備なので、次回はドキュメントを作成作業が終わり次第出します!