33 Activity ,
44 Boss ,
55 formatNumber ,
6+ getLevel ,
67 isActivity ,
78 isBoss ,
89 isSkill ,
@@ -439,35 +440,44 @@ async function handleRollback(username: string) {
439440function getLargestSkillChanges ( previous : SnapshotResponse , rejected : SnapshotResponse ) {
440441 const lines : string [ ] = [ ] ;
441442
442- const map = new Map < Skill , number > ( ) ;
443+ const map = new Map < Skill , { start : number ; end : number ; delta : number } > ( ) ;
443444
444445 Object . keys ( previous . data . skills ) . map ( s => {
445446 if ( rejected . data . skills [ s ] . experience === - 1 ) return ;
446- map . set (
447- s as Skill ,
448- Math . max ( 0 , rejected . data . skills [ s ] . experience ) - Math . max ( 0 , previous . data . skills [ s ] . experience )
449- ) ;
447+ const start = Math . max ( 0 , previous . data . skills [ s ] . experience ) ;
448+ const end = Math . max ( 0 , rejected . data . skills [ s ] . experience ) ;
449+ map . set ( s as Skill , { start, end, delta : end - start } ) ;
450450 } ) ;
451451
452- const entries = Array . from ( map . entries ( ) ) . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) ;
452+ const entries = Array . from ( map . entries ( ) ) . sort ( ( a , b ) => b [ 1 ] . delta - a [ 1 ] . delta ) ;
453453
454- const biggestGains = entries . slice ( 0 , 3 ) . filter ( v => v [ 1 ] > 0 ) ;
454+ const biggestGains = entries . slice ( 0 , 3 ) . filter ( v => v [ 1 ] . delta > 0 ) ;
455455
456456 const biggestLosses = entries
457457 . slice ( entries . length - 3 , entries . length )
458458 . reverse ( )
459- . filter ( v => v [ 1 ] < 0 ) ;
459+ . filter ( v => v [ 1 ] . delta < 0 ) ;
460460
461461 if ( biggestGains . length > 0 ) {
462462 lines . push ( '\n' ) ;
463463 lines . push ( `**Top Skill gains**` ) ;
464- lines . push ( ...biggestGains . map ( g => `${ MetricProps [ g [ 0 ] ] . name } : \`+${ formatNumber ( g [ 1 ] , true ) } \`` ) ) ;
464+ lines . push (
465+ ...biggestGains . map (
466+ g =>
467+ `${ MetricProps [ g [ 0 ] ] . name } : \`+${ formatNumber ( g [ 1 ] . delta , true ) } \` (lvl: \`${ getLevel ( g [ 1 ] . start ) } \` -> \`${ getLevel ( g [ 1 ] . end ) } \`)`
468+ )
469+ ) ;
465470 }
466471
467472 if ( biggestLosses . length > 0 ) {
468473 lines . push ( '\n' ) ;
469474 lines . push ( `**🔻 Top Skill losses🔻**` ) ;
470- lines . push ( ...biggestLosses . map ( l => `${ MetricProps [ l [ 0 ] ] . name } : \`${ formatNumber ( l [ 1 ] , true ) } \`` ) ) ;
475+ lines . push (
476+ ...biggestLosses . map (
477+ l =>
478+ `${ MetricProps [ l [ 0 ] ] . name } : \`${ formatNumber ( l [ 1 ] . delta , true ) } \` (lvl: \`${ getLevel ( l [ 1 ] . end ) } \` -> \`${ getLevel ( l [ 1 ] . start ) } \`)`
479+ )
480+ ) ;
471481 }
472482
473483 return lines ;
@@ -476,34 +486,43 @@ function getLargestSkillChanges(previous: SnapshotResponse, rejected: SnapshotRe
476486function getLargestBossChanges ( previous : SnapshotResponse , rejected : SnapshotResponse ) {
477487 const lines : string [ ] = [ ] ;
478488
479- const map = new Map < Boss , number > ( ) ;
489+ const map = new Map < Boss , { start : number ; end : number ; delta : number } > ( ) ;
480490
481491 Object . keys ( previous . data . bosses ) . map ( b => {
482- map . set (
483- b as Boss ,
484- Math . max ( 0 , rejected . data . bosses [ b ] . kills ) - Math . max ( 0 , previous . data . bosses [ b ] . kills )
485- ) ;
492+ const start = Math . max ( 0 , previous . data . bosses [ b ] . kills ) ;
493+ const end = Math . max ( 0 , rejected . data . bosses [ b ] . kills ) ;
494+ map . set ( b as Boss , { start, end, delta : end - start } ) ;
486495 } ) ;
487496
488- const entries = Array . from ( map . entries ( ) ) . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) ;
497+ const entries = Array . from ( map . entries ( ) ) . sort ( ( a , b ) => b [ 1 ] . delta - a [ 1 ] . delta ) ;
489498
490- const biggestGains = entries . slice ( 0 , 3 ) . filter ( v => v [ 1 ] > 0 ) ;
499+ const biggestGains = entries . slice ( 0 , 3 ) . filter ( v => v [ 1 ] . delta > 0 ) ;
491500
492501 const biggestLosses = entries
493502 . slice ( entries . length - 3 , entries . length )
494503 . reverse ( )
495- . filter ( v => v [ 1 ] < 0 ) ;
504+ . filter ( v => v [ 1 ] . delta < 0 ) ;
496505
497506 if ( biggestGains . length > 0 ) {
498507 lines . push ( '\n' ) ;
499508 lines . push ( `**Top Boss gains**` ) ;
500- lines . push ( ...biggestGains . map ( g => `${ MetricProps [ g [ 0 ] ] . name } : \`+${ formatNumber ( g [ 1 ] , true ) } \`` ) ) ;
509+ lines . push (
510+ ...biggestGains . map (
511+ g =>
512+ `${ MetricProps [ g [ 0 ] ] . name } : \`+${ formatNumber ( g [ 1 ] . delta , true ) } \` (\`${ formatNumber ( g [ 1 ] . start , true ) } \` -> \`${ formatNumber ( g [ 1 ] . end , true ) } \`)`
513+ )
514+ ) ;
501515 }
502516
503517 if ( biggestLosses . length > 0 ) {
504518 lines . push ( '\n' ) ;
505519 lines . push ( `**🔻 Top Boss losses 🔻**` ) ;
506- lines . push ( ...biggestLosses . map ( l => `${ MetricProps [ l [ 0 ] ] . name } : \`${ formatNumber ( l [ 1 ] , true ) } \`` ) ) ;
520+ lines . push (
521+ ...biggestLosses . map (
522+ l =>
523+ `${ MetricProps [ l [ 0 ] ] . name } : \`${ formatNumber ( l [ 1 ] . delta , true ) } \` (\`${ formatNumber ( l [ 1 ] . start , true ) } \` -> \`${ formatNumber ( l [ 1 ] . end , true ) } \`)`
524+ )
525+ ) ;
507526 }
508527
509528 return lines ;
@@ -512,34 +531,43 @@ function getLargestBossChanges(previous: SnapshotResponse, rejected: SnapshotRes
512531function getLargestActivityChanges ( previous : SnapshotResponse , rejected : SnapshotResponse ) {
513532 const lines : string [ ] = [ ] ;
514533
515- const map = new Map < Activity , number > ( ) ;
534+ const map = new Map < Activity , { start : number ; end : number ; delta : number } > ( ) ;
516535
517536 Object . keys ( previous . data . activities ) . map ( a => {
518- map . set (
519- a as Activity ,
520- Math . max ( 0 , rejected . data . activities [ a ] . score ) - Math . max ( 0 , previous . data . activities [ a ] . score )
521- ) ;
537+ const start = Math . max ( 0 , previous . data . activities [ a ] . score ) ;
538+ const end = Math . max ( 0 , rejected . data . activities [ a ] . score ) ;
539+ map . set ( a as Activity , { start, end, delta : end - start } ) ;
522540 } ) ;
523541
524- const entries = Array . from ( map . entries ( ) ) . sort ( ( a , b ) => b [ 1 ] - a [ 1 ] ) ;
542+ const entries = Array . from ( map . entries ( ) ) . sort ( ( a , b ) => b [ 1 ] . delta - a [ 1 ] . delta ) ;
525543
526- const biggestGains = entries . slice ( 0 , 3 ) . filter ( v => v [ 1 ] > 0 ) ;
544+ const biggestGains = entries . slice ( 0 , 3 ) . filter ( v => v [ 1 ] . delta > 0 ) ;
527545
528546 const biggestLosses = entries
529547 . slice ( entries . length - 3 , entries . length )
530548 . reverse ( )
531- . filter ( v => v [ 1 ] < 0 ) ;
549+ . filter ( v => v [ 1 ] . delta < 0 ) ;
532550
533551 if ( biggestGains . length > 0 ) {
534552 lines . push ( '\n' ) ;
535553 lines . push ( `**Top Activity gains**` ) ;
536- lines . push ( ...biggestGains . map ( g => `${ MetricProps [ g [ 0 ] ] . name } : \`+${ formatNumber ( g [ 1 ] , true ) } \`` ) ) ;
554+ lines . push (
555+ ...biggestGains . map (
556+ g =>
557+ `${ MetricProps [ g [ 0 ] ] . name } : \`+${ formatNumber ( g [ 1 ] . delta , true ) } \` (\`${ formatNumber ( g [ 1 ] . start , true ) } \` -> \`${ formatNumber ( g [ 1 ] . end , true ) } \`)`
558+ )
559+ ) ;
537560 }
538561
539562 if ( biggestLosses . length > 0 ) {
540563 lines . push ( '\n' ) ;
541564 lines . push ( `**🔻 Top Activity losses 🔻**` ) ;
542- lines . push ( ...biggestLosses . map ( l => `${ MetricProps [ l [ 0 ] ] . name } : \`${ formatNumber ( l [ 1 ] , true ) } \`` ) ) ;
565+ lines . push (
566+ ...biggestLosses . map (
567+ l =>
568+ `${ MetricProps [ l [ 0 ] ] . name } : \`${ formatNumber ( l [ 1 ] . delta , true ) } \` (\`${ formatNumber ( l [ 1 ] . start , true ) } \` -> \`${ formatNumber ( l [ 1 ] . end , true ) } \`)`
569+ )
570+ ) ;
543571 }
544572
545573 return lines ;
0 commit comments