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

“LoginFailure: Improper token has been passed” / TokenInvalid

意味: ボットのログインに使っているトークンを Discord が拒否しました。表示されるメッセージはライブラリによって異なります。
  • discord.py: discord.errors.LoginFailure: Improper token has been passed.
  • discord.js v14: Error [TokenInvalid]: An invalid token was provided.
  • 古い discord.js: Error [TOKEN_INVALID]: An invalid token was provided.
  • その他のライブラリ: ログイン時に HTTP 401 Unauthorized。
発生理由:
  • Discord Developer Portal でトークンが再生成または失効しました。新しいトークンを生成すると、それが使われているすべての場所で古いトークンが即座に無効になります。
  • トークンの文字列に、誤ってコピーされた余分なスペースや引用符が含まれています。
  • コードが誤った環境変数を読み込んでいるか、Square Cloud にその変数が設定されていません。
修正方法:
  1. Developer Portal → アプリケーション → Bot → Reset Token に移動します。
  2. アプリケーションの環境変数でトークンを更新します(ダッシュボードの 設定 → 環境変数、または squarecloud app env set)。トークンを 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 → アプリケーション → Bot → Privileged Gateway Intents → Message 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 をバインドしますが、ボットはエッジを通してポート 443 に secure: true で接続する必要があります。
  3. バージョンの不一致を修正した後、Lavalink アプリケーションとボットアプリケーションの両方を再起動します。
Lavalink ホスティングの完全なセットアップ(設定ファイル、ポート、デプロイ)については、Lavalink サーバーのチュートリアルを参照してください。

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

意味: ローカル環境でボットを実行するとログインは問題ないのに、デプロイ後にオフラインになる(または繰り返し再起動する)。 よくある発生理由:
  • ゲートウェイレベルでの接続が不安定で、再接続処理がない。
  • ローカルでテストした依存関係のバージョンと、依存関係ファイルに記載されているバージョンが競合または非互換になっている。
  • RAM や CPU の超過、または Discord API への過剰なリクエストによって、ボットが停止された。この場合、ログに [SQUARE-SHIELD] の行が表示され、メールが届きます。ステータスの表を参照してください。
修正方法:
  1. まずダッシュボードでアプリケーションのログを確認してください。実際のクラッシュ原因が示されます。
  2. 一時的なエラーでプロセスがクラッシュしないよう、エラーハンドラを追加します。discord.js では process.on("unhandledRejection", ...) と client.on("error", ...)、discord.py では同等の処理を行います。
  3. squarecloud.app に AUTORESTART=true を追加して、クラッシュ後に Square Cloud がボットを再起動するようにします。デフォルトでは無効で、再起動されるのは AUTORESTART に記載された条件のときだけです。一時的なエラーの間もボットを稼働させ続けられますが、無効なトークン、構文エラー、依存関係の欠落が直るわけではないため、それらはコード側での修正が必要です。
  4. Discord API のレート制限(429)に注意してください。グローバル制限はボットトークンあたり概ね 50 リクエスト/秒で、ルートごとにさらに厳しい制限があります(チャンネルの作成/編集はチャンネルあたり 10 分でおよそ 2 回まで)。積極的にキャッシュし、X-RateLimit-Remaining/X-RateLimit-Reset-After ヘッダーを尊重する非同期キューを使い、大量送信には Webhook を使用してください。Discord へのリクエストを送り続けるボットは ABUSE_REQUESTS で停止されます。

関連ガイド

ログを見ても明確な原因が分からない場合は、サポートチームがさらに深く調査をお手伝いします。

お問い合わせ

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