mcpField
D
discord

discord

github.com/openhands生産性17559 回インストール1 日前に更新
リポジトリ

discord について

Discord連携の実装と自動化を支援するスキルです。Webhook、Bot REST API、インタラクションの方式に加え、認証情報の管理、メンション制御、レート制限への対処を説明します。

主な機能

  1. 01受信Webhookの利用ガイド
  2. 02Bot REST APIによるメッセージ自動化
  3. 03スラッシュコマンドとインタラクション設定
  4. 04Python投稿スクリプトを同梱
  5. 05認証情報とレート制限の安全対策

活用シーン

  1. 01CIビルド通知の送信
  2. 02Botとしてチャンネルに投稿
  3. 03ユーザー起動型スラッシュコマンドの構築
  4. 04Discord APIのレート制限への対処

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/openhands/extensions --skill discord

インストール後、Claude Code で/discordを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

__init__.py
README.md
.plugin/
plugin.json
references/
REFERENCE.md
scripts/
__init__.py
_http.py
post_webhook.py
send_message.py

詳細

Discord

Discord 連携を実装または自動化する場合は、このスキルを使用してください。

適切な方法を選ぶ

  1. 受信 Webhook(一方向の投稿に最適)

  2. ボットトークン+REST API(双方向/高度な自動化)

    • ボットとして投稿する、チャンネルを管理する、履歴を読む、モデレーションを行うなどの場合に使用します。
    • REST API のベース URL:https://discord.com/api/v10
    • ほとんどの REST 呼び出しでは Authorization: Bot <token> を使用します。
  3. インタラクション/スラッシュコマンド(ユーザーが呼び出すコマンド)

    • アプリケーションコマンドとインタラクション Webhook を使用します。
    • 通常、インタラクションを受信し、すばやく応答するための Web サーバーが必要です。

シークレットと安全性

  • トークンをハードコードしないでください。環境変数を使用します。
    • 受信 Webhook には DISCORD_WEBHOOK_URL
    • ボットの REST API 呼び出しには DISCORD_BOT_TOKEN
  • 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 フロー、コマンド登録エンドポイント、トラブルシューティング)については、以下を参照してください。

コメント