added chat messages
This commit is contained in:
@@ -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)
|
||||
|
@@ -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))
|
||||
|
Reference in New Issue
Block a user