Categoría: Bots de Discord

Crear un bot de Discord#3¡Añade subcomandos (Subcommand) a tus Slash Commands!

Esta entrada es una traducción del original en coreano.

Índice5 secciones

¡Hola! Soy Mojangcam 😎 ¡Esta vez toca una función un poco más avanzada! Vamos a ver los subcomandos, que agrupan varios Slash Commands.

Por ejemplo…

  • /user info → ver la información de un usuario
  • /user ban → bloquear a un usuario

¡La idea es meter varias funciones dentro de un solo grupo de comandos, así!


🧩 ¿Subcomandos? ¿Qué es eso?

Un subcomando es una estructura que se usa con la forma /명령어 서브명령어 (/comando subcomando). ¡Cuantas más funciones tenga tu bot, más útil es, porque te permite tenerlo todo bien ordenado!


🧑‍💻 Código de ejemplo

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="¡Comandos relacionados con usuarios!")

    @app_commands.command(name="info", description="Muestra la información del usuario.")
    async def info(self, interaction: discord.Interaction, user: discord.User):
        await interaction.response.send_message(f"El ID de {user.name} es {user.id}.")

    @app_commands.command(name="ban", description="Bloquea al usuario.")
    async def ban(self, interaction: discord.Interaction, user: discord.User, reason: str):
        await interaction.response.send_message(f"¡Bloqueé a {user.name} por el motivo '{reason}'!")

intents = discord.Intents.default()
bot = commands.Bot(command_prefix="!", intents=intents)
bot.tree.add_command(UserCommandGroup())   # ¡Registra el grupo antes de llamar a sync()!

@bot.event
async def on_ready():
    await bot.tree.sync()
    print(f"✅ ¡El bot {bot.user} está listo!")

bot.run("YOUR_TOKEN")

🚀 Ejemplo de uso

  1. /user info user:@JuanPérez → El ID de JuanPérez es 1234567890.
  2. /user ban user:@JuanPérez reason:insultos → ¡Bloqueé a JuanPérez por el motivo 'insultos'!

🎁 Consejos extra

  • Puedes definir el nombre del grupo con name="..." y la descripción con description="...".
  • Para añadir comandos dentro del grupo, usa el decorador @app_commands.command().
  • ¡Es perfecto cuando quieres agrupar funciones de administración, comandos de juego, comandos de configuración y cosas así en un servidor real!

📌 Para terminar

¡Los subcomandos se vuelven imprescindibles a medida que tu bot crece en funciones! Al agrupar los comandos de forma ordenada, tu bot se siente mucho más pulido.

La próxima vez…

¡Te enseñaré cómo añadir componentes de interfaz como botones y menús de selección (SelectMenu)! 😎

Serie · Parte 3 de 32

Crear un bot de Discord

  1. #1Crear un bot de Discord - ¡Domina por completo los Slash Commands!
  2. #2¡Añade opciones (argumentos) a tus Slash Commands!
  3. #3¡Añade subcomandos (Subcommand) a tus Slash Commands!Estás aquí
  4. #4¡Envía embeds con Slash Commands!
  5. #5¡Implementa interacciones con botones (Button)!
  6. #6¡Implementa menús desplegables (Select Menu)!
  7. #7Pide texto al usuario con un modal (Modal) (ejemplo en Python)
  8. #8Decora embeds (Embed) con imágenes y campos (ejemplo en Python)
  9. #9¡Integra la IA (API de Claude y ChatGPT)! (ejemplo en Python)
  10. #10¡Añade soporte multilingüe (i18n)! (ejemplo en Python)
  11. #11¡Crea un panel web con Flask! (ejemplo en Python)
  12. #12¡Gestiona los cooldowns y permisos de tus comandos! (ejemplo en Python)
  13. #13¡Administra tu servidor automatizando roles y canales! (ejemplo en Python)
  14. #14¡Guarda tus datos! JSON vs SQLite (ejemplo en Python)
  15. #15슬래시 명령어 그룹(Group)으로 명령어 정리하기! (파이썬 예제) (en coreano)
  16. #16리마인더·알림 기능 만들기! 봇이 먼저 말 걸게 하기 (파이썬 예제) (en coreano)
  17. #17RAG로 문서 기반 답변봇 만들기! 우리 서버 전용 FAQ 봇 (파이썬 예제) (en coreano)
  18. #18투표(Poll) 기능 만들기! 다수결로 정하는 서버 규칙 (파이썬 예제) (en coreano)
  19. #19Cog로 코드 쪼개기! 1000줄 봇도 안 더러워지는 구조 (파이썬 예제) (en coreano)
  20. #20자동 환영 메시지·온보딩 만들기! 규칙 동의 버튼으로 자동 역할 부여 (파이썬 예제) (en coreano)
  21. #21키워드 자동응답·금지어 필터 만들기! 경고 누적으로 자동 제재까지 (파이썬 예제) (en coreano)
  22. #22슬래시 명령어 자동완성(Autocomplete) 만들기! 금지어를 골라서 추가·삭제 (파이썬 예제) (en coreano)
  23. #23aiosqlite로 비동기 DB 제대로 설계하기! JSON 탈출 (파이썬 예제) (en coreano)
  24. #24채널 난독화(Channel Obfuscation) 대응하기! 11/16부터 안 보이는 채널이 생겨요 (파이썬 예제) (en coreano)
  25. #25봇이 죽지 않게! 에러 핸들링·로깅 체계 잡기 (파이썬 예제) (en coreano)
  26. #26티켓(Ticket) 문의 시스템 만들기! 버튼 하나로 1:1 상담 채널 자동 생성 (파이썬 예제) (en coreano)
  27. #27티켓 담당자 배정·우선순위 만들기! 스태프가 여러 명이어도 안 꼬이게 (파이썬 예제) (en coreano)
  28. #28레벨·경험치(XP) 시스템 만들기! 채팅할수록 레벨업, 랭킹판까지 (파이썬 예제) (en coreano)
  29. #29화폐·상점(Economy) 시스템 만들기! 코인 벌어서 아이템 사기 (파이썬 예제) (en coreano)
  30. #30¡Crea un bot de encuestas y votaciones (Poll)! Encuestas nativas + botones con recuento en tiempo real (ejemplo en Python) 🗳️
  31. #32¡Crea un canal de registros y auditoría (Audit Log) del servidor! Registra automáticamente mensajes borrados y editados, entradas, salidas y expulsiones (ejemplo en Python) 🕵️
  32. #33임시 음성방 확장, 파티방 만들기! 방장 위임·강퇴·초대 전용(비공개) 방 + 전용 채팅방 자동 생성 (파이썬 예제) 🎉 (en coreano)
Ver las 32Contraer

Autor

Mojangcam

Un registro práctico de desarrollo e IT: código que escribo, servidores que mantengo y los errores que resuelvo por el camino.