From e8f4bc9c21cee350e006196d6be722e10c1a8674 Mon Sep 17 00:00:00 2001 From: Siwoo Jeon Date: Tue, 13 May 2025 22:05:43 +0900 Subject: [PATCH] feat: add pagination embed in learnedDataList --- commands/learnedDataList.go | 33 ++++++++++++++++++++------------- configs/version.go | 2 +- utils/paginationEmbed.go | 31 +++++++++++++++++++++++-------- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/commands/learnedDataList.go b/commands/learnedDataList.go index dd29270..7099822 100644 --- a/commands/learnedDataList.go +++ b/commands/learnedDataList.go @@ -51,6 +51,9 @@ var LearnedDataListCommand *Command = &Command{ func getDescriptions(data *[]databases.Learn) (descriptions []string) { MAX_LENGTH := 100 + MAX_ITEM_LENGTH := 25 + + tempDesc := []string{} for _, data := range *data { command := data.Command @@ -64,7 +67,22 @@ func getDescriptions(data *[]databases.Learn) (descriptions []string) { result = string(runeResult[:MAX_LENGTH]) + "..." } - descriptions = append(descriptions, fmt.Sprintf("- %s: %s", command, result)) + tempDesc = append(tempDesc, fmt.Sprintf("- %s: %s\n", command, result)) + } + + var builder strings.Builder + + for i, s := range tempDesc { + builder.WriteString(s) + + if (i+1)%MAX_ITEM_LENGTH == 0 { + descriptions = append(descriptions, builder.String()) + builder.Reset() + } + } + + if builder.Len() > 0 { + descriptions = append(descriptions, builder.String()) } return } @@ -173,21 +191,10 @@ func learnedDataListRun(s *discordgo.Session, m any, args *[]string) { embed := &discordgo.MessageEmbed{ Title: fmt.Sprintf("%s님이 알려주신 지식", globalName), Color: utils.EmbedDefault, - // Description: utils.CodeBlock("md", fmt.Sprintf("# 총 %d개에요.\n%s", len(data), strings.Join(getDescriptions(&data), "\n"))), Thumbnail: &discordgo.MessageEmbedThumbnail{ URL: avatarUrl, }, } - // 실험용 데이터 - utils.StartPaginationEmbed(s, m, embed, []string{"asdf", "fdsa"}, 10) - - // switch m := m.(type) { - // case *discordgo.MessageCreate: - // s.ChannelMessageSendEmbedReply(m.ChannelID, embed, m.Reference()) - // case *utils.InteractionCreate: - // m.EditReply(&discordgo.WebhookEdit{ - // Embeds: &[]*discordgo.MessageEmbed{embed}, - // }) - // } + utils.StartPaginationEmbed(s, m, embed, getDescriptions(&data), utils.CodeBlock("md", fmt.Sprintf("# 총 %d개에요.\n", len(data))+"%s")) } diff --git a/configs/version.go b/configs/version.go index e9728e7..93d3fb7 100644 --- a/configs/version.go +++ b/configs/version.go @@ -7,7 +7,7 @@ import ( "git.wh64.net/muffin/goMuffin/utils" ) -const MUFFIN_VERSION = "5.1.0-gopher_dev.250513a-paginated_embed" +const MUFFIN_VERSION = "5.1.0-gopher_dev.250513b-paginated_embed" var updatedString string = utils.Decimals.FindAllStringSubmatch(MUFFIN_VERSION, -1)[3][0] diff --git a/utils/paginationEmbed.go b/utils/paginationEmbed.go index 5331afb..cdab278 100644 --- a/utils/paginationEmbed.go +++ b/utils/paginationEmbed.go @@ -15,7 +15,7 @@ type PaginationEmbed struct { Total int id string s *discordgo.Session - m any + desc string } var PaginationEmbeds = make(map[string]*PaginationEmbed) @@ -48,8 +48,19 @@ func makeComponents(id string, current, total int) *[]discordgo.MessageComponent } } +func makeDesc(desc, item string) string { + var newDesc string + + if desc == "" { + newDesc = item + } else { + newDesc = fmt.Sprintf(desc, item) + } + return newDesc +} + // StartPaginationEmbed starts new PaginationEmbed struct -func StartPaginationEmbed(s *discordgo.Session, m any, e *discordgo.MessageEmbed, data []string, length int) { +func StartPaginationEmbed(s *discordgo.Session, m any, e *discordgo.MessageEmbed, data []string, defaultDesc string) { var userId string switch m := m.(type) { @@ -67,10 +78,10 @@ func StartPaginationEmbed(s *discordgo.Session, m any, e *discordgo.MessageEmbed Total: len(data), id: id, s: s, - m: m, + desc: defaultDesc, } - p.Embed.Description = p.Data[0] + p.Embed.Description = makeDesc(p.desc, data[0]) switch m := m.(type) { case *discordgo.MessageCreate: @@ -102,17 +113,19 @@ func (p *PaginationEmbed) Prev(i *InteractionCreate) { Embeds: []*discordgo.MessageEmbed{ { Title: "❌ 오류", - Description: "해당 페이자가 처음ㅇ이에요.", + Description: "해당 페이지가 처음ㅇ이에요.", Color: EmbedFail, }, }, + Flags: discordgo.MessageFlagsEphemeral, }) return } p.Current -= 1 - p.Embed.Description = p.Data[p.Current-1] + p.Embed.Description = makeDesc(p.desc, p.Data[p.Current-1]) + i.Update(&discordgo.InteractionResponseData{ Embeds: []*discordgo.MessageEmbed{p.Embed}, Components: *makeComponents(p.id, p.Current, p.Total), @@ -125,17 +138,19 @@ func (p *PaginationEmbed) Next(i *InteractionCreate) { Embeds: []*discordgo.MessageEmbed{ { Title: "❌ 오류", - Description: "해당 페이자가 마지막ㅇ이에요.", + Description: "해당 페이지가 마지막ㅇ이에요.", Color: EmbedFail, }, }, + Flags: discordgo.MessageFlagsEphemeral, }) return } p.Current += 1 - p.Embed.Description = p.Data[p.Current-1] + p.Embed.Description = makeDesc(p.desc, p.Data[p.Current-1]) + i.Update(&discordgo.InteractionResponseData{ Embeds: []*discordgo.MessageEmbed{p.Embed}, Components: *makeComponents(p.id, p.Current, p.Total),