Compare commits

..

3 commits

5 changed files with 38 additions and 21 deletions

View file

@ -4,6 +4,7 @@ import (
"context"
"fmt"
"strconv"
"sync"
"git.wh64.net/muffin/goMuffin/configs"
"git.wh64.net/muffin/goMuffin/databases"
@ -28,7 +29,8 @@ const (
userLearn
)
var ch chan chStruct = make(chan chStruct)
var dataLengthCh chan chStruct = make(chan chStruct)
var dataLengthWg sync.WaitGroup
var DataLengthCommand *Command = &Command{
ApplicationCommand: &discordgo.ApplicationCommand{
@ -50,6 +52,7 @@ var DataLengthCommand *Command = &Command{
}
func getLength(data dataType, coll *mongo.Collection, filter bson.D) {
defer dataLengthWg.Done()
var err error
var cur *mongo.Cursor
var datas []bson.M
@ -62,7 +65,7 @@ func getLength(data dataType, coll *mongo.Collection, filter bson.D) {
defer cur.Close(context.TODO())
cur.All(context.TODO(), &datas)
ch <- chStruct{name: data, length: len(datas)}
dataLengthCh <- chStruct{name: data, length: len(datas)}
}
func dataLengthRun(s *discordgo.Session, m any) {
@ -85,6 +88,7 @@ func dataLengthRun(s *discordgo.Session, m any) {
channelId = m.ChannelID
}
dataLengthWg.Add(5)
go getLength(text, databases.Texts, bson.D{{}})
go getLength(muffin, databases.Texts, bson.D{{Key: "persona", Value: "muffin"}})
go getLength(nsfw, databases.Texts, bson.D{
@ -98,8 +102,12 @@ func dataLengthRun(s *discordgo.Session, m any) {
go getLength(learn, databases.Learns, bson.D{{}})
go getLength(userLearn, databases.Learns, bson.D{{Key: "user_id", Value: userId}})
for range 5 {
resp := <-ch
go func() {
dataLengthWg.Wait()
close(dataLengthCh)
}()
for resp := range dataLengthCh {
switch dataType(resp.name) {
case text:
textLength = resp.length
@ -113,7 +121,6 @@ func dataLengthRun(s *discordgo.Session, m any) {
userLearnLength = resp.length
}
}
close(ch)
sum := textLength + learnLength

View file

@ -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) {

View file

@ -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 = ""

View file

@ -7,7 +7,7 @@ import (
"git.wh64.net/muffin/goMuffin/utils"
)
const MUFFIN_VERSION = "5.0.0-gopher_preview.250405a"
const MUFFIN_VERSION = "5.0.0-gopher_preview.250405b"
var updatedString string = utils.Decimals.FindAllStringSubmatch(MUFFIN_VERSION, -1)[3][0]

19
main.go
View file

@ -6,6 +6,7 @@ import (
"os"
"os/signal"
"syscall"
"time"
"git.wh64.net/muffin/goMuffin/commands"
"git.wh64.net/muffin/goMuffin/components"
@ -38,7 +39,25 @@ func main() {
dg.Open()
go func() {
for {
dg.UpdateCustomStatus("ㅅ살려주세요..!")
time.Sleep(time.Minute * 10)
}
}()
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)
}