2022-01-06 05:23:19 +00:00
|
|
|
package discord
|
2022-01-07 04:22:12 +00:00
|
|
|
|
|
|
|
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))
|
|
|
|
}
|