メインコンテンツまでスキップ
バージョン: v3.9

ボット独自のデータベースを使用する

ボット独自のデータベースは、HTTP通信をベースとしたサーバーです。
このサーバーをバックアップ先のサーバーとして使用するには、まずサーバーを構築する必要があります。

構築

サーバーの構築は、以下に示すAPI仕様に従って作るだけであるため、任意の言語で実装することができます。

API仕様

APIサーバーのエンドポイントはひとつで、クエリパラメーターもしくはリクエストボディのjsonデータによって動作を変えるようになっている必要があります。

GET (type=j)

各サーバーのステータス情報を返却します

リクエストクエリ:

?type=j&token={token}&guildid={guildid}

{token}: process.env.GAS_TOKEN に指定したトークン。これにより認証します。)
{guildid}: 要求するサーバーIDをカンマで連結したリスト(ex. 111111111111,22222222222,3333333333333)

レスポンス: トークンが一致すればデータベースに存在する各サーバーのJSONデータを返却します
例:

{"status": 200, "data": {"サーバーID": "文字列化したステータス情報", ...}}

失敗した場合は、ステータスコードだけのオブジェクトを返します。

{"status": 400}

GET (type=queue)

文字列化した各サーバーのキューを返却します

リクエストクエリ:

?type=queue&token={token}&guildid={guildid}

{token}: process.env.GAS_TOKEN に指定したトークン。これにより認証します。)
{guildid}: 要求するサーバーIDをカンマで連結したリスト(ex. 111111111111,22222222222,3333333333333)

レスポンス: トークンが一致すればデータベースに存在する各サーバーのJSONデータを返却します 例:

{"status": 200, "data": {"サーバーID": "文字列化したキュー", ...}}

失敗した場合は、ステータスコードだけのオブジェクトを返します。

{"status": 400}

POST (type=j)

データベースに文字列化した各サーバーのステータス情報を登録します。または既に存在する場合は更新します。

リクエストペイロード(JSON):

{
"token": "{token}",
"type": "j",
"guildid": "{guildid}",
"data": "{data}"
}

{token}: process.env.GAS_TOKEN に指定したトークン。これにより認証します。)
{guildid}: {data}に含まれるステータス情報のサーバーIDをカンマで連結したリスト
{data}: 以下のようなJSONを文字列化した文字列

{"サーバーID": "文字列化したステータス情報", ...}

レスポンス: トークンが一致すればデータベースを更新し、成功すれば、以下のようなJSONを返す

{"status": 200}

失敗した場合は、ステータスコードだけのオブジェクトを返します。

{"status": 400}

POST (type=queue)

データベースに文字列化した各サーバーのキューを登録します。または既に存在する場合は更新します。

リクエストペイロード(JSON):

{
"token": "{token}",
"type": "queue",
"guildid": "{guildid}",
"data": "{data}"
}

{token}: process.env.GAS_TOKEN に指定したトークン。これにより認証します。)
{guildid}: {data}に含まれるキューデータのサーバーIDをカンマで連結したリスト
{data}: 以下のようなJSONを文字列化した文字列

{"サーバーID": "文字列化したキュー", ...}

レスポンス: トークンが一致すればデータベースを更新し、成功すれば、以下のようなJSONを返す

{"status": 200}

失敗した場合は、ステータスコードだけのオブジェクトを返します。

{"status": 400}
情報

仕様上は、すべての応答でHTTP 200を返すことが望まれますが、後にあげるサンプルサーバーでは、正常に処理されたとき以外はHTTP 400を返すようになっています。

サーバーのサンプル実装

以下のサンプル実装を使用して、簡単にAPIサーバーを構築したり、あるいは各自のバックアップサーバーの構築の参考にすることができます。

  • Google Apps Script
    • このサンプルでは、Google Driveにキューのデータをバックアップし、ステータスのデータをGoogle Apps Scriptのプロパティとして保存します。
  • Node.js(ファイルベース)
    • このサンプルでは、package.jsonがあるディレクトリの.dataディレクトリの中にデータをファイルとして保存しています。
    • 環境変数としてTOKENを設定してください。これがGAS_TOKENの設定内容となります。
    • ポート番号は8082です。
    • npm run buildでコンパイルし、npm run startでサーバーを開始することができます。

ボットに構成する

GAS_URLに構築したサーバーのURL、GAS_TOKENに秘密のパスフレーズを設定してください。

情報

バックアップサーバーとGAS_TOKENに設定するパスフレーズは、セキュリティのためのものであり、同じ文字列が設定されてさえいれば、任意の文字列を指定することができます。