分类: Discord 机器人开发

Discord 机器人开发#3在 Slash Command 中添加子命令(Subcommand)!

本文译自韩语原文。

目录5 项

大家好!我是 Mojangcam 😎 这次来点更进阶的功能!我们要学习把 Slash Command 分组管理的子命令功能!

比如……

  • /user info → 查看用户信息
  • /user ban → 封禁用户

就是像这样,把多个功能放进同一个命令组里!


🧩 子命令?这是什么?

子命令就是以 /명령어 서브명령어(即"/命令 子命令")的形式来使用的结构。 机器人功能越多,就越能靠它整理得井井有条,非常实用!


🧑‍💻 示例代码

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="封禁用户。")
    async def ban(self, interaction: discord.Interaction, user: discord.User, reason: str):
        await interaction.response.send_message(f"已以 '{reason}' 为由封禁了 {user.name}!")

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:骂人 → 已以 '骂人' 为由封禁了 张三!

🎁 额外小技巧

  • 命令组的名称用 name="...",说明用 description="..." 来设置!
  • 在组里添加命令时,使用 @app_commands.command() 装饰器。
  • 在实际服务器中,把管理功能、游戏命令、设置命令等分组打包时特别好用!

📌 总结

功能越多,子命令就越是必不可少! 把命令整齐地分好组,机器人会显得更加规整有序。

下一篇……

我会介绍如何添加按钮、下拉菜单(SelectMenu)这类 UI 组件!😎

连载 · 共 32 篇中的第 3 篇

Discord 机器人开发

  1. #1Discord 机器人开发 - Slash Command 完全攻略!
  2. #2为 Slash Command 添加选项(Arguments)!
  3. #3在 Slash Command 中添加子命令(Subcommand)!当前文章
  4. #4用 Slash Command 发送 Embed 嵌入消息!
  5. #5实现按钮(Button)交互!
  6. #6实现下拉菜单(Select Menu)!
  7. #7用模态框(Modal)接收用户输入(Python 示例)
  8. #8用嵌入消息(Embed)的图片和字段美化消息(Python 示例)
  9. #9接入 AI(Claude·ChatGPT API)!(Python 示例)
  10. #10支持多语言(i18n)!(Python 示例)
  11. #11用 Flask 制作网页仪表盘!(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 实战博客