From 7c7b696505757160a41928c2feae99ec5889c9ea Mon Sep 17 00:00:00 2001 From: Michael McCarty Date: Thu, 2 Apr 2026 12:52:37 -0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20fix:=20include=20eeid=20&=20improve?= =?UTF-8?q?=20misc=20settings=20dump?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 5 +++++ src/boost/contract_report.go | 2 +- src/boost/replay.go | 3 ++- src/boost/stones.go | 2 +- src/boost/teamwork.go | 2 +- src/ei/coop_status.go | 17 +++++++++++++++-- src/guildstate/slashcmd.go | 20 +++++++++----------- src/track/track_update.go | 2 +- 8 files changed, 35 insertions(+), 18 deletions(-) diff --git a/main.go b/main.go index cab604bf..79d54bdd 100644 --- a/main.go +++ b/main.go @@ -145,6 +145,11 @@ func init() { // Load status messages ei.LoadStatusMessages(statusMessagesFileName) + // Wire the coop status fix check to avoid import cycle in ei package + ei.CoopStatusFixEnabled = func() bool { + return guildstate.GetGuildSettingString("DEFAULT", "coop_status_fix") == "1" + } + // Read application parameters flag.Parse() diff --git a/src/boost/contract_report.go b/src/boost/contract_report.go index 000491ee..846615be 100644 --- a/src/boost/contract_report.go +++ b/src/boost/contract_report.go @@ -452,7 +452,7 @@ func ContractReport( // Get coop status; validate response // Using GetCoopStatusForCompletedContracts to ensure we cache completed contract data locally - coopStatus, nowTime, _, err := ei.GetCoopStatusForCompletedContracts(contractID, coopID) + coopStatus, nowTime, _, err := ei.GetCoopStatusForCompletedContracts(contractID, coopID, "") if err != nil { return fmt.Errorf("%w: %v", ErrCoopStatusFetch, err) } diff --git a/src/boost/replay.go b/src/boost/replay.go index 5196348d..97255893 100644 --- a/src/boost/replay.go +++ b/src/boost/replay.go @@ -281,6 +281,7 @@ func printArchivedContracts(userID string, archive []*ei.LocalContract, percent var components []discordgo.MessageComponent tvalFooterMessage := false eiUserName := farmerstate.GetMiscSettingString(userID, "ei_ign") + eiID := farmerstate.GetMiscSettingString(userID, "encrypted_ei_id") divider := true spacing := discordgo.SeparatorSpacingSizeSmall builder := strings.Builder{} @@ -425,7 +426,7 @@ func printArchivedContracts(userID string, archive []*ei.LocalContract, percent log.Printf("Evaluating contract %s coop %s for user %s\n", contractID, coopID, eiUserName) if coopID != "[solo]" { - coopStatus, _, _, err := ei.GetCoopStatusForCompletedContracts(contractID, a.GetCoopIdentifier()) + coopStatus, _, _, err := ei.GetCoopStatusForCompletedContracts(contractID, a.GetCoopIdentifier(), eiID) if err == nil { builder.Reset() for _, c := range coopStatus.GetContributors() { diff --git a/src/boost/stones.go b/src/boost/stones.go index 5f4c8f13..caa08c78 100644 --- a/src/boost/stones.go +++ b/src/boost/stones.go @@ -251,7 +251,7 @@ func DownloadCoopStatusStones(contractID string, coopID string, details bool, so var builderURL strings.Builder var field []*discordgo.MessageEmbedField - coopStatus, _, dataTimestampStr, err := ei.GetCoopStatus(contractID, coopID) + coopStatus, _, dataTimestampStr, err := ei.GetCoopStatus(contractID, coopID, "") if err != nil { return err.Error(), "", field } diff --git a/src/boost/teamwork.go b/src/boost/teamwork.go index de65d546..c11e8295 100644 --- a/src/boost/teamwork.go +++ b/src/boost/teamwork.go @@ -275,7 +275,7 @@ func DownloadCoopStatusTeamwork(contractID string, coopID string, setContractEst return fmt.Sprintf("Filenames:\n%s", strings.Join(fileNames, "\n")), nil, ContractScore{} } - coopStatus, nowTime, dataTimestampStr, err := ei.GetCoopStatus(contractID, coopID) + coopStatus, nowTime, dataTimestampStr, err := ei.GetCoopStatus(contractID, coopID, "") if err != nil { return err.Error(), nil, ContractScore{} } diff --git a/src/ei/coop_status.go b/src/ei/coop_status.go index 126eba7b..89519456 100644 --- a/src/ei/coop_status.go +++ b/src/ei/coop_status.go @@ -30,6 +30,11 @@ type eiData struct { var ( // Contracts is a map of contracts and is saved to disk eiDatas map[string]*eiData + + // CoopStatusFixEnabled is a callback set from outside the ei package (to avoid import + // cycles) that returns true when the alternate coop_status endpoint and eeid override + // should be used. It is wired up in main. + CoopStatusFixEnabled func() bool ) func init() { @@ -37,9 +42,13 @@ func init() { } // GetCoopStatus retrieves the coop status for a given contract and coop -func GetCoopStatus(contractID string, coopID string) (*ContractCoopStatusResponse, time.Time, string, error) { +func GetCoopStatus(contractID string, coopID string, eeidOverride string) (*ContractCoopStatusResponse, time.Time, string, error) { eggIncID := config.EIUserIDBasic reqURL := "https://www.auxbrain.com/ei/coop_status_bot" + if eeidOverride != "" && CoopStatusFixEnabled != nil && CoopStatusFixEnabled() { + eggIncID = DecryptEID(eeidOverride) + reqURL = "https://www.auxbrain.com/ei/coop_status" + } enc := base64.StdEncoding timestamp := time.Now() @@ -205,9 +214,13 @@ func ClearCoopStatusCachedData() { // GetCoopStatusForCompletedContracts retrieves the coop status for a given contract and coop, but is intended for completed contracts // This saves the data in compressed form without a timestamp in the filename -func GetCoopStatusForCompletedContracts(contractID string, coopID string) (*ContractCoopStatusResponse, time.Time, string, error) { +func GetCoopStatusForCompletedContracts(contractID string, coopID string, eeidOverride string) (*ContractCoopStatusResponse, time.Time, string, error) { eggIncID := config.EIUserIDBasic reqURL := "https://www.auxbrain.com/ei/coop_status_bot" + if eeidOverride != "" && CoopStatusFixEnabled != nil && CoopStatusFixEnabled() { + eggIncID = DecryptEID(eeidOverride) + reqURL = "https://www.auxbrain.com/ei/coop_status" + } enc := base64.StdEncoding timestamp := time.Now() diff --git a/src/guildstate/slashcmd.go b/src/guildstate/slashcmd.go index 39d12835..433bf5b7 100644 --- a/src/guildstate/slashcmd.go +++ b/src/guildstate/slashcmd.go @@ -312,21 +312,19 @@ func GetGuildSettingsForGuild(s *discordgo.Session, i *discordgo.InteractionCrea for _, key := range keys { value := guild.MiscSettingsString[key] items := splitCSV(value) + fmt.Fprintf(&builder, "- %s = %s\n", key, value) if len(items) > 1 { - fmt.Fprintf(&builder, "- %s (%d items)\n", key, len(items)) + fmt.Fprintf(&builder, " - parsed items (%d):\n", len(items)) for _, item := range items { - details := getSnowflakeDetails(s, guildID, item) - if len(details) == 1 { - fmt.Fprintf(&builder, " - %s\n", details[0]) - } else { - fmt.Fprintf(&builder, " - %s\n", item) + fmt.Fprintf(&builder, " - %s\n", item) + for _, detail := range getSnowflakeDetails(s, guildID, item) { + fmt.Fprintf(&builder, " - resolved: %s\n", detail) } } - } else { - fmt.Fprintf(&builder, "- %s = %s\n", key, value) - for _, detail := range getSnowflakeDetails(s, guildID, value) { - fmt.Fprintf(&builder, " - resolved: %s\n", detail) - } + continue + } + for _, detail := range getSnowflakeDetails(s, guildID, value) { + fmt.Fprintf(&builder, " - resolved: %s\n", detail) } } } diff --git a/src/track/track_update.go b/src/track/track_update.go index 27c4b188..bc0acce9 100644 --- a/src/track/track_update.go +++ b/src/track/track_update.go @@ -68,7 +68,7 @@ func DownloadCoopStatusTracker(contractID string, coopID string) (time.Time, flo return time.Time{}, 0, fmt.Errorf("invalid contract ID") } - coopStatus, _, _, err := ei.GetCoopStatus(contractID, coopID) + coopStatus, _, _, err := ei.GetCoopStatus(contractID, coopID, "") if err != nil { return time.Time{}, 0, err }