discord.py 機能別逆引きガイド
discord.py で実装したいことから、使う機能、考え方、参照すべき公式ドキュメントや本サイトのトラブルシューティング記事を引けるように整理します。
この記事で分かること
- やりたいことから discord.py の機能を探す方法
- Interaction、メッセージ、サーバー操作の分け方
- 権限・Intent・cache で詰まりやすい箇所
- 公式ドキュメントと本サイト記事の参照先
このページは、discord.py で「何を実装したいか」から参照先を探すための逆引きです。使う機能と詰まりやすい点を整理します。
最初に、discord.py の版、Intent、Portal、Bot のロール位置を把握します。基礎から進めたい場合は、discord.py による Discord Bot 開発を先に読んでください。
Interaction と操作UI
スラッシュコマンド、ボタン、セレクトメニュー、モーダルは、利用者の操作に応答する機能です。discord.py では app_commands、discord.ui、callback、応答、timeout を分けて見ます。
| やりたいこと | 使う機能・考え方 | 参照先 |
|---|---|---|
| スラッシュコマンドを作りたい | app_commands、コマンド登録、引数、権限 | discord.py app_commands、Discord Application Commands、Interaction 逆引き |
| ボタンを押したら処理したい | discord.ui.View、Button、callback、custom_id | discord.py interactions API、Discord Components、Interaction 逆引き |
| 選択・入力を受けたい | Select、Modal、入力値の検証、操作できるユーザーの限定 | discord.py UI components、Discord Components & Modals、データとセキュリティ |
Interaction は、押した人、押した場所、応答の公開範囲を決めてから実装します。管理用UIを誰でも押せる状態にせず、入力値を保存や外部送信の前に検証します。
メッセージとチャンネル
メッセージ送信や編集は、通知、メンション、権限、添付ファイル、Embed で事故が起きやすい領域です。
| やりたいこと | 使う機能・考え方 | 参照先 |
|---|---|---|
| 送信・Embed・添付を扱いたい | 送信先チャンネル、Allowed Mentions、Attach Files 権限 | Discord Message Resource、メッセージ逆引き |
| 削除・編集したい | Manage Messages 権限、対象メッセージ、監査ログ | Discord Permissions、メッセージ逆引き |
| リアクションを扱いたい | reaction event、cache、raw event、emoji の比較 | discord.py events、メッセージ逆引き |
⚠️ メンション文字列を外部入力からそのまま送ると、意図しない通知を発生させることがあります。Allowed Mentions や送信前の検証で通知範囲を制御します。
サーバー管理
ロール付与、チャンネル作成、メンバー管理は、Bot の権限とロール階層に強く影響されます。コードが正しくても、対象ロールや対象チャンネルに届かなければ失敗します。
| やりたいこと | 使う機能・考え方 | 参照先 |
|---|---|---|
| ロールを付与・削除したい | Member、Role、Manage Roles、ロール階層 | Discord Permissions、サーバー管理逆引き |
| チャンネルを作りたい | Guild channel create、カテゴリ、権限上書き | Discord Channel Resource、サーバー管理逆引き |
| 参加案内やBAN/Kickを扱いたい | member event、対象確認、理由、監査ログ、権限チェック | Discord Gateway/Guild Resource、discord.py トラブル |
サーバー管理機能では、実行者、対象者、理由をログへ残します。利用者には短く、管理者には原因を追える情報を返します。
運用補助と外部連携
定期実行、外部API、DB、Webhook は、Discord API とは別の失敗要因を持ちます。timeout、再試行、重複実行、秘密情報の管理を先に決めます。
| やりたいこと | 使う機能・考え方 | 参照先 |
|---|---|---|
| 定期実行したい | discord.ext.tasks、再起動時の再開、重複防止 | discord.py tasks extension、ホスティング逆引き |
| エラーを記録したい | logging、例外処理、利用者向け返信と管理ログの分離 | Python logging、エラー逆引き |
| DB・外部APIと連携したい | 非同期処理、timeout、APIキー管理、個人情報の最小化 | Python asyncio、データとセキュリティ |
外部連携は「失敗したときにどう戻すか」まで決めます。初回応答、重い処理の逃がし方、二重送信を防ぐ設計も必要です。
確認ポイント
- 必要な Intent と権限を説明できる
- cache 前提で取れない情報は fetch や raw event を検討した
- 秘密情報を環境変数で扱っている
- 本番前にテストサーバーで成功時と失敗時を試した