diff --git a/commands/learnedDataList.go b/commands/learnedDataList.go index 9c3554c..be71433 100644 --- a/commands/learnedDataList.go +++ b/commands/learnedDataList.go @@ -13,22 +13,39 @@ import ( "go.mongodb.org/mongo-driver/v2/mongo" ) +const ( + learnArgsCommand = "단어:" + learnArgsResult = "대답:" +) + var LearnedDataListCommand *Command = &Command{ ApplicationCommand: &discordgo.ApplicationCommand{ Type: discordgo.ChatApplicationCommand, Name: "리스트", Description: "당신이 가ㄹ르쳐준 지식을 나열해요.", + Options: []*discordgo.ApplicationCommandOption{ + { + Name: "쿼리", + Description: "해당 단어가 포함된 결과만 찾아요.", + Required: false, + }, + }, }, Aliases: []string{"list", "목록", "지식목록"}, DetailedDescription: &DetailedDescription{ Usage: fmt.Sprintf("%s리스트", configs.Config.Bot.Prefix), + Examples: []string{ + fmt.Sprintf("%s리스트 ㅁㄴㅇㄹ", configs.Config.Bot.Prefix), + fmt.Sprintf("%s리스트 단어:안녕", configs.Config.Bot.Prefix), + fmt.Sprintf("%s리스트 대답:머핀", configs.Config.Bot.Prefix), + }, }, Category: Chatting, MessageRun: func(ctx *MsgContext) { - learnedDataListRun(ctx.Session, ctx.Msg) + learnedDataListRun(ctx.Session, ctx.Msg, &ctx.Args) }, ChatInputRun: func(ctx *ChatInputContext) { - learnedDataListRun(ctx.Session, ctx.Inter) + learnedDataListRun(ctx.Session, ctx.Inter, nil) }, } @@ -39,24 +56,66 @@ func getDescriptions(data *[]databases.Learn) (descriptions []string) { return } -func learnedDataListRun(s *discordgo.Session, m any) { +func learnedDataListRun(s *discordgo.Session, m any, args *[]string) { var userId, globalName, avatarUrl string var data []databases.Learn + var filter bson.E switch m := m.(type) { case *discordgo.MessageCreate: userId = m.Author.ID globalName = m.Author.GlobalName avatarUrl = m.Author.AvatarURL("512") + + query := strings.Join(*args, " ") + if strings.HasPrefix(query, learnArgsResult) { + query, _ = strings.CutPrefix(query, learnArgsResult) + filter = bson.E{ + Key: "result", + Value: bson.M{ + "$regex": query, + }, + } + } else { + query, _ = strings.CutPrefix(query, learnArgsCommand) + filter = bson.E{ + Key: "command", + Value: bson.M{ + "$regex": query, + }, + } + } case *utils.InteractionCreate: m.DeferReply(true) userId = m.Member.User.ID globalName = m.Member.User.GlobalName avatarUrl = m.Member.User.AvatarURL("512") + + if opt, ok := m.Options["쿼리"]; ok { + query := opt.StringValue() + + if strings.HasPrefix(query, learnArgsResult) { + query, _ = strings.CutPrefix(query, learnArgsResult) + filter = bson.E{ + Key: "result", + Value: bson.M{ + "$regex": query, + }, + } + } else { + query, _ = strings.CutPrefix(query, learnArgsCommand) + filter = bson.E{ + Key: "command", + Value: bson.M{ + "$regex": query, + }, + } + } + } } - cur, err := databases.Learns.Find(context.TODO(), bson.D{{Key: "user_id", Value: userId}}) + cur, err := databases.Learns.Find(context.TODO(), bson.D{{Key: "user_id", Value: userId}, filter}) if err != nil { if err == mongo.ErrNoDocuments { embed := &discordgo.MessageEmbed{ diff --git a/configs/version.go b/configs/version.go index dcb0b48..6df6301 100644 --- a/configs/version.go +++ b/configs/version.go @@ -7,7 +7,7 @@ import ( "git.wh64.net/muffin/goMuffin/utils" ) -const MUFFIN_VERSION = "5.0.1-gopher_release.250505a" +const MUFFIN_VERSION = "5.1.0-gopher_dev.250510a" var updatedString string = utils.Decimals.FindAllStringSubmatch(MUFFIN_VERSION, -1)[3][0] diff --git a/utils/regexp.go b/utils/regexp.go index f162478..f180d6e 100644 --- a/utils/regexp.go +++ b/utils/regexp.go @@ -2,7 +2,11 @@ package utils import "regexp" -var FlexibleStringParser *regexp.Regexp = regexp.MustCompile("[^\\s\"'「」«»]+|\"([^\"]*)\"|'([^']*)'|「([^」]*)」|«([^»]*)»") -var Decimals *regexp.Regexp = regexp.MustCompile(`\d+`) -var ItemIdRegexp *regexp.Regexp = regexp.MustCompile(`No.\d+`) -var EmojiRegexp *regexp.Regexp = regexp.MustCompile(``) +var ( + FlexibleStringParser = regexp.MustCompile("[^\\s\"'「」«»]+|\"([^\"]*)\"|'([^']*)'|「([^」]*)」|«([^»]*)»") + Decimals = regexp.MustCompile(`\d+`) + ItemIdRegexp = regexp.MustCompile(`No.\d+`) + EmojiRegexp = regexp.MustCompile(``) + LearnQueryCommand = regexp.MustCompile(`^단어:`) + LearnQueryResult = regexp.MustCompile(`^대답:`) +)