package discord import ( "fmt" "strings" "git.jojodev.com/minecraft/mcm-discord/database" "git.jojodev.com/minecraft/mcm-discord/discord/rest" "github.com/Karitham/corde" ) func (d Discord) sync(w corde.ResponseWriter, i *corde.Interaction) { members, err := rest.Members(i.GuildID.String(), d.token) if err != nil { w.Respond(corde.NewResp().Content("Could not sync.").Ephemeral()) return } syncPlayer := func(pl *database.Player) (bool, error) { for _, member := range members { name := member.Nick if name == "" { name = member.User.Username } if strings.EqualFold(pl.Username, name) { return true, d.store.PlayerUpdateDiscordID(member.User.ID, pl.ID) } } return false, nil } players, err := d.store.PlayersByDiscordIsNull() if err != nil { w.Respond(corde.NewResp().Content("Could not sync.").Ephemeral()) return } needed, err := d.store.PlayersByDiscordIsNullCount() if err != nil { w.Respond(corde.NewResp().Content("Could not sync.").Ephemeral()) return } var synced []string var notSynced []string if needed > 0 { for _, player := range players { ok, err := syncPlayer(player) if err != nil { w.Respond(corde.NewResp().Content("Could not sync.").Ephemeral()) return } if ok { synced = append(synced, player.Username) continue } notSynced = append(notSynced, player.Username) } } txt := fmt.Sprintf("Synced\n\t%s\n\nNot Synced\n\t%s", strings.Join(synced, "\n\t"), strings.Join(notSynced, "\n\t")) w.Respond(corde.NewResp().Attachment(strings.NewReader(txt), "sync.txt").Contentf("Successfully synced %d/%d players.", len(synced), needed)) }