From ddf7efe273661c0c479d563e1b5ffa4bae4d8bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Wysoki=C5=84ski?= Date: Fri, 28 Oct 2022 12:32:34 +0000 Subject: [PATCH] refactor: make lists more readable (#32) Reviewed-on: https://gitea.dwysokinski.me/twhelp/dcbot/pulls/32 --- internal/discord/command_group.go | 57 ++++++++++++++--------------- internal/discord/command_monitor.go | 26 ++++++------- internal/discord/discord.go | 4 ++ 3 files changed, 45 insertions(+), 42 deletions(-) diff --git a/internal/discord/command_group.go b/internal/discord/command_group.go index f1bda65..71f6208 100644 --- a/internal/discord/command_group.go +++ b/internal/discord/command_group.go @@ -366,15 +366,39 @@ func (c *groupCommand) handleList(s *discordgo.Session, i *discordgo.Interaction return } + fields := make([]*discordgo.MessageEmbedField, 0, len(groups)) + for _, g := range groups { + channelGains := "Not set" + if g.ChannelGains != "" { + channelGains = buildChannelMention(g.ChannelGains) + } + channelLosses := "Not set" + if g.ChannelLosses != "" { + channelLosses = buildChannelMention(g.ChannelLosses) + } + fields = append(fields, &discordgo.MessageEmbedField{ + Name: g.ID, + Value: fmt.Sprintf( + "**Server**: %s\n**Channel gains**: %s\n**Channel losses**: %s\n**Internals**: %s\n **Barbarians**: %s", + g.ServerKey, + channelGains, + channelLosses, + boolToEmoji(g.Internals), + boolToEmoji(g.Barbarians), + ), + Inline: false, + }) + } + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ Embeds: []*discordgo.MessageEmbed{ { - Type: discordgo.EmbedTypeRich, - Title: "Group list", - Description: buildGroupListDescription(groups), - Timestamp: formatTimestamp(time.Now()), + Type: discordgo.EmbedTypeRich, + Title: "Group list", + Fields: fields, + Timestamp: formatTimestamp(time.Now()), }, }, }, @@ -622,28 +646,3 @@ func (c *groupCommand) handleDelete(s *discordgo.Session, i *discordgo.Interacti }, }) } - -func buildGroupListDescription(groups []domain.Group) string { - description := "**ID** - **Server** - **Channel gains** - **Channel losses** - **Internals** - **Barbarians**" - for i, g := range groups { - channelGains := "Not set" - if g.ChannelGains != "" { - channelGains = "<#" + g.ChannelGains + ">" - } - channelLosses := "Not set" - if g.ChannelLosses != "" { - channelLosses = "<#" + g.ChannelLosses + ">" - } - description += fmt.Sprintf( - "\n%d. %s - %s - %s - %s - %s - %s", - i+1, - g.ID, - g.ServerKey, - channelGains, - channelLosses, - boolToEmoji(g.Internals), - boolToEmoji(g.Barbarians), - ) - } - return description -} diff --git a/internal/discord/command_monitor.go b/internal/discord/command_monitor.go index e3e0c20..a6ca21a 100644 --- a/internal/discord/command_monitor.go +++ b/internal/discord/command_monitor.go @@ -5,7 +5,6 @@ import ( "fmt" "time" - "gitea.dwysokinski.me/twhelp/dcbot/internal/domain" "github.com/bwmarrin/discordgo" ) @@ -168,15 +167,24 @@ func (c *monitorCommand) handleList(s *discordgo.Session, i *discordgo.Interacti return } + fields := make([]*discordgo.MessageEmbedField, 0, len(monitors)) + for _, m := range monitors { + fields = append(fields, &discordgo.MessageEmbedField{ + Name: m.ID, + Value: fmt.Sprintf("**Tribe**: %s", buildLink(m.Tribe.Tag, m.Tribe.ProfileURL)), + Inline: false, + }) + } + _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ Embeds: []*discordgo.MessageEmbed{ { - Type: discordgo.EmbedTypeRich, - Title: "Monitor list", - Description: buildMonitorListDescription(monitors), - Timestamp: formatTimestamp(time.Now()), + Type: discordgo.EmbedTypeRich, + Title: "Monitor list", + Fields: fields, + Timestamp: formatTimestamp(time.Now()), }, }, }, @@ -204,11 +212,3 @@ func (c *monitorCommand) handleDelete(s *discordgo.Session, i *discordgo.Interac }, }) } - -func buildMonitorListDescription(monitors []domain.MonitorWithTribe) string { - description := "**ID** - **Tribe**" - for i, m := range monitors { - description += fmt.Sprintf("\n%d. %s - %s", i+1, m.ID, buildLink(m.Tribe.Tag, m.Tribe.ProfileURL)) - } - return description -} diff --git a/internal/discord/discord.go b/internal/discord/discord.go index cf71dcc..f9fc5a6 100644 --- a/internal/discord/discord.go +++ b/internal/discord/discord.go @@ -31,6 +31,10 @@ func buildLink(text string, url string) string { return fmt.Sprintf("[`%s`](%s)", text, url) } +func buildChannelMention(id string) string { + return "<#" + id + ">" +} + func boolToEmoji(val bool) string { if val { return ":white_check_mark:"