we are sending all conquers in one message | refactor | add find_lang_version_by_tag | bump github.com/tribalwarshelp/shared and golang-sdk

This commit is contained in:
Dawid Wysokiński 2020-07-09 13:30:02 +02:00 committed by Kichiyaki
parent 450f36a80f
commit d4c518749e
8 changed files with 135 additions and 37 deletions

View File

@ -5,6 +5,7 @@ import (
"log"
"time"
"github.com/pkg/errors"
shared_models "github.com/tribalwarshelp/shared/models"
"github.com/tribalwarshelp/dcbot/discord"
@ -62,7 +63,7 @@ func (h *handler) loadEnnoblements(servers []string) map[string]ennoblements {
return m
}
func (h *handler) loadLangVersions(servers []string) map[shared_models.LanguageTag]*shared_models.LangVersion {
func (h *handler) loadLangVersions(servers []string) ([]*shared_models.LangVersion, error) {
languageTags := []shared_models.LanguageTag{}
cache := make(map[shared_models.LanguageTag]bool)
for _, server := range servers {
@ -73,19 +74,14 @@ func (h *handler) loadLangVersions(servers []string) map[shared_models.LanguageT
}
}
langVersions := make(map[shared_models.LanguageTag]*shared_models.LangVersion)
langVersionsList, err := h.api.LangVersions.Browse(&shared_models.LangVersionFilter{
langVersionList, err := h.api.LangVersions.Browse(&shared_models.LangVersionFilter{
Tag: languageTags,
})
if err == nil {
for _, langVersion := range langVersionsList.Items {
langVersions[langVersion.Tag] = langVersion
}
} else {
log.Printf("Cannot load lang versions: %s", err.Error())
if err != nil {
return nil, errors.Wrap(err, "Cannot load lang versions")
}
return langVersions
return langVersionList.Items, nil
}
func (h *handler) checkLastEnnoblements() {
@ -105,7 +101,11 @@ func (h *handler) checkLastEnnoblements() {
}
log.Print("checkLastEnnoblements: number of loaded groups: ", total)
langVersions := h.loadLangVersions(servers)
langVersions, err := h.loadLangVersions(servers)
if err != nil {
log.Print(err)
return
}
ennoblementsByServerKey := h.loadEnnoblements(servers)
for _, group := range groups {
@ -114,9 +114,10 @@ func (h *handler) checkLastEnnoblements() {
}
for _, observation := range group.Observations {
ennoblements, ok := ennoblementsByServerKey[observation.Server]
langVersion, ok2 := langVersions[utils.LanguageTagFromWorldName(observation.Server)]
if ok && ok2 {
langVersion := utils.FindLangVersionByTag(langVersions, utils.LanguageTagFromWorldName(observation.Server))
if ok && langVersion != nil && langVersion.Host != "" {
if group.LostVillagesChannelID != "" {
msg := &discord.EmbedMessage{}
for _, ennoblement := range ennoblements.getLostVillagesByTribe(observation.TribeID) {
if !isPlayerTribeNil(ennoblement.NewOwner) &&
group.Observations.Contains(observation.Server, ennoblement.NewOwner.Tribe.ID) {
@ -128,12 +129,22 @@ func (h *handler) checkLastEnnoblements() {
ennoblement: ennoblement,
t: messageTypeLost,
}
msg := newMessage(newMsgDataConfig)
h.discord.SendEmbed(group.LostVillagesChannelID, msg.toEmbed())
msg.Append(newMessage(newMsgDataConfig).String())
}
if !msg.IsEmpty() {
h.discord.SendEmbed(group.LostVillagesChannelID,
discord.
NewEmbed().
SetTitle("Stracone wioski").
SetColor(colorLostVillage).
SetFields(msg.ToMessageEmbedFields()).
SetTimestamp(formatDateOfConquest(time.Now())).
MessageEmbed)
}
}
if group.ConqueredVillagesChannelID != "" {
msg := &discord.EmbedMessage{}
for _, ennoblement := range ennoblements.getConqueredVillagesByTribe(observation.TribeID) {
if !isPlayerTribeNil(ennoblement.OldOwner) &&
group.Observations.Contains(observation.Server, ennoblement.OldOwner.Tribe.ID) {
@ -145,8 +156,17 @@ func (h *handler) checkLastEnnoblements() {
ennoblement: ennoblement,
t: messageTypeConquer,
}
msg := newMessage(newMsgDataConfig)
h.discord.SendEmbed(group.ConqueredVillagesChannelID, msg.toEmbed())
msg.Append(newMessage(newMsgDataConfig).String())
}
if !msg.IsEmpty() {
h.discord.SendEmbed(group.ConqueredVillagesChannelID,
discord.
NewEmbed().
SetTitle("Podbite wioski").
SetColor(colorConqueredVillage).
SetFields(msg.ToMessageEmbedFields()).
SetTimestamp(formatDateOfConquest(time.Now())).
MessageEmbed)
}
}
}

View File

@ -98,13 +98,20 @@ func (msg message) formatMsgAboutVillageConquest() string {
formatMsgLink(msg.oldOwnerTribeTag, msg.oldOwnerTribeURL))
}
func (msg message) String() string {
fieldContent := msg.formatMsgAboutVillageConquest()
if msg.t == messageTypeLost {
fieldContent = msg.formatMsgAboutVillageLost()
}
return fieldContent + "\n"
}
func (msg message) toEmbed() *discordgo.MessageEmbed {
title := "Podbita wioska"
fieldContent := msg.formatMsgAboutVillageConquest()
fieldContent := msg.String()
color := colorConqueredVillage
if msg.t == messageTypeLost {
title = "Stracona wioska"
fieldContent = msg.formatMsgAboutVillageLost()
color = colorLostVillage
}

View File

@ -7,6 +7,7 @@ import (
"github.com/bwmarrin/discordgo"
"github.com/tribalwarshelp/dcbot/models"
"github.com/tribalwarshelp/dcbot/utils"
shared_models "github.com/tribalwarshelp/shared/models"
)
@ -467,32 +468,75 @@ func (s *Session) handleObservationsCommand(m *discordgo.MessageCreate, args ...
m.Author.Mention()))
return
}
group, err := s.cfg.GroupRepository.GetByID(context.Background(), groupID)
if err != nil || group.ServerID != m.GuildID {
s.SendMessage(m.ChannelID, m.Author.Mention()+` Nie znaleziono grupy.`)
return
}
observations, _, err := s.cfg.ObservationRepository.Fetch(context.Background(), &models.ObservationFilter{
GroupID: []int{groupID},
})
if err != nil {
s.SendMessage(m.ChannelID, m.Author.Mention()+` Wystąpił błąd wewnętrzny, prosimy spróbować później.`)
return
}
msg := ""
tribeIDsByServer := make(map[string][]int)
observationIndexByTribeID := make(map[int]int)
langTags := []shared_models.LanguageTag{}
for i, observation := range observations {
msg += fmt.Sprintf("**%d** | %d - %s - %d\n", i+1, observation.ID, observation.Server, observation.TribeID)
tribeIDsByServer[observation.Server] = append(tribeIDsByServer[observation.Server], observation.TribeID)
observationIndexByTribeID[observation.TribeID] = i
currentLangTag := utils.LanguageTagFromWorldName(observation.Server)
unique := true
for _, langTag := range langTags {
if langTag == currentLangTag {
unique = false
break
}
}
if unique {
langTags = append(langTags, currentLangTag)
}
}
if msg == "" {
msg = "Brak dodanych obserwacji do tej grupy"
for server, tribeIDs := range tribeIDsByServer {
list, err := s.cfg.API.Tribes.Browse(server, &shared_models.TribeFilter{
ID: tribeIDs,
})
if err != nil {
s.SendMessage(m.ChannelID, m.Author.Mention()+` Wystąpił błąd wewnętrzny, prosimy spróbować później.`)
return
}
for _, tribe := range list.Items {
observations[observationIndexByTribeID[tribe.ID]].Tribe = tribe
}
}
langVersionList, err := s.cfg.API.LangVersions.Browse(&shared_models.LangVersionFilter{
Tag: langTags,
})
msg := &EmbedMessage{}
if len(observations) <= 0 {
msg.Append("Brak")
}
for i, observation := range observations {
tag := "Unknown"
if observation.Tribe != nil {
tag = observation.Tribe.Tag
}
lv := utils.FindLangVersionByTag(langVersionList.Items, utils.LanguageTagFromWorldName(observation.Server))
tribeURL := ""
if lv != nil {
tribeURL = utils.FormatTribeURL(observation.Server, lv.Host, observation.TribeID)
}
msg.Append(fmt.Sprintf("**%d** | %d - %s - [``%s``](%s)\n", i+1, observation.ID,
observation.Server,
tag,
tribeURL))
}
s.SendEmbed(m.ChannelID, NewEmbed().
SetTitle("Lista obserwowanych plemion").
AddField("Indeks | ID - Serwer - ID plemienia", msg).
SetTitle("Lista obserwowanych plemion\nIndeks | ID - Serwer - Plemię").
SetFields(msg.ToMessageEmbedFields()).
SetFooter("Strona 1 z 1").
MessageEmbed)
}

View File

@ -258,6 +258,10 @@ type EmbedMessage struct {
mutex sync.Mutex
}
func (msg *EmbedMessage) IsEmpty() bool {
return len(msg.Chunks) == 0
}
func (msg *EmbedMessage) Append(m string) {
msg.mutex.Lock()
defer msg.mutex.Unlock()

4
go.mod
View File

@ -9,7 +9,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/robfig/cron/v3 v3.0.1
github.com/segmentio/encoding v0.1.14 // indirect
github.com/tribalwarshelp/golang-sdk v0.0.0-20200629130313-0880d8996ba6
github.com/tribalwarshelp/shared v0.0.0-20200629123803-0cd6cb6f1e87
github.com/tribalwarshelp/golang-sdk v0.0.0-20200709112050-ba3a7ba145b1
github.com/tribalwarshelp/shared v0.0.0-20200707075151-722e4a520a3c
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 // indirect
)

4
go.sum
View File

@ -107,6 +107,8 @@ github.com/tribalwarshelp/golang-sdk v0.0.0-20200625131004-06b44e214642 h1:PD5bO
github.com/tribalwarshelp/golang-sdk v0.0.0-20200625131004-06b44e214642/go.mod h1:dM2bGl7OxfsejbDu+TSFie8XS1XD1WBc1/dEqbIRLUk=
github.com/tribalwarshelp/golang-sdk v0.0.0-20200629130313-0880d8996ba6 h1:+C127PqJZY5xS1gyWQAaSblxnktBxnFISzHsnEjPj0s=
github.com/tribalwarshelp/golang-sdk v0.0.0-20200629130313-0880d8996ba6/go.mod h1:J1nwE1gYoP8LJkb1sbL3OGqTp7u8RJZGpsKHYjS3+0Y=
github.com/tribalwarshelp/golang-sdk v0.0.0-20200709112050-ba3a7ba145b1 h1:p+/OHcQQYXCmxjG+YTkXfeL4Oxku7t6sW0KK2Ne85V4=
github.com/tribalwarshelp/golang-sdk v0.0.0-20200709112050-ba3a7ba145b1/go.mod h1:jQWbuz96EMQTuxhanSY1imtK4zEjPrB1cM5wCKkk7l4=
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6 h1:WZ1oxHysFtiPjHa2ADUqiGrzwcN3j0YpiVg/V2e/74o=
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/tribalwarshelp/shared v0.0.0-20200625120510-6d18ee334662/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
@ -114,6 +116,8 @@ github.com/tribalwarshelp/shared v0.0.0-20200625131045-74c5a9b3b4f0 h1:k1j0Nh2OI
github.com/tribalwarshelp/shared v0.0.0-20200625131045-74c5a9b3b4f0/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/tribalwarshelp/shared v0.0.0-20200629123803-0cd6cb6f1e87 h1:TMuZUk0wW+8dXSGVJVLRFFhLONKKYJRnLBFvbb9XTrE=
github.com/tribalwarshelp/shared v0.0.0-20200629123803-0cd6cb6f1e87/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/tribalwarshelp/shared v0.0.0-20200707075151-722e4a520a3c h1:wenSReGHPux51q5s+9Ji0TOHCt8Zx6whxsjx8Iv7aZg=
github.com/tribalwarshelp/shared v0.0.0-20200707075151-722e4a520a3c/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
github.com/vmihailenco/bufpool v0.1.5/go.mod h1:fL9i/PRTuS7AELqAHwSU1Zf1c70xhkhGe/cD5ud9pJk=
github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94=
github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ=

View File

@ -1,16 +1,21 @@
package models
import "time"
import (
"time"
shared_models "github.com/tribalwarshelp/shared/models"
)
type Observation struct {
tableName struct{} `pg:",alias:observation"`
ID int `json:"id" gqlgen:"id"`
Server string `pg:"unique:group_1,use_zero" json:"server" gqlgen:"server"`
TribeID int `pg:"unique:group_1,use_zero" json:"tribeID" gqlgen:"tribeID"`
GroupID int `pg:"on_delete:CASCADE,unique:group_1,use_zero" json:"groupID" gqlgen:"groupID"`
Group *Group `json:"group,omitempty" gqlgen:"group"`
CreatedAt time.Time `pg:"default:now()" json:"createdAt" gqlgen:"createdAt" xml:"createdAt"`
ID int `json:"id" gqlgen:"id"`
Server string `pg:"unique:group_1,use_zero" json:"server" gqlgen:"server"`
TribeID int `pg:"unique:group_1,use_zero" json:"tribeID" gqlgen:"tribeID"`
Tribe *shared_models.Tribe `pg:"-"`
GroupID int `pg:"on_delete:CASCADE,unique:group_1,use_zero" json:"groupID" gqlgen:"groupID"`
Group *Group `json:"group,omitempty" gqlgen:"group"`
CreatedAt time.Time `pg:"default:now()" json:"createdAt" gqlgen:"createdAt" xml:"createdAt"`
}
type Observations []*Observation

View File

@ -0,0 +1,14 @@
package utils
import "github.com/tribalwarshelp/shared/models"
func FindLangVersionByTag(langVersions []*models.LangVersion, tag models.LanguageTag) *models.LangVersion {
lv := &models.LangVersion{}
for _, langVersion := range langVersions {
if langVersion.Tag == tag {
lv = langVersion
break
}
}
return lv
}