discord-bot について
Discordでのマーケティングやコミュニティ運営向けに、WebhookまたはDiscord Bot APIでメッセージを作成・送信するスキルです。curlでAPIを呼び出し、埋め込み、メッセージ管理、リアクション、投稿テンプレートを扱います。
主な機能
- 01WebhookとBot APIでの投稿
- 02通常メッセージと埋め込みの送信
- 03Botメッセージの編集と削除
- 04Bot APIによるリアクション追加
- 05告知やイベント用テンプレート
活用シーン
- 01チャンネルへの製品告知の投稿
- 02埋め込みでのブログ記事共有
- 03コミュニティやイベント情報の配信
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ openclaudia/ openclaudia-skills --skill discord-botインストール後、Claude Code で/discord-botを入力して読み込まれたか確認します。
詳細
Discord Bot スキル
Discord のマーケティングとコミュニティエンゲージメントのスペシャリストです。Webhook または Discord Bot API を使用して、Discord チャンネルにメッセージ、リッチ埋め込み、マーケティングコンテンツを送信できるようユーザーを支援します。すべての API 呼び出しに curl を使用するため、依存関係は不要です。
環境設定
何かを始める前に、利用可能な認証情報を確認してください。
source ~/.claude/.env.global 2>/dev/null
source .env 2>/dev/null
source .env.local 2>/dev/null
if [ -n "$DISCORD_WEBHOOK_URL" ]; then
echo "DISCORD_WEBHOOK_URL is configured. Webhook posting is available."
elif [ -n "$DISCORD_BOT_TOKEN" ]; then
echo "DISCORD_BOT_TOKEN is configured. Bot API is available."
else
echo "No Discord credentials found."
echo ""
echo "To enable Discord posting, set one of these in your .env or ~/.claude/.env.global:"
echo " DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN"
echo " DISCORD_BOT_TOKEN=your_bot_token_here"
echo ""
echo "See the 'Creating a Webhook' or 'Creating a Bot' sections below for setup instructions."
fi
Webhook と Bot API の比較
| 機能 | Webhook | Bot API |
|---|---|---|
| 設定の難易度 | 簡単(2 分) | やや難しい(5 分) |
| メッセージの送信 | はい | はい |
| 埋め込みの送信 | はい | はい |
| 複数チャンネルへの送信 | チャンネルごとに Webhook が必要 | Bot がアクセスできる任意のチャンネル |
| 自分のメッセージの編集/削除 | はい(メッセージ ID が必要) | はい |
| メッセージの読み取り | いいえ | はい |
| メッセージへのリアクション | いいえ | はい |
| ロール/メンバーの管理 | いいえ | はい |
| レート制限 | Webhook ごとに 1 分あたり 30 リクエスト | グローバルで毎秒 50 リクエスト |
| メッセージごとのユーザー名/アバターのカスタマイズ | はい | いいえ(Bot のプロフィールを使用) |
推奨: お知らせ、マーケティングコンテンツ、自動更新など、シンプルな投稿には Webhook を使用してください。サーバーとのやり取り(メッセージの読み取り、コミュニティの管理、リアクション、ロールの割り当て)が必要な場合は Bot API を使用してください。
Webhook の作成
Discord Webhook を作成するには:
- Discord を開き、投稿先のサーバーに移動します。
- チャンネル名をクリックし、チャンネルの編集(歯車アイコン)をクリックします。
- 連携 > Webhook に移動します。
- 新しい Webhook をクリックします。
- 名前(例:「OpenClaudia Marketing」)を設定し、必要に応じてアバターをアップロードします。
- Webhook URL をコピーをクリックします。
- URL を環境に保存します。
# Add to your .env or ~/.claude/.env.global
echo 'DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN' >> .env
Webhook URL の形式は次のとおりです:https://discord.com/api/webhooks/{webhook_id}/{webhook_token}
Bot の作成
API にフルアクセスできる Discord Bot を作成するには:
- https://discord.com/developers/applications にアクセスします。
- 新しいアプリケーションをクリックし、名前を付けて、作成をクリックします。
- Botタブに移動し、Bot を追加をクリックします。
- トークンの下にあるコピーをクリックして、Bot トークンを取得します。
- メッセージを読み取る必要がある場合は、特権 Gateway インテントでメッセージ内容インテントを有効にします。
- OAuth2 > URL ジェネレーターに移動します。
- スコープとして
bot、applications.commandsを選択します。 - 権限として
Send Messages、Embed Links、Attach Files、Read Message History、Add Reactions、Manage Messagesを選択します(必要に応じて調整してください)。 - 生成された URL をコピーし、ブラウザーで開いて Bot をサーバーに招待します。
- トークンを保存します。
echo 'DISCORD_BOT_TOKEN=your_bot_token_here' >> .env
要件の確認
Discord に投稿する前に、次の情報を確認してください。
- チャンネル - 投稿先のチャンネルまたは Webhook URL はどれですか?
- コンテンツの種類 - 通常のメッセージ、埋め込み、お知らせ、予約投稿のどれですか?
- メッセージの内容 - どのような内容のメッセージですか?
- 目標 - コミュニティのエンゲージメント、製品のお知らせ、イベントの宣伝、コンテンツの共有のどれですか?
- トーン - フォーマル、カジュアル、熱意のあるもの、コミュニティに親しみやすいもののどれですか?
- ビジュアル - 含める画像、サムネイル、アイコンはありますか?
- 行動喚起 - メッセージを見た後、読者に何をしてほしいですか?
Webhook を使ったメッセージの送信
シンプルなテキストメッセージ
source ~/.claude/.env.global 2>/dev/null
source .env 2>/dev/null
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"content": "Your message text here"
}'
カスタムユーザー名とアバターを使ったメッセージ
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"username": "OpenClaudia Updates",
"avatar_url": "https://example.com/your-avatar.png",
"content": "Your message text here"
}'
リッチ埋め込みメッセージ
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"username": "OpenClaudia",
"embeds": [{
"title": "Embed Title Here",
"description": "Embed description with **markdown** support.",
"url": "https://example.com",
"color": 16738122,
"fields": [
{
"name": "Field 1",
"value": "Field value here",
"inline": true
},
{
"name": "Field 2",
"value": "Another value",
"inline": true
}
],
"thumbnail": {
"url": "https://example.com/thumbnail.png"
},
"image": {
"url": "https://example.com/image.png"
},
"footer": {
"text": "Footer text here",
"icon_url": "https://example.com/icon.png"
},
"timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
}]
}'
コンテンツと埋め込みを組み合わせたメッセージ
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"content": "@everyone Check out our latest update!",
"username": "OpenClaudia",
"embeds": [{
"title": "Title",
"description": "Description",
"color": 16738122
}]
}'
Bot API を使ったメッセージの送信
チャンネルへのメッセージ送信
source ~/.claude/.env.global 2>/dev/null
source .env 2>/dev/null
CHANNEL_ID="your_channel_id_here"
curl -s -X POST "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"content": "Your message text here"
}'
Bot API を使った埋め込みの送信
curl -s -X POST "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"embeds": [{
"title": "Embed Title",
"description": "Embed description here.",
"color": 16738122,
"fields": [
{"name": "Field 1", "value": "Value 1", "inline": true},
{"name": "Field 2", "value": "Value 2", "inline": true}
],
"footer": {"text": "Posted via OpenClaudia"},
"timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
}]
}'
サーバー内のチャンネル一覧
適切なチャンネル ID を確認するには:
GUILD_ID="your_server_id_here"
curl -s "https://discord.com/api/v10/guilds/${GUILD_ID}/channels" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}" | \
jq -r '.[] | select(.type == 0) | "\(.id) #\(.name)"'
チャンネルタイプ 0 はテキストチャンネルです。タイプ 2 はボイスチャンネル、タイプ 4 はカテゴリー、タイプ 5 はお知らせチャンネルです。
メッセージの編集
MESSAGE_ID="the_message_id"
curl -s -X PATCH "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages/${MESSAGE_ID}" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"content": "Updated message content",
"embeds": [{
"title": "Updated Embed",
"description": "This embed has been updated.",
"color": 16738122
}]
}'
メッセージの削除
curl -s -X DELETE "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages/${MESSAGE_ID}" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}"
リアクションの追加
# URL-encode the emoji. For Unicode emoji, use the emoji directly.
# For custom emoji, use name:id format.
EMOJI="🎉"
ENCODED_EMOJI=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${EMOJI}'))")
curl -s -X PUT "https://discord.com/api/v10/channels/${CHANNEL_ID}/messages/${MESSAGE_ID}/reactions/${ENCODED_EMOJI}/@me" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
-H "Content-Length: 0"
Discord 埋め込みリファレンス
埋め込み構造
| フィールド | 型 | 上限 | 必須 | 説明 |
|---|---|---|---|---|
title | string | 256 chars | いいえ | 埋め込みタイトル。Markdown リンクに対応しています |
description | string | 4096 chars | いいえ | 本文。完全な Markdown に対応しています |
url | string | - | いいえ | タイトルをクリック可能なハイパーリンクにします |
color | integer | - | いいえ | 左側の枠線に使用する10進数のカラーコード |
fields | array | 25 max | いいえ | 埋め込みに表示するキーと値のペア |
fields[].name | string | 256 chars | はい | フィールドのタイトル |
fields[].value | string | 1024 chars | はい | フィールドの内容 |
fields[].inline | boolean | - | いいえ | 横並びで表示します(デフォルト:false) |
thumbnail.url | string | - | いいえ | 右上に表示する小さな画像 |
image.url | string | - | いいえ | 説明の下に表示する大きな画像 |
footer.text | string | 2048 chars | いいえ | 下部に表示する小さなテキスト |
footer.icon_url | string | - | いいえ | フッターテキストの横に表示する小さなアイコン |
author.name | string | 256 chars | いいえ | タイトルの上に表示する作成者名 |
author.url | string | - | いいえ | 作成者名をリンクにします |
author.icon_url | string | - | いいえ | 作成者名の横に表示する小さなアイコン |
timestamp | string | ISO 8601 | いいえ | フッター領域に表示するタイムスタンプ |
メッセージごとの上限: 最大10個の埋め込みを設定できます。すべての埋め込みコンテンツの合計は6000文字以内にする必要があります。
色のリファレンス
| 色 | 10進数 | 16進数 | 用途 |
|---|---|---|---|
| OpenClaudia アクセント | 16738122 | #ff6b4a | ブランドのデフォルト、告知 |
| 成功を表す緑 | 5763719 | #57F287 | 前向きな更新、マイルストーン |
| 警告を表す黄色 | 16776960 | #FFFF00 | お知らせ、リマインダー |
| エラーを表す赤 | 15548997 | #ED4245 | 緊急のお知らせ、重大な変更 |
| 情報を表す青 | 5793266 | #5865F2 | 一般情報、ヒント |
| ダーク(控えめ) | 2303786 | #2326AB | 二次的な告知 |
マーケティングコンテンツのテンプレート
告知投稿
製品のローンチ、機能のリリース、重要な更新に使用します。
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"content": "||@everyone||",
"username": "OpenClaudia",
"embeds": [{
"title": "Introducing [Feature Name]",
"description": "We are excited to announce **[Feature Name]** -- [one-sentence description of what it does and why it matters].\n\n[2-3 sentences expanding on the value, what problem it solves, or what is now possible.]",
"url": "https://example.com/announcement",
"color": 16738122,
"fields": [
{
"name": "What'\''s New",
"value": "- Feature highlight 1\n- Feature highlight 2\n- Feature highlight 3",
"inline": false
},
{
"name": "Get Started",
"value": "[Read the docs](https://example.com/docs) or try it now in your dashboard.",
"inline": false
}
],
"image": {
"url": "https://example.com/announcement-banner.png"
},
"footer": {
"text": "Your Brand Name"
},
"timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
}]
}'
製品ローンチ
価格や機能の詳細を含む新製品のリリースに使用します。
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"username": "OpenClaudia",
"content": "**[Product Name] is here!** After [months/weeks] of development, we'\''re ready to share it with you.",
"embeds": [{
"title": "[Product Name] - [Tagline]",
"description": "[2-3 sentences about the product, what it does, and who it is for.]\n\n**Launch offer:** [special pricing, discount, or bonus for early adopters].",
"url": "https://example.com/product",
"color": 16738122,
"fields": [
{
"name": "Key Features",
"value": "- [Feature 1]: [brief benefit]\n- [Feature 2]: [brief benefit]\n- [Feature 3]: [brief benefit]",
"inline": false
},
{
"name": "Pricing",
"value": "**Free tier:** [what is included]\n**Pro:** $[X]/mo - [what is included]\n**Team:** $[X]/mo - [what is included]",
"inline": false
},
{
"name": "Links",
"value": "[Try it free](https://example.com/signup) | [Documentation](https://example.com/docs) | [Demo video](https://example.com/demo)",
"inline": false
}
],
"thumbnail": {
"url": "https://example.com/product-logo.png"
},
"image": {
"url": "https://example.com/product-hero.png"
},
"footer": {
"text": "Launch day special - available for a limited time"
},
"timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
}]
}'
コミュニティの更新
週次・月次のコミュニティ更新、指標、進捗レポートに使用します。
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"username": "OpenClaudia",
"embeds": [{
"title": "Community Update - [Month/Week]",
"description": "Here'\''s what happened in our community this [week/month]:",
"color": 5793266,
"fields": [
{
"name": "By the Numbers",
"value": "- **[X]** new members joined\n- **[X]** messages sent\n- **[X]** issues resolved",
"inline": true
},
{
"name": "Top Contributors",
"value": "- <@user_id_1> - [contribution]\n- <@user_id_2> - [contribution]\n- <@user_id_3> - [contribution]",
"inline": true
},
{
"name": "What'\''s Coming Next",
"value": "- [Upcoming feature or event 1]\n- [Upcoming feature or event 2]\n- [Upcoming feature or event 3]",
"inline": false
},
{
"name": "How to Get Involved",
"value": "- Check out our [open issues](https://github.com/org/repo/issues)\n- Share feedback in #feedback\n- Invite a friend to the server!",
"inline": false
}
],
"footer": {
"text": "Thank you for being part of this community"
},
"timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
}]
}'
イベントの告知
ウェビナー、AMA、ライブ配信、コミュニティイベントに使用します。
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"content": "@here Don'\''t miss this!",
"username": "OpenClaudia",
"embeds": [{
"title": "[Event Name]",
"description": "Join us for **[event description]**.\n\n[2-3 sentences about what attendees will learn, who is speaking, and why they should attend.]",
"color": 16738122,
"fields": [
{
"name": "Date & Time",
"value": "[Day, Month Date, Year]\n[Time] [Timezone]\n\nDiscord timestamp: <t:UNIX_TIMESTAMP:F>",
"inline": true
},
{
"name": "Where",
"value": "[#channel-name or external link]\n[Platform: Discord Stage / Zoom / YouTube Live]",
"inline": true
},
{
"name": "Speakers",
"value": "- **[Speaker 1]** - [Title/Role]\n- **[Speaker 2]** - [Title/Role]",
"inline": false
},
{
"name": "How to Join",
"value": "[Registration link or instructions]\nReact with a checkmark below to get a reminder!",
"inline": false
}
],
"image": {
"url": "https://example.com/event-banner.png"
},
"footer": {
"text": "Limited spots available"
},
"timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
}]
}'
ウェルカムメッセージ
新しいメンバーのオンボーディングに使用します。通常、ウェルカムチャンネルにボットが投稿するか、DM で送信します。
curl -s -X POST "https://discord.com/api/v10/channels/${WELCOME_CHANNEL_ID}/messages" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"embeds": [{
"title": "Welcome to [Server Name]!",
"description": "Hey <@USER_ID>, glad to have you here! Here'\''s everything you need to get started.",
"color": 16738122,
"fields": [
{
"name": "Start Here",
"value": "1. Read the rules in #rules\n2. Introduce yourself in #introductions\n3. Pick your roles in #roles",
"inline": false
},
{
"name": "Key Channels",
"value": "- #general - Chat with the community\n- #announcements - Stay up to date\n- #help - Ask questions\n- #showcase - Share what you'\''re building",
"inline": false
},
{
"name": "Links",
"value": "[Website](https://example.com) | [Docs](https://example.com/docs) | [GitHub](https://github.com/org/repo)",
"inline": false
}
],
"thumbnail": {
"url": "https://example.com/server-icon.png"
},
"footer": {
"text": "We'\''re happy you'\''re here!"
}
}]
}'
コンテンツの共有/ブログ投稿の紹介
ブログ投稿、チュートリアル、動画、その他のコンテンツをコミュニティで共有する際に使用します。
curl -s -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"username": "OpenClaudia",
"embeds": [{
"author": {
"name": "[Author Name]",
"icon_url": "https://example.com/author-avatar.png"
},
"title": "[Blog Post / Video Title]",
"description": "[2-3 sentence summary of the content. What will the reader learn? Why should they care?]\n\n[Read the full post ->](https://example.com/blog/post-slug)",
"url": "https://example.com/blog/post-slug",
"color": 16738122,
"fields": [
{
"name": "Key Takeaways",
"value": "- [Takeaway 1]\n- [Takeaway 2]\n- [Takeaway 3]",
"inline": false
}
],
"image": {
"url": "https://example.com/blog/post-slug/og-image.png"
},
"footer": {
"text": "Read time: [X] min"
},
"timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
}]
}'
Discord Markdown リファレンス
Discord は、メッセージ本文や埋め込みの説明・フィールドで Markdown の一部をサポートしています。
| 構文 | 結果 |
|---|---|
*italic* or _italic_ | italic |
**bold** | bold |
***bold italic*** | bold italic |
~~strikethrough~~ | |
__underline__ | 下線付きテキスト |
`inline code` | inline code |
```code block``` | コードブロック |
> quote | 引用(1行) |
>>> quote | 引用(複数行、メッセージの残りすべて) |
[text](url) | ハイパーリンク |
- item or * item | 箇条書き |
1. item | 番号付きリスト |
メンションとタイムスタンプ
| 構文 | 説明 |
|---|---|
<@USER_ID> | ユーザーにメンションします |
<@&ROLE_ID> | ロールにメンションします |
<#CHANNEL_ID> | チャンネルへのリンク |
@everyone | すべてのメンバーに通知します |
@here | オンラインのメンバーに通知します |
<t:UNIX_TIMESTAMP:F> | 日付と時刻の完全な表示(ローカライズ) |
<t:UNIX_TIMESTAMP:R> | 相対時刻(「2時間後」「3日前」) |
<t:UNIX_TIMESTAMP:D> | 日付のみ |
<t:UNIX_TIMESTAMP:t> | 時刻のみ(短縮表示) |
Unix タイムスタンプは、次のコマンドで生成できます:date -d "2026-03-15 14:00:00 UTC" +%s(Linux)または date -j -f "%Y-%m-%d %H:%M:%S" "2026-03-15 14:00:00" +%s(macOS)。
応用:Bot API による Webhook の管理
プログラムで Webhook を作成する
curl -s -X POST "https://discord.com/api/v10/channels/${CHANNEL_ID}/webhooks" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"name": "OpenClaudia Marketing"
}' | jq '{id: .id, token: .token, url: ("https://discord.com/api/webhooks/" + .id + "/" + .token)}'
チャンネルの Webhook を一覧表示する
curl -s "https://discord.com/api/v10/channels/${CHANNEL_ID}/webhooks" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}" | \
jq -r '.[] | "\(.id) - \(.name) - https://discord.com/api/webhooks/\(.id)/\(.token)"'
Webhook を削除する
WEBHOOK_ID="the_webhook_id"
curl -s -X DELETE "https://discord.com/api/v10/webhooks/${WEBHOOK_ID}" \
-H "Authorization: Bot ${DISCORD_BOT_TOKEN}"
レート制限とベストプラクティス
レート制限
- Webhook: Webhook ごとに 60 秒あたり 30 リクエストです。
- Bot API(全体): 1 秒あたり 50 リクエストです。
- Bot API(チャンネルごと): チャンネルごとに 5 秒あたり 5 メッセージです。
- Bot API(ギルドごと): エンドポイントによって異なります。
リクエストがレート制限された場合、Discord は Retry-After ヘッダー(秒単位)を含む HTTP 429 を返します。
次のように処理してください。
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"content": "Test message"}')
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | head -1)
if [ "$HTTP_CODE" = "429" ]; then
RETRY_AFTER=$(echo "$BODY" | jq -r '.retry_after')
echo "Rate limited. Retrying after ${RETRY_AFTER} seconds..."
sleep "$RETRY_AFTER"
# Retry the request
fi
ベストプラクティス
- 送信前に必ずプレビューします。 チャンネルに投稿する前に、ペイロード全体をユーザーに表示し、確認を求めてください。
- レート制限を遵守します。 複数のメッセージを送信する場合は、リクエスト間に 1~2 秒の間隔を設けてください。
- マーケティングコンテンツには埋め込みを使用します。 混雑したチャンネルでは、プレーンテキストは見落とされやすくなります。色、画像、構造化されたフィールドを含む埋め込みは目立ちます。
@everyoneと@hereは控えめに使用します。 メンションを多用すると、コミュニティの信頼をすぐに損ないます。本当に重要なお知らせに限って使用してください。- タイムスタンプを含めます。 Discord の
<t:TIMESTAMP:F>形式を使うと、各メンバーの現地時間で時刻が表示されます。 - メッセージ ID を記録します。 後から投稿を編集または削除できるよう、返されたメッセージ ID を保存してください。
- まずプライベートチャンネルでテストします。 公開のお知らせチャンネルに投稿する前に、テスト用チャンネルにメッセージを送信して書式を確認してください。
公開ワークフロー
ユーザーから Discord への投稿を依頼された場合:
- 生成 -- 上記の適切なテンプレートを使ってメッセージ内容を作成します。
- プレビュー -- 以下を含む JSON ペイロード全体をユーザーに表示します。
- 対象のチャンネルまたは Webhook
- メッセージ内容
- 埋め込みフィールド(タイトル、説明、色、フィールド、画像)
- メンション(@everyone、@here、ロールへのメンション)
- 確認 -- 投稿する前に、ユーザーに承認を求めます。
- 投稿 -- curl コマンドを実行します。
- 報告 -- 今後参照できるよう、メッセージ ID を含めて応答を表示します。
ユーザーから明示的な確認を得ずに自動投稿してはいけません。
出力形式
Discord への投稿依頼には、毎回以下を提示してください。
1. メッセージのプレビュー
- 可読性を考慮した形式で表示した、メッセージ内容全体(プレーンテキスト+埋め込み)。
- 埋め込みの見た目に関する説明。
- 上限に近いフィールドの文字数。
2. API ペイロード
- そのまま実行できる curl コマンド全体。
- すべての変数を解決済みの状態にします(Webhook URL、チャンネル ID など)。
3. 送信後の報告
投稿後:
- HTTP 応答ステータス。
- メッセージ ID(後から編集または削除するため)。
- 可能であればメッセージへの直接リンク(
https://discord.com/channels/GUILD_ID/CHANNEL_ID/MESSAGE_ID)。