guild enumeration improvements

This commit is contained in:
wish
2022-07-17 05:07:41 +10:00
parent 92687a9fd6
commit 052a69f77b
2 changed files with 8 additions and 42 deletions

View File

@@ -9,7 +9,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"sort" "sort"
"strconv"
"strings" "strings"
"time" "time"
@@ -1710,11 +1709,7 @@ func handleMsgMhfEnumerateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
} else { } else {
bf.WriteUint32(uint32(len(likedBySlice))) bf.WriteUint32(uint32(len(likedBySlice)))
} }
if stringsupport.CSVContains(postData.LikedBy, int(s.charID)) { bf.WriteBool(stringsupport.CSVContains(postData.LikedBy, int(s.charID)))
bf.WriteBool(true)
} else {
bf.WriteBool(false)
}
bf.WriteUint32(postData.StampID) bf.WriteUint32(postData.StampID)
ps.Uint32(bf, postData.Title, true) ps.Uint32(bf, postData.Title, true)
ps.Uint32(bf, postData.Body, true) ps.Uint32(bf, postData.Body, true)
@@ -1799,24 +1794,13 @@ func handleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
s.logger.Fatal("Failed to get guild message like data from db", zap.Error(err)) s.logger.Fatal("Failed to get guild message like data from db", zap.Error(err))
} else { } else {
if likeState { if likeState {
if len(likedBy) == 0 { likedBy = stringsupport.CSVAdd(likedBy, int(s.charID))
likedBy = strconv.Itoa(int(s.charID))
} else {
likedBy += "," + strconv.Itoa(int(s.charID))
}
_, err := s.server.db.Exec("UPDATE guild_posts SET liked_by = $1 WHERE post_type = $2 AND (EXTRACT(epoch FROM created_at)::int) = $3 AND guild_id = $4", likedBy, int(postType), int(timestamp), guild.ID) _, err := s.server.db.Exec("UPDATE guild_posts SET liked_by = $1 WHERE post_type = $2 AND (EXTRACT(epoch FROM created_at)::int) = $3 AND guild_id = $4", likedBy, int(postType), int(timestamp), guild.ID)
if err != nil { if err != nil {
s.logger.Fatal("Failed to like guild message in db", zap.Error(err)) s.logger.Fatal("Failed to like guild message in db", zap.Error(err))
} }
} else { } else {
likedBySlice := strings.Split(likedBy, ",") likedBy = stringsupport.CSVRemove(likedBy, int(s.charID))
for i, e := range likedBySlice {
if e == strconv.Itoa(int(s.charID)) {
likedBySlice[i] = likedBySlice[len(likedBySlice) - 1]
likedBySlice = likedBySlice[:len(likedBySlice) - 1]
}
}
likedBy = strings.Join(likedBySlice, ",")
_, err := s.server.db.Exec("UPDATE guild_posts SET liked_by = $1 WHERE post_type = $2 AND (EXTRACT(epoch FROM created_at)::int) = $3 AND guild_id = $4", likedBy, int(postType), int(timestamp), guild.ID) _, err := s.server.db.Exec("UPDATE guild_posts SET liked_by = $1 WHERE post_type = $2 AND (EXTRACT(epoch FROM created_at)::int) = $3 AND guild_id = $4", likedBy, int(postType), int(timestamp), guild.ID)
if err != nil { if err != nil {
s.logger.Fatal("Failed to unlike guild message in db", zap.Error(err)) s.logger.Fatal("Failed to unlike guild message in db", zap.Error(err))
@@ -1834,7 +1818,7 @@ func handleMsgMhfUpdateGuildMessageBoard(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.logger.Fatal("Failed to update guild post check timestamp in db", zap.Error(err)) s.logger.Fatal("Failed to update guild post check timestamp in db", zap.Error(err))
} else { } else {
err = s.server.db.QueryRow("SELECT COUNT(*) FROM guild_posts WHERE guild_id = $1 AND (EXTRACT(epoch FROM created_at)::int) > $2", guild.ID, timeChecked).Scan(&newPosts) err = s.server.db.QueryRow("SELECT COUNT(*) FROM guild_posts WHERE guild_id = $1 AND (EXTRACT(epoch FROM created_at)::int) > $2 AND author_id != $3", guild.ID, timeChecked, s.charID).Scan(&newPosts)
if err != nil { if err != nil {
s.logger.Fatal("Failed to check for new guild posts in db", zap.Error(err)) s.logger.Fatal("Failed to check for new guild posts in db", zap.Error(err))
} else { } else {

View File

@@ -1,10 +1,9 @@
package channelserver package channelserver
import ( import (
"strconv"
"strings"
"time" "time"
"erupe-ce/common/stringsupport"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"go.uber.org/zap" "go.uber.org/zap"
@@ -40,20 +39,7 @@ func handleMsgMhfLoadGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
temp.WriteUint32(adventureData.Charge) temp.WriteUint32(adventureData.Charge)
temp.WriteUint32(adventureData.Depart) temp.WriteUint32(adventureData.Depart)
temp.WriteUint32(adventureData.Return) temp.WriteUint32(adventureData.Return)
collected := false temp.WriteBool(stringsupport.CSVContains(adventureData.CollectedBy, int(s.charID)))
collectedBySlice := strings.Split(adventureData.CollectedBy, ",")
for i := 0; i < len(collectedBySlice); i++ {
j, _ := strconv.ParseInt(collectedBySlice[i], 10, 64)
if int(j) == int(s.charID) {
collected = true
break
}
}
if collected {
temp.WriteBool(true)
} else {
temp.WriteBool(false)
}
} }
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint8(uint8(count)) bf.WriteUint8(uint8(count))
@@ -78,11 +64,7 @@ func handleMsgMhfAcquireGuildAdventure(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.logger.Fatal("Error parsing adventure collected by", zap.Error(err)) s.logger.Fatal("Error parsing adventure collected by", zap.Error(err))
} else { } else {
if len(collectedBy) == 0 { collectedBy = stringsupport.CSVAdd(collectedBy, int(s.charID))
collectedBy = strconv.Itoa(int(s.charID))
} else {
collectedBy += "," + strconv.Itoa(int(s.charID))
}
_, err := s.server.db.Exec("UPDATE guild_adventures SET collected_by = $1 WHERE id = $2", collectedBy, pkt.ID) _, err := s.server.db.Exec("UPDATE guild_adventures SET collected_by = $1 WHERE id = $2", collectedBy, pkt.ID)
if err != nil { if err != nil {
s.logger.Fatal("Failed to collect adventure in db", zap.Error(err)) s.logger.Fatal("Failed to collect adventure in db", zap.Error(err))
@@ -109,4 +91,4 @@ func handleMsgSysReserve205(s *Session, p mhfpacket.MHFPacket) {
s.logger.Fatal("Failed to register guild adventure", zap.Error(err)) s.logger.Fatal("Failed to register guild adventure", zap.Error(err))
} }
doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4))
} }