discord について
ユーザーの Discord アカウントをコマンドラインで操作するスキルです。ユーザートークンではチャンネルやメッセージを扱え、OAuth では本人情報とサーバー一覧のみ読み取れます。
主な機能
- 01本人情報とサーバーの確認
- 02チャンネル一覧とメッセージの閲覧
- 03確認後の送信と返信
- 04OAuthでの本人情報・サーバー一覧の読み取り
活用シーン
- 01チャンネルの最近のメッセージを確認
- 02承認済みのメッセージや返信を送信
- 03アカウント情報と参加サーバーを確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill discordインストール後、Claude Code で/discordを入力して読み込まれたか確認します。
同梱ファイルscripts/discord_user.py
詳細
discord — ユーザーのDiscordアカウントを操作する
このスキルには2つのモードがあり、コネクターが挿入した認証情報によって自動的に選択されます。まず環境を確認し、該当するセクションに従ってください。
$DISCORD_USER_TOKENが設定されている場合 → ユーザートークン(BYOC)モード:scripts/discord_user.pyCLI を使って、個人アカウントの全操作を実行します(チャンネルの一覧表示、メッセージの読み取り、送信/返信)。ユーザーの実際のアカウントとして動作します。$DISCORD_TOKENのみが設定されている場合 → OAuth モード:curlを使って、読み取り専用のアカウント情報とサーバー一覧を取得します。このモードではチャンネルのメッセージを利用できません。
if [ -n "$DISCORD_USER_TOKEN" ]; then echo "mode: user-token (full)"; \
elif [ -n "$DISCORD_TOKEN" ]; then echo "mode: oauth (read-only)"; \
else echo "no Discord connection — connect at https://studio.acedata.cloud/console/connectors"; fi
どちらのトークンも秘密情報であり、アカウントへの完全なアクセス権を持ちます。絶対にそのまま表示したり、出力したりしないでください。 401 の場合、トークンの有効期限が切れているか、取り消されています。ユーザーに studio.acedata.cloud/console/connectors で再接続するよう伝えてください。429 の場合は、retry_after 秒間待ってから再試行してください。並列実行はしないでください。
ユーザートークン(BYOC)モード — 全操作
$DISCORD_USER_TOKEN が設定されている場合は、discord.py-self を通じて、scripts/discord_user.py(python3 で実行)CLI からユーザーの実際のアカウントを操作します。トークンのみを使ってログインし(ゲートウェイは使用しません)、JSON を出力します。
discord.py-self はホストされたサンドボックスにプリインストールされています(インポート名は discord)。実行時に pip install しないでください。インポートに失敗した場合は、サンドボックスイメージに依存関係がないことを報告し、停止してください。
書き込み(send/reply)を実行するには、末尾に --confirm が必要です。 これがない場合はドライランとなり、送信する予定の内容が表示されます。送信前に、チャンネルと内容をユーザーに確認してください。送信は取り消せず、公開されます。ユーザーの承認後に限り、最後の引数として --confirm を追加してください。
# identity (always run first)
python3 scripts/discord_user.py whoami
# list the servers (guilds) the account is in
python3 scripts/discord_user.py guilds
# list text channels in a server
python3 scripts/discord_user.py channels --guild GUILD_ID
# read recent messages in a channel
python3 scripts/discord_user.py messages --channel CHANNEL_ID --limit 20
# send — dry-run first, then re-run with a trailing --confirm
python3 scripts/discord_user.py send --channel CHANNEL_ID --text "hello"
python3 scripts/discord_user.py send --channel CHANNEL_ID --text "hello" --confirm
# reply to a specific message
python3 scripts/discord_user.py reply \
--channel CHANNEL_ID --message MESSAGE_ID --text "on it" --confirm
--confirm が有効になるのは、最後の引数として指定された場合のみです(1回だけ除去されます)。そのため、メッセージ本文に --confirm という文字列が含まれているだけで、送信が誤って実行されることはありません。ID は数値の Discord スノーフレークです。サンドボックスから discord.com に接続するために必要な場合は、DISCORD_PROXY でプロキシを強制できます(設定されていない場合は HTTPS_PROXY/ALL_PROXY にフォールバックします)。
OAuth モード — 読み取り専用
$DISCORD_TOKEN のみが設定されている場合は、curl + jq を使って
Discord API を操作します。認証ヘッダーは Authorization: Bearer $DISCORD_TOKEN、ベース URL は
https://discord.com/api/v10 です。
スコープは読み取り専用の identify + email + guilds です。 このモードでは、アカウント情報とそのギルド一覧のみを読み取れます。チャンネルのメッセージの読み取りや送信、ギルドのチャンネルまたはメンバーの一覧表示、その他の操作はできません。OAuth トークンでは、/guilds/{id}/channels、/channels/...、/guilds/{id}/members は 401/403 を返します。これらが必要な場合は、Discord をユーザートークン(上記の BYOC モード)で接続するか、Discord Bot(discordbot 接続)を使ってボットとして操作してください。
# identity (always run first)
curl -sS -H "Authorization: Bearer $DISCORD_TOKEN" \
"https://discord.com/api/v10/users/@me" \
| jq '{id, username, global_name, email, avatar}'
# the servers (guilds) the user is in (add ?with_counts=true for member counts)
curl -sS -H "Authorization: Bearer $DISCORD_TOKEN" \
"https://discord.com/api/v10/users/@me/guilds?with_counts=true" \
| jq 'map({id, name, owner, members: .approximate_member_count})'
注意事項
- UI での「サーバー」は API では「ギルド」です。メッセージはギルド内のチャンネルにあります。ユーザートークンモードでは、
guilds→channels --guild <id>→ チャンネル ID を指定して操作、の順に進めてください。ID を推測しないでください。 - OAuth モードでは、
owner: trueはユーザーがそのギルドの所有者であることを意味します。ギルドのアイコン URL は、iconが null でない場合、https://cdn.discordapp.com/icons/<guild_id>/<icon>.pngです(ハッシュがa_で始まる場合は.gifを使用します)。ギルド一覧は 200 件ごとにページ分割されます。上限に達した場合は、?after=<last_guild_id>を使ってページネーションしてください。