From 3fb38974f0463f4c800ff00c0b85ed0251ccba9c Mon Sep 17 00:00:00 2001 From: niekcandaele <22315101+niekcandaele@users.noreply.github.com> Date: Sat, 11 Jul 2020 17:43:46 +0200 Subject: [PATCH 1/3] Add test & fix playerLeveled event --- api/hooks/sdtdLogs/handleLogLine.js | 31 ++++++++++--------- .../unit/hooks/sdtdlogs/handleLogLine.test.js | 19 ++++++++++++ 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/api/hooks/sdtdLogs/handleLogLine.js b/api/hooks/sdtdLogs/handleLogLine.js index 85fd3d04e..18beb570a 100644 --- a/api/hooks/sdtdLogs/handleLogLine.js +++ b/api/hooks/sdtdLogs/handleLogLine.js @@ -2,15 +2,22 @@ const geoip = require('geoip-country'); const _ = require('lodash'); const replaceQuotes = string => string.substring(1, string.length - 1); +const extractIntegers = string => string.match(/\d*/g).join(''); -module.exports = logLine => { - const deathRegex = /(PlayerSpawnedInWorld \(reason: Died, position:)/g; - const deathValuesRegex = /([A-Za-z_]*)=(?:'([^']*)'|(\d*))/gm; +const steamIdRegex = /\d{17}/g; +const deathRegex = /(PlayerSpawnedInWorld \(reason: Died, position:)/g; +const deathValuesRegex = /([A-Za-z_]*)=(?:'([^']*)'|(\d*))/gm; + +const connectedRegex = /(Player connected,)/g; + +const joinedRegex = /(PlayerSpawnedInWorld \(reason: EnterMultiplayer, position:)/g; +const joinedValuesRegex = /([A-Za-z_]*)=(?:'([^']*)'|(\d*))/gm; - const connectedRegex = /(Player connected,)/g; +const newLevelRegex = /(made level \d*)/g; +const oldLevelRegex = /(was )\d*/g; + +module.exports = logLine => { - const joinedRegex = /(PlayerSpawnedInWorld \(reason: EnterMultiplayer, position:)/g; - const joinedValuesRegex = /([A-Za-z_]*)=(?:'([^']*)'|(\d*))/gm; let returnValue = { type: 'logLine', @@ -296,17 +303,11 @@ module.exports = logLine => { "type": "Log" } */ - let lvlMessage = logLine.msg.split('('); - let steamId = lvlMessage[1].split(')')[0].trim(); - let newLvl = lvlMessage[1].split('level')[1].trim(); - let oldLvl = lvlMessage[2] - .replace('was ', '') - .replace(')', '') - .trim(); + const steamId = logLine.msg.match(steamIdRegex)[0]; + const newLvl = extractIntegers(logLine.msg.match(newLevelRegex)[0]); + const oldLvl = extractIntegers(logLine.msg.match(oldLevelRegex)[0]); - newLvl = parseInt(newLvl); - oldLvl = parseInt(oldLvl); lvlMessage = { date: logLine.date, diff --git a/test/unit/hooks/sdtdlogs/handleLogLine.test.js b/test/unit/hooks/sdtdlogs/handleLogLine.test.js index 1b140a68c..4a7325777 100644 --- a/test/unit/hooks/sdtdlogs/handleLogLine.test.js +++ b/test/unit/hooks/sdtdlogs/handleLogLine.test.js @@ -60,4 +60,23 @@ describe('sdtdLogs#handleLogLine', () => { expect(result.data.steamId).to.eq('76561198028175941'); expect(result.data.entityId).to.eq('531'); }); + + it('correctly detects a playerLevel event', () => { + const logLine = { + 'date': '2020-07-11', + 'time': '08:11:40', + 'uptime': '1673.118', + 'msg': '[CSMM_Patrons]playerLeveled: (VE) Kiota (76561198108856299) made level 4 (was 3)', + 'trace': '', + 'type': 'Log' + }; + + const result = handleLogLine(logLine); + + expect(result.type).to.eq('playerLevel'); + expect(result.data.steamId).to.eq('76561198108856299'); + expect(result.data.newLvl).to.eq('4'); + expect(result.data.oldLvl).to.eq('3'); + + }); }); From cee198e691b75b8815fb14c8372c13a2a2ae4d60 Mon Sep 17 00:00:00 2001 From: niekcandaele <22315101+niekcandaele@users.noreply.github.com> Date: Sat, 11 Jul 2020 17:52:39 +0200 Subject: [PATCH 2/3] Add test & fix entityKilled detection --- api/hooks/sdtdLogs/handleLogLine.js | 18 ++++++++---------- .../unit/hooks/sdtdlogs/handleLogLine.test.js | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/api/hooks/sdtdLogs/handleLogLine.js b/api/hooks/sdtdLogs/handleLogLine.js index 18beb570a..1eb0ecf09 100644 --- a/api/hooks/sdtdLogs/handleLogLine.js +++ b/api/hooks/sdtdLogs/handleLogLine.js @@ -16,6 +16,8 @@ const joinedValuesRegex = /([A-Za-z_]*)=(?:'([^']*)'|(\d*))/gm; const newLevelRegex = /(made level \d*)/g; const oldLevelRegex = /(was )\d*/g; +const entityKilledRegex = /(killed .*)/g; + module.exports = logLine => { @@ -334,28 +336,24 @@ module.exports = logLine => { "type": "Log" } */ - let killMessage = logLine.msg.split('('); - let steamId = killMessage[1].split(')')[0].trim(); - let victimInfo = killMessage[1].split('killed ')[1].split(' '); - let entityClass = victimInfo[0]; - let entityName = victimInfo[1]; + const entityInfo = logLine.msg.match(entityKilledRegex)[0].split(' '); killMessage = { date: logLine.date, time: logLine.time, uptime: logLine.uptime, msg: logLine.msg, - steamId: steamId, - entityClass: entityClass, - entityName: entityName + steamId: logLine.msg.match(steamIdRegex)[0], + entityClass: entityInfo[1], + entityName: entityInfo[2] }; - if (entityClass === 'zombie') { + if (killMessage.entityClass === 'zombie') { returnValue.type = 'zombieKilled'; } - if (entityClass === 'animal') { + if (killMessage.entityClass === 'animal') { returnValue.type = 'animalKilled'; } diff --git a/test/unit/hooks/sdtdlogs/handleLogLine.test.js b/test/unit/hooks/sdtdlogs/handleLogLine.test.js index 4a7325777..85c46e23d 100644 --- a/test/unit/hooks/sdtdlogs/handleLogLine.test.js +++ b/test/unit/hooks/sdtdlogs/handleLogLine.test.js @@ -79,4 +79,23 @@ describe('sdtdLogs#handleLogLine', () => { expect(result.data.oldLvl).to.eq('3'); }); + + + it('correctly detects a zombieKilled event', () => { + const logLine = { + 'date': '2017-11-14', + 'time': '14:50:49', + 'uptime': '133.559', + 'msg': '[CSMM_Patrons]entityKilled: (VE) Kiota (76561198028175941) killed zombie zombieBoe', + 'trace': '', + 'type': 'Log' + }; + const result = handleLogLine(logLine); + + expect(result.type).to.eq('zombieKilled'); + expect(result.data.steamId).to.eq('76561198028175941'); + expect(result.data.entityClass).to.eq('zombie'); + expect(result.data.entityName).to.eq('zombieBoe'); + + }); }); From 2c74bb064be4086ef50326c314435cda1762db7c Mon Sep 17 00:00:00 2001 From: niekcandaele <22315101+niekcandaele@users.noreply.github.com> Date: Sat, 11 Jul 2020 17:54:50 +0200 Subject: [PATCH 3/3] Add test for animalKilled --- test/unit/hooks/sdtdlogs/handleLogLine.test.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/unit/hooks/sdtdlogs/handleLogLine.test.js b/test/unit/hooks/sdtdlogs/handleLogLine.test.js index 85c46e23d..b7f579ddf 100644 --- a/test/unit/hooks/sdtdlogs/handleLogLine.test.js +++ b/test/unit/hooks/sdtdlogs/handleLogLine.test.js @@ -98,4 +98,22 @@ describe('sdtdLogs#handleLogLine', () => { expect(result.data.entityName).to.eq('zombieBoe'); }); + + it('correctly detects a animalKilled event', () => { + const logLine = { + 'date': '2017-11-14', + 'time': '14:50:49', + 'uptime': '133.559', + 'msg': '[CSMM_Patrons]entityKilled: (VE) Kiota (76561198028175941) killed animal cuteBambi', + 'trace': '', + 'type': 'Log' + }; + const result = handleLogLine(logLine); + + expect(result.type).to.eq('animalKilled'); + expect(result.data.steamId).to.eq('76561198028175941'); + expect(result.data.entityClass).to.eq('animal'); + expect(result.data.entityName).to.eq('cuteBambi'); + + }); });