37 lines
794 B
Go
37 lines
794 B
Go
package discord
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
|
|
"github.com/disgoorg/disgo/events"
|
|
|
|
"discord-music-bot/internal/commands"
|
|
)
|
|
|
|
type Router struct {
|
|
registry *commands.Registry
|
|
logger *slog.Logger
|
|
}
|
|
|
|
func NewRouter(registry *commands.Registry, logger *slog.Logger) *Router {
|
|
return &Router{
|
|
registry: registry,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (r *Router) OnApplicationCommand(event *events.ApplicationCommandInteractionCreate) {
|
|
name := event.SlashCommandInteractionData().CommandName()
|
|
|
|
cmd, ok := r.registry.Get(name)
|
|
if !ok {
|
|
r.logger.Warn("received unknown command", slog.String("command", name))
|
|
return
|
|
}
|
|
|
|
if err := cmd.Execute(context.Background(), event); err != nil {
|
|
r.logger.Error("command execution failed", slog.String("command", name), slog.Any("err", err))
|
|
}
|
|
}
|