From a41fa60d9451aca009c04bb69358a37e6852609a Mon Sep 17 00:00:00 2001 From: Henry Asbridge Date: Sat, 23 Apr 2022 16:24:15 +0100 Subject: [PATCH] Multiple game server embeds and fixed minecrafts name --- config/Config.go | 2 +- config/PrettyGameNames.go | 4 +++- discord/ServerStatus.go | 38 +++++++++++++++++++++++++++++++------- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/config/Config.go b/config/Config.go index 0f34498..f81007c 100644 --- a/config/Config.go +++ b/config/Config.go @@ -34,7 +34,7 @@ type Server struct { Port int `toml:"port"` Colour int `toml:"colour"` PublicHostname string `toml:"public_hostname"` - ShowMap bool `toml:"show_map"` + HideMap bool `toml:"hide_map"` ChannelID string `toml:"channel"` Country string `toml:"country"` SteamID string `toml:"steamid"` diff --git a/config/PrettyGameNames.go b/config/PrettyGameNames.go index e62967f..07fbfdf 100644 --- a/config/PrettyGameNames.go +++ b/config/PrettyGameNames.go @@ -39,7 +39,9 @@ func GetGameNames() { for _, line := range strings.Split(string(gameNames), "\n") { if len(line) > 0 && !strings.HasPrefix(line, "#") { parts := strings.Split(line, "|") - PrettyGameNames[parts[0]] = parts[1] + for _, altNames := range strings.Split(parts[0], ",") { + PrettyGameNames[strings.ToLower(altNames)] = parts[1] + } } } diff --git a/discord/ServerStatus.go b/discord/ServerStatus.go index 2bf04c0..71607d0 100644 --- a/discord/ServerStatus.go +++ b/discord/ServerStatus.go @@ -22,6 +22,20 @@ var goGSMEmbedFooter = discordgo.MessageEmbedFooter{ Text: "GoGSM 1.0", } +func cacheContainsMessageID(id string) bool { + for _, v := range config.GlobalCache.Items() { + switch v.Object.(type) { + case string: + if v.Object.(string) == id { + return true + } + default: + continue + } + } + return false +} + // RefreshServerStatus refreshes the status embeds for all servers // TODO: This is too monolithic. It should be broken up into smaller functions func RefreshServerStatus(s *discordgo.Session) { @@ -61,6 +75,9 @@ func RefreshServerStatus(s *discordgo.Session) { if message, ok := config.GlobalCache.Get(name); ok { messageToEdit = message.(string) } else { + if cacheContainsMessageID(i2.ID) { + continue + } err := s.ChannelMessageDelete(server.ChannelID, i2.ID) if err != nil { log.Println("Error deleting message:", err) @@ -83,9 +100,15 @@ func RefreshServerStatus(s *discordgo.Session) { game = prettyGame } + // TODO: This is really hacky but minecraft has forced me to do this + serverName := resp.Name + if serverName[0] == 239 { + serverName = resp.Name[4:] + } + embedFields = append(embedFields, &discordgo.MessageEmbedField{ Name: "Name", - Value: resp.Name, + Value: serverName, Inline: true, }) embedFields = append(embedFields, &discordgo.MessageEmbedField{ @@ -101,12 +124,13 @@ func RefreshServerStatus(s *discordgo.Session) { Value: strconv.Itoa(len(resp.Players)) + "/" + maxPlayers, Inline: true, }) - embedFields = append(embedFields, &discordgo.MessageEmbedField{ - Name: "Map", - Value: "`" + resp.Map + "`", - Inline: true, - }) - + if !server.HideMap { + embedFields = append(embedFields, &discordgo.MessageEmbedField{ + Name: "Map", + Value: "`" + resp.Map + "`", + Inline: true, + }) + } embedFields = append(embedFields, &spacer) hostname := server.Hostname