discord について
discord は Python CLI から Discord REST API v10 を呼び出す自動化スキルです。サーバーやメッセージの操作をスクリプト化でき、Python 標準ライブラリのみを使い、結果を JSON で出力します。
主な機能
- 01サーバーとチャンネルの管理
- 02メッセージの取得と送信
- 03リアクションの追加、削除、一覧表示
- 04スレッド作成とピン留め管理
- 05ユーザー一覧と詳細の取得
活用シーン
- 01コマンドラインからサーバーのチャンネルを確認
- 02スクリプトで Discord のメッセージを取得・送信
- 03リアクション、スレッド、ピン留めを管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ letta-ai/ skills --skill discordインストール後、Claude Code で/discordを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/discord-small.svgscripts/discord_cli.py詳細
discord_cli.py による Discord の自動化
Discord REST API v10 をラップする、同梱の Python スクリプトです。外部依存関係はなく、Python 標準ライブラリ(urllib、json、argparse)のみを使用します。
次のように実行します:python3 <path-to-skill>/scripts/discord_cli.py <command> <subcommand> [args]
セットアップ
1. Discord ボットを作成する
- Discord Developer Portal に移動し、New Application をクリックします
- サイドバーの Bot をクリックし、Reset Token をクリックして、トークンをコピーします
- 重要:下にスクロールして Privileged Gateway Intents の Message Content Intent を有効にします。これを有効にしないと、API レスポンスのメッセージ内容が空になります
- 必要に応じて Server Members Intent を有効にします(
user listに必要です)
2. ボットをサーバーに追加する
- サイドバーの OAuth2 をクリックし、OAuth2 URL Generator までスクロールします
- スコープで
botとapplications.commandsにチェックを入れます - Bot Permissions で、View Channels、Send Messages、Read Message History、Add Reactions、Attach Files にチェックを入れます
- 生成された URL をコピーし、ブラウザーで開いて、サーバーを選択し、Authorize をクリックします
クライアント ID がわかっている場合のショートカット:
https://discord.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&scope=bot+applications.commands&permissions=274877975552
3. ボットトークンを設定する
export DISCORD_BOT_TOKEN="your_token_here"
4. 動作を確認する
python3 <path-to-skill>/scripts/discord_cli.py auth test
出力例:
{"ok": true, "user": "your-bot-name", "id": "...", "discriminator": "..."}
コマンド
認証
python3 <path-to-skill>/scripts/discord_cli.py auth test
サーバー
python3 <path-to-skill>/scripts/discord_cli.py server list
python3 <path-to-skill>/scripts/discord_cli.py server info <server-id>
チャンネル
python3 <path-to-skill>/scripts/discord_cli.py channel list <server-id>
テキスト、アナウンス、フォーラムの各チャンネルを、カテゴリーと位置で並べ替えて返します。各チャンネルには id、name、type、category、topic が含まれます。
メッセージ
# List recent messages (default 25, chronological order)
python3 <path-to-skill>/scripts/discord_cli.py message list <channel-id>
python3 <path-to-skill>/scripts/discord_cli.py message list <channel-id> --limit 50
# Get a single message
python3 <path-to-skill>/scripts/discord_cli.py message get <channel-id> <message-id>
# Send a message
python3 <path-to-skill>/scripts/discord_cli.py message send <channel-id> "Hello from the agent!"
# Edit a message (bot can only edit its own messages)
python3 <path-to-skill>/scripts/discord_cli.py message edit <channel-id> <message-id> "Updated text"
# Delete a message
python3 <path-to-skill>/scripts/discord_cli.py message delete <channel-id> <message-id>
# Search messages in a server
python3 <path-to-skill>/scripts/discord_cli.py message search <server-id> "query"
python3 <path-to-skill>/scripts/discord_cli.py message search <server-id> "query" --channel-id <id> --author-id <id> --limit 10
リアクション
python3 <path-to-skill>/scripts/discord_cli.py reaction add <channel-id> <message-id> 👍
python3 <path-to-skill>/scripts/discord_cli.py reaction remove <channel-id> <message-id> 👍
python3 <path-to-skill>/scripts/discord_cli.py reaction list <channel-id> <message-id>
スレッド
# Create a new thread in a channel
python3 <path-to-skill>/scripts/discord_cli.py thread create <channel-id> "Discussion Topic"
# Create a thread from a specific message
python3 <path-to-skill>/scripts/discord_cli.py thread create <channel-id> "Bug Triage" --message-id <id>
ピン留め
python3 <path-to-skill>/scripts/discord_cli.py pin list <channel-id>
python3 <path-to-skill>/scripts/discord_cli.py pin add <channel-id> <message-id>
python3 <path-to-skill>/scripts/discord_cli.py pin remove <channel-id> <message-id>
ユーザー
python3 <path-to-skill>/scripts/discord_cli.py user list <server-id>
python3 <path-to-skill>/scripts/discord_cli.py user list <server-id> --limit 200
python3 <path-to-skill>/scripts/discord_cli.py user info <user-id>
メッセージ内でユーザーにメンションするには、<@USER_ID> を使用します。
出力形式
すべてのコマンドは JSON を標準出力に出力します。エラーは標準エラー出力に error フィールドと HTTP の status コードを付けて出力されます。
メッセージオブジェクトには、id、author、author_id、content、timestamp に加えて、任意で thread_id、(filename と url を含む)attachments、(emoji と count を含む)reactions が含まれます。null 値や空のフィールドは削除されます。
トラブルシューティング
メッセージ内容が空
Message Content Intent が有効になっていません。Developer Portal → Bot → Privileged Gateway Intents に移動し、Message Content Intent をオンにしてください。
user list の結果が空、または一部しか表示されない
Server Members Intent が有効になっていません。同じインテントのセクションでオンにしてください。
403 / アクセス権限がないというエラー
ボットにそのチャンネルへの権限がありません。Discord サーバーの設定でボットのロール権限を確認するか、正しい権限を指定して再認証してください。
トークンエラー
ボットトークンを再発行した場合は、DISCORD_BOT_TOKEN を新しい値に更新してください。
注意事項
- Discord では、すべての識別子に Snowflake ID(
1161736244074659893のような大きな数値)を使用します。チャンネル名を直接使用することはできません。まずchannel list <server-id>を使って ID を確認してください。 - ボットがアクセスできるのは、招待されたサーバーと、権限を持つチャンネルのみです。
- ボットトークン認証では、公式の Discord API を使用します。ユーザートークンの抽出は行わず、利用規約に抵触するリスクもありません。
- メッセージは時系列順(古いものから先)に返されます。