feat: integrate music commands with Lavalink support

- Added new music commands: play, queue, and volume.
- Implemented music management using disgolink for Lavalink integration.
- Updated bot initialization to include Lavalink host and password.
- Enhanced interaction handling for music commands, requiring DJ role for usage.
- Introduced now playing message with interactive buttons for controlling playback.
- Updated dependencies in go.mod for disgolink and snowflake.
This commit is contained in:
2026-03-18 03:47:42 +00:00
parent d177114ddb
commit d7edfea45e
16 changed files with 1268 additions and 19 deletions
+17 -6
View File
@@ -5,6 +5,7 @@ import (
"velox-bot/internal/commands"
"velox-bot/internal/db/services"
"velox-bot/internal/events"
"velox-bot/internal/music"
"github.com/bwmarrin/discordgo"
)
@@ -16,9 +17,11 @@ type Bot struct {
Commands []*discordgo.ApplicationCommand
registeredCommands []*discordgo.ApplicationCommand
Services *services.Services
LavalinkHost string
LavalinkPass string
}
func NewBot(token, appID, guildID string, cmds []*discordgo.ApplicationCommand, services *services.Services) (*Bot, error) {
func NewBot(token, appID, guildID, lavalinkHost, lavalinkPass string, cmds []*discordgo.ApplicationCommand, services *services.Services) (*Bot, error) {
session, err := discordgo.New("Bot " + token)
if err != nil {
return nil, err
@@ -31,11 +34,13 @@ func NewBot(token, appID, guildID string, cmds []*discordgo.ApplicationCommand,
session.Identify.Intents = discordgo.IntentsGuilds | discordgo.IntentsGuildMessages | discordgo.IntentsGuildVoiceStates
return &Bot{
Session: session,
AppID: appID,
GuildID: guildID,
Commands: cmds,
Services: services,
Session: session,
AppID: appID,
GuildID: guildID,
Commands: cmds,
Services: services,
LavalinkHost: lavalinkHost,
LavalinkPass: lavalinkPass,
}, nil
}
@@ -44,6 +49,8 @@ func (b *Bot) Start() error {
return err
}
_ = music.Init(b.Session, b.AppID, b.LavalinkHost, b.LavalinkPass)
b.registeredCommands = make([]*discordgo.ApplicationCommand, len(b.Commands))
for _, cmd := range b.Commands {
created, err := b.Session.ApplicationCommandCreate(b.AppID, b.GuildID, cmd)
@@ -62,8 +69,12 @@ func (b *Bot) Start() error {
b.Session.AddHandler(func(s *discordgo.Session, vs *discordgo.VoiceStateUpdate) {
events.HandleVoiceStateUpdate(s, vs, b.Services)
music.OnVoiceStateUpdate(vs)
})
b.Session.AddHandler(func(s *discordgo.Session, ev *discordgo.VoiceServerUpdate) {
music.OnVoiceServerUpdate(ev)
})
return nil
}