メインコンテンツへスキップ
Square Cloud での Discord ボットのエラーは、たいていトークン、ゲートウェイインテント、または Lavalink とのバージョンの不一致に起因します。以下から正確なメッセージを見つけてください。

“LoginFailure: Improper token has been passed” / TOKEN_INVALID

意味: ログインに使用しているトークンをライブラリが拒否しています(discord.js は LoginFailure/「An invalid token was provided」を投げ、他のスタックでは 401 の TOKEN_INVALID が返されます)。 発生理由:
  • Discord Developer Portal でトークンが再生成または失効しました。新しいトークンを生成すると、それが使われているすべての場所で古いトークンが即座に無効になります。
  • トークンの文字列に、誤ってコピーされた余分なスペースや引用符が含まれています。
  • コードが誤った環境変数を読み込んでいます。
修正方法:
  1. Developer Portal → アプリケーション → BotReset Token に移動します。
  2. Square Cloud ダッシュボードのこのアプリケーションの環境変数でトークンを更新します。トークンを .zip にアップロードされるファイルにコミットしないでください。
  3. 値の前後に余分なスペースや引用符がないか再確認します。
  4. ライブラリを更新します(discord.js@latest または pip install -U discord.py)。
  5. アプリケーションを再起動します。
ボットトークンをソースファイルにハードコーディングしないでください。必ずダッシュボードで設定した環境変数から読み込んでください。

“Used disallowed intents” / Message Content Intent

意味: ボットはログインしてオンラインに見えるものの、すべてのメッセージを無視するか、ゲートウェイが「used disallowed intents」で接続を拒否します。 発生理由: 2022 年以降、Message Content は特権インテントです。両方の場所で明示的に有効化されていないと、メッセージ内容が空で届くか(あるいはコードがアプリで有効化されていないインテントを宣言している場合はゲートウェイ接続自体が拒否されます)。 両方の場所での修正方法:
  1. Discord Developer Portal → アプリケーション → BotPrivileged Gateway IntentsMessage Content Intent を有効化します。
  2. コード側でも宣言します。
  1. アプリケーションを再起動します。
ボットが 100 サーバーを超えると、Message Content を含む特権インテントには、同じ Developer Portal のページから申請する Discord の承認も必要になります。
意味: ボットの Lavalink クライアントが WebSocket を異常終了(コード 1006)で閉じます。多くの場合、その直前に「Unexpected server response: 400」が出ています。 発生理由: これはバージョンの不一致です。Lavalink v4 は REST ベースであり、v3 向けに構築されたクライアントラッパーとは互換性がないため、ハンドシェイクが失敗しソケットが 1006 で閉じます。 修正方法:
  1. ボットの Lavalink クライアントラッパーのバージョンを Lavalink サーバーのメジャーバージョンに合わせます(v3 クライアントには v3 サーバー、v4 クライアントには v4 サーバー)。
  2. Square Cloud 上では、Lavalink サーバー自体はポート 80 をバインドしますが、ボットはエッジを通してポート 443secure: true で接続する必要があります。
  3. バージョンの不一致を修正した後、Lavalink アプリケーションとボットアプリケーションの両方を再起動します。
Lavalink ホスティングの完全なセットアップ(設定ファイル、ポート、デプロイ)については、Lavalink サーバーのチュートリアルを参照してください。

ローカルでは動くのに、デプロイ後ボットがオフラインになる

意味: ローカル環境でボットを実行するとログインは問題ないのに、デプロイ後にオフラインになる(または繰り返し再起動する)。 よくある発生理由:
  • ゲートウェイレベルでの接続が不安定で、再接続処理がない。
  • ローカルでテストした依存関係のバージョンと、依存関係ファイルに記載されているバージョンが競合または非互換になっている。
  • レート制限への過度なアクセスによる Discord API の悪用トリガー(この場合、アカウントに通知メールが届きます)。
修正方法:
  1. まずダッシュボードでアプリケーションのログを確認してください。実際のクラッシュ原因が示されます。
  2. 一時的なエラーでプロセスがクラッシュしないよう、エラーハンドラを追加します。discord.js では process.on("unhandledRejection", ...)client.on("error", ...)、discord.py では同等の処理を行います。
  3. Square Cloud は、直前の稼働時間が 60 秒を超えていて、終了ステータスが 1 であり、過去 60 分以内に自動再起動していない場合に、クラッシュしたアプリを自動再起動します(マニフェストの AUTORESTART)。これにより一時的なエラーを乗り越えてボットを稼働させ続けられますが、根本的なコードのエラー、構文エラー、依存関係の欠落は修正されないため、コード側での修正が必要です。
  4. Discord API のレート制限(429)に注意してください。グローバル制限はボットトークンあたり概ね 50 リクエスト/秒で、ルートごとにさらに厳しい制限があります(チャンネルの作成/編集はチャンネルあたり 10 分でおよそ 2 回まで)。積極的にキャッシュし、X-RateLimit-Remaining/X-RateLimit-Reset-After ヘッダーを尊重する非同期キューを使い、大量送信には Webhook を使用してください。
ゼロからのセットアップについては、Discord ボットホスティングのチュートリアルを参照してください。
ログを見ても明確な原因が分からない場合は、サポートチームがさらに深く調査をお手伝いします。

お問い合わせ

技術的な問題が解決しない場合は、専門のサポートチームがお手伝いします。お問い合わせいただければ、どのような問題でも喜んで解決をサポートいたします — サポートの質の高さも、開発者が Google と Trustpilot で Square Cloud に402 件のレビューで 4.9/5という評価をつけている理由の 1 つです。