discord について
Discord連携の実装と自動化を支援するスキルです。Webhook、Bot REST API、インタラクションの方式に加え、認証情報の管理、メンション制御、レート制限への対処を説明します。
主な機能
- 01受信Webhookの利用ガイド
- 02Bot REST APIによるメッセージ自動化
- 03スラッシュコマンドとインタラクション設定
- 04Python投稿スクリプトを同梱
- 05認証情報とレート制限の安全対策
活用シーン
- 01CIビルド通知の送信
- 02Botとしてチャンネルに投稿
- 03ユーザー起動型スラッシュコマンドの構築
- 04Discord APIのレート制限への対処
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ openhands/ extensions --skill discordインストール後、Claude Code で/discordを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
__init__.pyREADME.md.plugin/plugin.jsonreferences/REFERENCE.mdscripts/__init__.py_http.pypost_webhook.pysend_message.py詳細
Discord
Discord 連携を実装または自動化する場合は、このスキルを使用してください。
適切な方法を選ぶ
-
受信 Webhook(一方向の投稿に最適)
- CI 通知、アラート、ビルド状況などに適しています。
- ボットユーザーは不要です。
- 参照先:https://discord.com/developers/docs/resources/webhook#execute-webhook
-
ボットトークン+REST API(双方向/高度な自動化)
- ボットとして投稿する、チャンネルを管理する、履歴を読む、モデレーションを行うなどの場合に使用します。
- REST API のベース URL:
https://discord.com/api/v10 - ほとんどの REST 呼び出しでは
Authorization: Bot <token>を使用します。
-
インタラクション/スラッシュコマンド(ユーザーが呼び出すコマンド)
- アプリケーションコマンドとインタラクション Webhook を使用します。
- 通常、インタラクションを受信し、すばやく応答するための Web サーバーが必要です。
シークレットと安全性
- トークンをハードコードしないでください。環境変数を使用します。
- 受信 Webhook には
DISCORD_WEBHOOK_URL - ボットの REST API 呼び出しには
DISCORD_BOT_TOKEN
- 受信 Webhook には
- Webhook URL はシークレットとして扱ってください(トークンが含まれています)。
- 通常のユーザーアカウントを「セルフボット」として自動化しないでください。公式のボット/OAuth フローを使用してください。
ありがちな落とし穴/安全上の注意(必ずお読みください)
- Webhook URL はシークレットです(トークンが URL に埋め込まれています)。課題、ログ、CI 出力、チャットに貼り付けないでください。
- メンションはデフォルトで危険です:誤って
@everyoneやロールに通知しないよう、常にallowed_mentionsを厳格な値に設定してください(以下の例では{"parse": []}を使用しています)。 - シークレットを誤ってログに記録しないよう注意してください:
- 独自のスクリプトを作成する場合は、例外メッセージに Webhook URL 全体を含めないでください。
- 同梱のスクリプトはエラー出力内の Webhook URL をサニタイズしますが、自分で URL を出力しないようにしてください。
- レート制限:HTTP 429 には
retry_after/Retry-Afterで対処し、無限に再試行しないでください。
すぐに使えるレシピ
以下のシェルのスニペットでは、POSIX 形式の環境変数と行継続を使用しています。Windows PowerShell では、記載のフラグに curl.exe を使用し、環境変数には $env:DISCORD_WEBHOOK_URL/$env:DISCORD_BOT_TOKEN を使用するか、リクエストを Invoke-RestMethod に置き換えてください。
受信 Webhook でメッセージを投稿する(推奨)
Discord では、content、embeds、components、file、poll のうち少なくとも 1 つが必要です。
curl -sS -X POST \
-H 'Content-Type: application/json' \
-d '{"content":"Hello from OpenHands","allowed_mentions":{"parse":[]}}' \
"$DISCORD_WEBHOOK_URL"
ボットトークンでチャンネルにメッセージを投稿する
エンドポイント:POST /channels/{channel_id}/messages(メッセージの作成)
CHANNEL_ID="..."
curl -sS -X POST "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages" \
-H "Authorization: Bot $DISCORD_BOT_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"content":"Hello from my bot","allowed_mentions":{"parse":[]}}'
ドキュメント:https://discord.com/developers/docs/resources/channel#create-message
自動化スクリプト(同梱)
これらのスクリプトは自己完結型で、Python の標準ライブラリのみを使用します。
-
Webhook に投稿する:
python3 -m skills.discord.scripts.post_webhook --content "Build finished" --wait -
ボットトークンを使用してチャンネルに投稿する:
python3 -m skills.discord.scripts.send_message --channel-id "$CHANNEL_ID" --content "Hello"
レート制限
- 制限値をハードコードしないでください。Discord の
Retry-After/retry_afterと、利用可能な場合はレート制限ヘッダーを使用します。 - HTTP 429 の場合は、指定された待機時間(妥当な上限を設け、少量のジッターを加えます)待ってから再試行してください。
ドキュメント:https://discord.com/developers/docs/topics/rate-limits
スラッシュコマンド/アプリケーションコマンド
- すばやく反復する場合は、ギルドコマンドを使用します(即時に更新されます)。
- 準備が整ったら、グローバルコマンドを使用します。反映に時間がかかる場合があります。
ドキュメント:https://discord.com/developers/docs/interactions/application-commands
参考資料
詳細(OAuth2 フロー、コマンド登録エンドポイント、トラブルシューティング)については、以下を参照してください。