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:
parent
450f36a80f
commit
d4c518749e
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
4
go.mod
|
@ -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
4
go.sum
|
@ -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=
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
Reference in New Issue