added chat messages

This commit is contained in:
2022-01-29 19:32:13 +01:00
parent 2e6c94de81
commit b036275665
48 changed files with 4167 additions and 353 deletions

View File

@@ -16,6 +16,8 @@ import (
"google.golang.org/protobuf/proto"
"io/ioutil"
"os"
"strconv"
"strings"
"sync"
"time"
)
@@ -350,6 +352,7 @@ func (d *DemoMatchLoader) gcWorker(apiKey string, rl ratelimit.Limiter) {
log.Infof("[DL] Match %d is loaded, but not parsed. Try parsing.", iMatch.ID)
demo.MatchId = matchId
demo.Url = iMatch.ReplayURL
demo.DecryptionKey = iMatch.DecryptionKey
err := d.dp.ParseDemo(demo)
if err != nil {
log.Warningf("[DL] Parsing demo from match %d failed: %v", demo.MatchId, err)
@@ -396,6 +399,7 @@ func (d *DemoMatchLoader) gcWorker(apiKey string, rl ratelimit.Limiter) {
demo.Url = lastRound.GetMap()
demo.MatchId = matchZero.GetMatchid()
demo.DecryptionKey = []byte(strings.ToUpper(strconv.FormatUint(matchZero.GetWatchablematchinfo().GetClDecryptdataKeyPub(), 16)))
tMatch, err := d.db.Match.Create().
SetID(matchZero.GetMatchid()).
@@ -408,6 +412,7 @@ func (d *DemoMatchLoader) gcWorker(apiKey string, rl ratelimit.Limiter) {
SetScoreTeamA(int(lastRound.GetTeamScores()[0])).
SetScoreTeamB(int(lastRound.GetTeamScores()[1])).
SetMatchResult(int(lastRound.GetMatchResult())).
SetDecryptionKey(demo.DecryptionKey).
Save(context.Background())
if err != nil {
log.Warningf("[DL] Unable to create match %d: %v", matchZero.GetMatchid(), err)

View File

@@ -21,9 +21,10 @@ import (
)
type Demo struct {
ShareCode string
MatchId uint64
Url string
ShareCode string
MatchId uint64
Url string
DecryptionKey []byte
}
type DemoParser struct {
@@ -244,8 +245,25 @@ func (p *DemoParser) parseWorker() {
}, 0)
encounters := make([]*Encounter, 0)
spays := make([]*Sprays, 0)
cfg := demoinfocs.DefaultParserConfig
cfg.NetMessageDecryptionKey = demo.DecryptionKey
demoParser := demoinfocs.NewParser(fDemo)
// onChatMessage
demoParser.RegisterEventHandler(func(e events.ChatMessage) {
tAttacker, err := p.MatchPlayerBySteamID(tStats, e.Sender.SteamID64)
if err != nil {
log.Warningf("[DP] Unable to get player for id %d: %v", e.Sender.SteamID64, err)
return
}
tAttacker.Edges.Messages = append(tAttacker.Edges.Messages, &ent.Messages{
Message: e.Text,
AllChat: e.IsChatAll,
})
})
// onPlayerSpotted
demoParser.RegisterEventHandler(func(e events.PlayerSpottersChanged) {
gs := demoParser.GameState()
@@ -492,6 +510,15 @@ func (p *DemoParser) parseWorker() {
}
}
}
bulk := make([]*ent.MessagesCreate, len(tMatchPlayer.Edges.Messages))
for _, msg := range tMatchPlayer.Edges.Messages {
bulk = append(bulk, p.db.Messages.Create().SetMessage(msg.Message).SetAllChat(msg.AllChat).SetMatchPlayer(tMatchPlayer))
}
err = p.db.Messages.CreateBulk(bulk...).Exec(context.Background())
if err != nil {
log.Warningf("[DP] Failure adding messages to database: %v", err)
}
}
log.Infof("[DP] parsed match %d (took %s/%s)", demo.MatchId, downloadTime, time.Since(startTime))