公式のDiscord APIは、ボットとクライアント向けに作られた低レベルのインターフェースです。ゲートウェイイベントを直接扱い、キャッシュを手動で管理し、インテントを調整する必要があります。Noxyrサーバー APIは、1つのサーバーに限定された高レベルのHTTP APIで、完成済みの分析データを返します。両者は異なる問題を解決します。それぞれをいつ使うべきかを説明します。

Discord's gateway events and the Noxyr Server API's simple GET request both feed into your app. Discord API Gateway Noxyr API GET /v1 JSON Your app react to events read live stats

Discord APIが提供するもの

Discord APIのドキュメント(検索されることが非常に多く、Google Trendsでは「discord api documentation」の検索が前年比700%増と示されています)は、Discord自体が管理するすべてのものに関する一次情報源です。メッセージ、ユーザー、ギルド、ロール、チャンネル、ボイス、スレッド、モデレーションなどが対象です。操作にはREST APIを、イベントにはWebSocketゲートウェイを利用します。リアルタイムで何かを作るには、永続的な接続を開き、READYとハートビートを処理し、キャッシュの無効化とレート制限のバケットを扱う必要があります。

Noxyrサーバー APIが提供するもの

Noxyrサーバー APIははるかに小さなインターフェースです。ベアラートークンによって1つのサーバーに限定された、読み取り専用のエンドポイントが6つあります。「今月のチケットは何件か?」や「通貨ごとの売上は?」といった質問に答えます。Discord APIではこれらに答えられません。基礎となるデータはDiscordではなく、Noxyrのデータベースにあるからです。

並べて比較

  • 認証:Discordは、インテント付きのOAuth2またはボットトークンを使います。Noxyrは、サーバーごとに1つのベアラートークンを使います。
  • 通信方式:Discordは、REST+WebSocketゲートウェイです。Noxyrは、ブラウザ向けにCORSを有効にした通常のHTTPSです。
  • 対象範囲:Discordは、ボットが参加しているすべてのサーバーにまたがるグローバルなものです。Noxyrは、特定の1つのサーバーに紐づけられます。
  • データの形:Discordは、ギルド、メンバー、メッセージなどの生のオブジェクトを返します。Noxyrは、集計値、合計、平均、日ごとのバケットを返します。
  • レート制限:Discordは、ルートごとのバケット制限を使います。Noxyrは、キーごとに一律60リクエスト/分です。
  • セットアップの手間:Discordでは、ボットアプリ、招待、インテント、イベントハンドラーが必要です。Noxyrでは、キーを生成するのに1クリックで済みます。

Discordを選ぶべき場合…

  • リアルタイムのイベントが必要な場合です(メッセージが届いた、メンバーが参加した、ボイスチャンネルが変わった、など)。
  • アプリからメッセージを送信したり、チャンネルを編集したり、ユーザーをBANしたり、ロールを管理したりしたい場合です。
  • Discordボットやサードパーティ製のDiscordクライアントを開発している場合です。

Noxyrサーバー APIを選ぶべき場合…

  • ボットを維持せずに、公開Webサイトでサーバーのライブ統計を表示したい場合です。
  • チケットの分析、売上データ、レビューの平均、ギブアウェイ(プレゼント企画)への参加状況が必要な場合です。これらはDiscordが保存していないデータです。
  • プロキシを使わずに、ブラウザのダッシュボードから呼び出せる、CORSに対応したJSONが欲しい場合です。
  • 安定したバージョン管理されたインターフェースが欲しい場合です。スコープの切り替えによって、何も再デプロイせずにデータの公開を止められます。

両方を組み合わせて使う

2つのAPIは相性が良い組み合わせです。自分のボットではDiscord APIを使ってイベントに反応し、Webサイトでは、Noxyrサーバー APIを使って集計された状態を読み取ります。こうすれば、公開ダッシュボードにボットのインテントやゲートウェイ接続は一切不要で、HTTPSリクエスト1回で十分です。

関連情報:サーバー APIのチュートリアル、設計の原則、Discord APIエラーへの対処。