From f540a61f0533fc4b4128bee9e20d8cf70e4a92cf Mon Sep 17 00:00:00 2001 From: Siwoo Jeon Date: Sat, 5 Apr 2025 18:54:20 +0900 Subject: [PATCH] fix: Choices can't show in help command --- commands/discommand.go | 8 ++++---- commands/help.go | 13 ++----------- main.go | 11 +++++++++++ 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/commands/discommand.go b/commands/discommand.go index f2e9b4b..f69a5a7 100644 --- a/commands/discommand.go +++ b/commands/discommand.go @@ -63,8 +63,8 @@ const ( Generals Category = "일반" ) -var commandMutex *sync.Mutex = &sync.Mutex{} -var componentMutex *sync.Mutex = &sync.Mutex{} +var commandMutex sync.Mutex +var componentMutex sync.Mutex func new() *DiscommandStruct { discommand := DiscommandStruct{ @@ -76,6 +76,7 @@ func new() *DiscommandStruct { } func (d *DiscommandStruct) LoadCommand(c *Command) { + defer commandMutex.Unlock() commandMutex.Lock() d.Commands[c.Name] = c d.Aliases[c.Name] = c.Name @@ -83,13 +84,12 @@ func (d *DiscommandStruct) LoadCommand(c *Command) { for _, alias := range c.Aliases { d.Aliases[alias] = c.Name } - commandMutex.Unlock() } func (d *DiscommandStruct) LoadComponent(c *Component) { + defer componentMutex.Unlock() componentMutex.Lock() d.Components = append(d.Components, c) - componentMutex.Unlock() } func (d *DiscommandStruct) MessageRun(name string, s *discordgo.Session, m *discordgo.MessageCreate, args []string) { diff --git a/commands/help.go b/commands/help.go index f80a52e..1b59a8d 100644 --- a/commands/help.go +++ b/commands/help.go @@ -19,16 +19,7 @@ var HelpCommand *Command = &Command{ Type: discordgo.ApplicationCommandOptionString, Name: "명령어", Description: "해당 명령어에 대ㅎ한 도움말을 볼 수 있어요.", - Choices: func() []*discordgo.ApplicationCommandOptionChoice { - choices := []*discordgo.ApplicationCommandOptionChoice{} - for _, command := range Discommand.Commands { - choices = append(choices, &discordgo.ApplicationCommandOptionChoice{ - Name: command.Name, - Value: command.Name, - }) - } - return choices - }(), + Choices: []*discordgo.ApplicationCommandOptionChoice{}, }, }, }, @@ -73,7 +64,7 @@ func helpRun(c *Command, s *discordgo.Session, m any, args *[]string) { case *discordgo.MessageCreate: commandName = Discommand.Aliases[strings.Join(*args, " ")] case *utils.InteractionCreate: - if opt, ok := m.Options["도움말"]; ok { + if opt, ok := m.Options["명령어"]; ok { commandName = opt.StringValue() } else { commandName = "" diff --git a/main.go b/main.go index 1d25d80..c15a5c2 100644 --- a/main.go +++ b/main.go @@ -39,6 +39,17 @@ func main() { dg.Open() for _, cmd := range commands.Discommand.Commands { + if cmd.Name == "도움말" { + // 극한의 성능 똥망 코드 탄생! + // 무려 똑같은 걸 반복해서 돌리는! + for _, a := range commands.Discommand.Commands { + cmd.Options[0].Choices = append(cmd.Options[0].Choices, &discordgo.ApplicationCommandOptionChoice{ + Name: a.Name, + Value: a.Name, + }) + } + } + go dg.ApplicationCommandCreate(dg.State.User.ID, "", cmd.ApplicationCommand) }