カテゴリー: Discordボット開発

Discordボット開発#3スラッシュコマンドにサブコマンド(Subcommand)を追加しよう!

この記事は韓国語の原文から翻訳したものです。

目次5項目

こんにちは、Mojangcamです 😎 今回はもう少し高度な機能!スラッシュコマンドをグループにまとめるサブコマンド機能を見ていきます!

たとえば…

  • /user info → ユーザー情報を見る
  • /user ban → ユーザーをBANする

このように、1つのコマンドグループの中に複数の機能を入れるんです!


🧩 サブコマンドって何?

サブコマンドは /명령어 서브명령어 (/コマンド サブコマンド) の形で使う構造です。 機能が多いボットほどすっきり整理できるので、本当に便利ですよ!


🧑‍💻 サンプルコード

Python
import discord
from discord.ext import commands
from discord import app_commands

class UserCommandGroup(app_commands.Group):
    def __init__(self):
        super().__init__(name="user", description="ユーザー関連のコマンド集!")

    @app_commands.command(name="info", description="ユーザー情報を確認します。")
    async def info(self, interaction: discord.Interaction, user: discord.User):
        await interaction.response.send_message(f"{user.name}さんのIDは{user.id}です。")

    @app_commands.command(name="ban", description="ユーザーをBANします。")
    async def ban(self, interaction: discord.Interaction, user: discord.User, reason: str):
        await interaction.response.send_message(f"{user.name}さんを'{reason}'という理由でBANしました!")

intents = discord.Intents.default()
bot = commands.Bot(command_prefix="!", intents=intents)
bot.tree.add_command(UserCommandGroup())   # グループは sync() の前に先に登録!

@bot.event
async def on_ready():
    await bot.tree.sync()
    print(f"✅ {bot.user} ボットの準備ができました!")

bot.run("YOUR_TOKEN")

🚀 使用例

  1. /user info user:@山田太郎 → 山田太郎さんのIDは1234567890です。
  2. /user ban user:@山田太郎 reason:暴言 → 山田太郎さんを'暴言'という理由でBANしました!

🎁 ボーナスTips

  • グループ名は name="..."、説明は description="..." で決められます!
  • グループの中にコマンドを追加するときは @app_commands.command() デコレーターを使います。
  • 実際のサーバーで管理者機能、ゲームコマンド、設定コマンドなどをまとめて作るときに最高です!

📌 まとめ

サブコマンドは機能が増えるほど必須! コマンドをきれいにまとめることで、ボットがぐっと整った印象になります。

次回は…

ボタンやセレクトメニュー(SelectMenu)のようなUIコンポーネントを入れる方法をお伝えします! 😎

連載 · 全32回中3回目

Discordボット開発

  1. #1Discordボット開発 - スラッシュコマンド(Slash Command)完全攻略!
  2. #2スラッシュコマンドにオプション(Arguments)を追加しよう!
  3. #3スラッシュコマンドにサブコマンド(Subcommand)を追加しよう!現在の記事
  4. #4スラッシュコマンドで埋め込み(Embed)を送信しよう!
  5. #5ボタン(Button)のインタラクションを実装しよう!
  6. #6ドロップダウン(Select Menu)メニューを実装しよう!
  7. #7モーダル(Modal)で入力を受け取る方法 (Pythonサンプル付き)
  8. #8埋め込み(Embed)を画像・フィールドで飾る (Pythonサンプル付き)
  9. #9AI(Claude・ChatGPT API)と連携する! (Pythonサンプル付き)
  10. #10多言語(i18n)に対応する! (Pythonサンプル付き)
  11. #11FlaskでWebダッシュボードを作る! (Pythonサンプル付き)
  12. #12コマンドのクールダウン(Cooldown)・権限(Permission)を管理しよう! (Pythonサンプル付き)
  13. #13ロール・チャンネルの自動化でサーバーを管理しよう! (Pythonサンプル付き)
  14. #14データを保存しよう!JSON vs SQLite (Pythonサンプル付き)
  15. #15슬래시 명령어 그룹(Group)으로 명령어 정리하기! (파이썬 예제) (韓国語)
  16. #16리마인더·알림 기능 만들기! 봇이 먼저 말 걸게 하기 (파이썬 예제) (韓国語)
  17. #17RAG로 문서 기반 답변봇 만들기! 우리 서버 전용 FAQ 봇 (파이썬 예제) (韓国語)
  18. #18투표(Poll) 기능 만들기! 다수결로 정하는 서버 규칙 (파이썬 예제) (韓国語)
  19. #19Cog로 코드 쪼개기! 1000줄 봇도 안 더러워지는 구조 (파이썬 예제) (韓国語)
  20. #20자동 환영 메시지·온보딩 만들기! 규칙 동의 버튼으로 자동 역할 부여 (파이썬 예제) (韓国語)
  21. #21키워드 자동응답·금지어 필터 만들기! 경고 누적으로 자동 제재까지 (파이썬 예제) (韓国語)
  22. #22슬래시 명령어 자동완성(Autocomplete) 만들기! 금지어를 골라서 추가·삭제 (파이썬 예제) (韓国語)
  23. #23aiosqlite로 비동기 DB 제대로 설계하기! JSON 탈출 (파이썬 예제) (韓国語)
  24. #24채널 난독화(Channel Obfuscation) 대응하기! 11/16부터 안 보이는 채널이 생겨요 (파이썬 예제) (韓国語)
  25. #25봇이 죽지 않게! 에러 핸들링·로깅 체계 잡기 (파이썬 예제) (韓国語)
  26. #26티켓(Ticket) 문의 시스템 만들기! 버튼 하나로 1:1 상담 채널 자동 생성 (파이썬 예제) (韓国語)
  27. #27티켓 담당자 배정·우선순위 만들기! 스태프가 여러 명이어도 안 꼬이게 (파이썬 예제) (韓国語)
  28. #28레벨·경험치(XP) 시스템 만들기! 채팅할수록 레벨업, 랭킹판까지 (파이썬 예제) (韓国語)
  29. #29화폐·상점(Economy) 시스템 만들기! 코인 벌어서 아이템 사기 (파이썬 예제) (韓国語)
  30. #30投票・アンケート(Poll)ボットを作ろう!ネイティブ投票+ボタンでリアルタイム集計まで(Pythonサンプル) 🗳️
  31. #32サーバーログ・監査ログ(Audit Log)チャンネルを作ろう!メッセージの削除・編集・入退室・キックまで自動記録(Pythonサンプル) 🕵️
  32. #33임시 음성방 확장, 파티방 만들기! 방장 위임·강퇴·초대 전용(비공개) 방 + 전용 채팅방 자동 생성 (파이썬 예제) 🎉 (韓国語)
全32回を表示閉じる

著者

Mojangcam

自分でコードを書き、サーバーを動かし、詰まったエラーを解決しながら学んだことを記録する開発・IT実践ブログ