0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【第ニ章】Twitchのチャットボットを作る。~メッセージに反応する~

Last updated at Posted at 2023-01-01

前回

前回は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のドキュメントが未整備なので、次回はドキュメントを作成作業が終わり次第出します!

リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?