# Discord

Source: https://langbot.app/docs/ja/usage/platforms/discord

LangBot で Discord AI ボットを構築。GPT・Claude・Gemini・DeepSeek・Dify を数分で Discord サーバーに接続。

## アプリとボットを作成する

[Discord Developer Portal](https://discord.com/developers/applications) で **New Application** を選択します。アプリ名に `Discord` を含めると作成が拒否されます。画面に従って規約の確認と認証を完了してください。

1. **General Information** の **Application ID** をコピーします。LangBot の「クライアント ID」に使う値で、サーバー ID やチャンネル ID とは異なります。
2. **Bot → Reset Token** で認証を完了し、表示されたトークンを LangBot に入力します。表示は一度だけです。スクリーンショット、コード、公開メッセージには含めないでください。再生成すると旧トークンは無効になるため、LangBot 側も更新します。
3. **Privileged Gateway Intents** の **Server Members Intent** と **Message Content Intent** を有効にし、**Save Changes** で保存します。新アダプターは両方を要求します。**Presence Intent は不要です**。

## LangBot に接続する

新しい **Discord** アダプター（`discord-omni`）でボットを作成し、クライアント ID とトークンを入力して保存します。

続いてイベント処理を設定します。

- **Pipeline**：「受信メッセージへの返信」ルールを追加し、`message.received` をモデル設定済みの Pipeline に割り当てます。ボットのイベントルートの**トリガー条件**で、本文・会話タイプ・メッセージ要素を指定します。明示的なイベントルートは Pipeline 内のグループ応答ルールをスキップするため、無条件のルートはすべての受信メッセージを処理します。メンション要素の条件はボット以外への @ メンションにも一致します。
- **Agent**：イベントを Agent に割り当て、イベント返信ツールで実際にメッセージを送るよう指示します。テキストの生成だけでは送信されません。必要なツールだけを選択します。
- **プラグイン処理器**：ボット画面で既存のプラグイン処理器設定を別途追加します。プラグインが宣言したイベントを独立して受信し、Pipeline や Agent と併用できます。

コード実行やファイル生成には、利用可能な Box サンドボックスを有効にします。添付ファイルのために無関係な MCP サーバーを有効にする必要はありません。認証情報のない外部ツールは別のエラー原因になります。

ボットを有効にし、ログの `Discord adapter running as ...` を確認します。これは Gateway ログインの確認です。経路と配信の確認には Discord から実際にメッセージを送信してください。

## テストサーバーに追加する

**OAuth2 → URL Generator** で `bot` と **Guild Install** を選びます。通常のメッセージ、画像、ファイルのテストには次の権限を使用できます。

- View Channels
- Send Messages
- Embed Links
- Attach Files
- Read Message History
- Add Reactions

生成されたリンクを開き、自分のテストサーバーを選択して認証します。Administrator は不要です。メンバー管理やスレッドの権限は必要な場合だけ追加します。チャンネル固有の権限でも閲覧と送信が許可されている必要があります。

## 実際の送受信を確認する

サーバーのチャンネルで応答条件に一致するメッセージを送信し、ボットのプロフィールから DM も開きます。両方で通常返信、段階的なストリーミング、画像・テキストファイルの入力、添付ファイルの返送を確認します。返信文にファイル名や保存先が書かれているだけでは配信の証拠になりません。

Discord には一通の文字数制限があるため、長いストリーミング出力は分割して送信する必要があります。最後の部分と終了マーカーまで確認してください。LangBot の成功ログだけでは完全な配信を保証できません。画像認識には視覚対応モデル、ファイル処理には適切なツールとサンドボックスが必要です。

アダプターは編集、削除、リアクションの追加・削除、メンバーの参加・退出、ボットの参加・退出、プラットフォーム固有イベントも提供します。Pipeline はメッセージを処理するため、その他のイベントは Agent またはプラグインに割り当てます。対話の送信イベントは LangBot が送った対話コンポーネントから発生し、Discord の全イベントをそのまま転送する機能ではありません。

メッセージイベントの `chat_id` はチャンネル ID、`group.id` はサーバー ID です。チャンネルへの送信にはチャンネル ID、サーバーやメンバーの照会・管理にはサーバー ID を使います。混同しないでください。

メンバーの参加・退出イベントには送信元チャンネルがありません。返信にはサーバーで設定された **システムメッセージのチャンネル** を使用します。Discord のサーバー設定で指定し、Bot にチャンネルの閲覧とメッセージ送信を許可してください。未設定の場合、返信は明示的に失敗します。退出コールバックでは自主退出とキックを区別できないため、`is_kicked` を確実な管理判断に使用しないでください。

![Discord への実際の配信：プラグインが画像とテキストファイルを返し、その後 Pipeline の DM 返信も成功しています。](https://langbot.app/docs/images/zh/deploy/bots/discord/attachment-roundtrip.jpg)

## トラブルシューティング

- **Gateway に接続できない**：最新トークンと必須の二つの Intent、保存状態を確認します。ブラウザーのログイン成功はボットの認証成功とは別です。

- **オンラインでも返信がない**：有効化、イベント経路、モデル、応答条件、チャンネル権限を確認します。独立したプラグイン購読は別設定です。

- **添付ファイルで失敗する**：添付権限、実行ログ、Box の状態、添付 CDN への接続を確認します。Gateway と CDN の到達性は別々です。

- **ネットワーク制限**：LangBot から Discord の Gateway、API、添付 CDN に接続できる必要があります。必要に応じて環境に合ったプロキシを設定します。

- **スクリーンショット**：トークンや実際の利用者の私的な会話を含めないでください。

- **古い会話で添付の 404 が発生する**：Discord の添付 URL は期限切れになり、過去の画像によって後続のテキストだけの要求も失敗することがあります。添付を再アップロードし、会話のコンテキストをリセットしてください。EssentialCommands を導入している場合は `!reset` を送信できます（接頭辞はインスタンス設定に従います）。監視ログは削除されません。
