Ticket Bot

PythonDiscord.py

Discord Ticket Bot es un bot de Discord autoalojado que lleva un sistema completo de tickets de soporte a un servidor usando solo botones y menús desplegables — sin fricción de slash-commands, solo un botón "Crear un ticket" que abre un canal privado con permisos acotados por cada solicitud.

Arquitectura y Stack Tecnológico

Arquitectura Central

  • Lenguaje: Python
  • Framework: discord.py + Discord Components Library para botones y menús desplegables
  • Configuración: cuatro constantes fijadas directamente en main/main.py — ID de categoría, ID de canal de logs, ID de rol de staff, color del embed — sin base de datos, sin servicios externos
  • Estructura: un bot de un solo archivo (main/main.py); todo — el panel de tickets, la selección de categoría, la creación de canal, la notificación al staff y el cierre — vive en un solo lugar

Ciclo de Vida de un Ticket

Tres permission overwrites específicos de Discord hacen que cada canal de ticket sea privado por construcción: a @everyone se le niega leer/enviar, el creador del ticket obtiene acceso completo, y el rol de staff obtiene acceso de nivel creador más manage_messages. El rol propio del bot debe estar por encima del rol de staff en la jerarquía de Discord, o estos overwrites fallan con un error Forbidden.

Características Principales

Características de un Vistazo

Creación de Tickets Guiada por Botones, Sin Slash Commands

Un admin publica el panel con tb!ticket (protegido por @commands.has_permissions(administrator=True) — cualquier otro usuario es ignorado en silencio). Un usuario hace clic en el botón verde, elige Question / Help / Report en un menú desplegable, y el bot crea un canal privado llamado {emoji}┃{username}-ticket bajo la categoría configurada.

Escalamiento a Staff Sin Saturar el Canal

El botón "🔔 Llamar al staff" menciona al rol de staff configurado pero borra su propio mensaje automáticamente tras 20 segundos — la mención cumple su función sin dejar un mensaje permanente de bajo valor ensuciando el historial del ticket.

Cierre con Confirmación Antes de Borrar

Cerrar un ticket no borra el canal de inmediato — un mensaje "⚠️ ¿Estás seguro?" con botones Sí/No protege contra un clic accidental que borre una conversación real.

Log de Auditoría Estructurado en Cada Cierre

Cada cierre confirmado publica un embed en el canal de logs configurado con el nombre del canal del ticket, quién lo cerró (mencionado), una marca de tiempo UTC y el avatar de quien cerró — un registro permanente sobrevive aunque el canal del ticket en sí se elimine.

Destacados Técnicos

Los permission overwrites como modelo de seguridad

En vez de verificar permisos en código en cada mensaje, el bot fija permission overwrites nativos de Discord una sola vez al crear el canal — @everyone denegado, creador concedido, staff concedido más moderación — así que la privacidad del canal la aplica el propio Discord, no la lógica del bot.

Una restricción de jerarquía de Discord, documentada

El bot señala explícitamente que su propio rol debe estar por encima del rol de staff, ya que Discord solo permite a un bot modificar permisos de roles por debajo del suyo — una restricción de la plataforma fácil de golpear en silencio (un error Forbidden) si se pasa por alto, así que se documenta directamente en vez de dejarla como sorpresa.

Notificaciones que expiran automáticamente

Que el mensaje de llamada al staff se borre solo tras 20 segundos es una decisión pequeña pero deliberada: la mención necesita verse una vez, no preservarse — manteniendo el canal legible mientras la conversación continúa.

Estructura del Proyecto

discord-ticket-bot-py/
├── main/
│   └── main.py        # Todo el bot: panel de tickets, selección de categoría, creación de canal,
│                       # permission overwrites, llamada al staff, confirmación de cierre, logging
├── req.txt             # Dependencias de Python (discord.py, Discord Components Library)
└── README.md

Impacto y Escalabilidad

  • Cero infraestructura: sin base de datos, sin servicio externo — las constantes de configuración del propio bot son toda la instalación
  • Privacidad nativa de Discord: los canales de ticket son privados por construcción vía permission overwrites, no verificaciones de acceso a nivel de app
  • Auditable por diseño: cada cierre deja una entrada de log estructurada, aunque el canal del ticket en sí se elimine
  • Fácil de extender: un bot de un solo archivo significa que agregar una cuarta categoría de ticket o un botón nuevo es un cambio pequeño y localizado

Notas

Construido con Python, discord.py y Discord Components Library. El código es público en GitHub. Para la referencia de instalación y comandos, consulta la wiki de documentación completa.

🖼️ IMAGE PLACEHOLDER — el embed del panel de tickets con el botón "Crear un ticket" y el menú de selección de categoría

🖼️ IMAGE PLACEHOLDER — un canal de ticket abierto mostrando el mensaje de bienvenida con los botones de Cerrar/Llamar al staff