Skip to content

Commit da3688d

Browse files
committed
Fix stats
1 parent d33e09a commit da3688d

File tree

2 files changed

+31
-8
lines changed

2 files changed

+31
-8
lines changed

src/commands/stats.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@ import type { Db } from 'mongodb';
33
import type { StatsCollection } from '../db';
44
import { getStatsCollection, initDb } from '../db';
55
import type { Command } from '../types';
6-
import { getWeekNumber } from '../utils';
6+
import { getDateForWeekNumber, getWeekNumber } from '../utils';
7+
8+
const formatDate = (d: Date) =>
9+
String(d.getUTCFullYear()) +
10+
'-' +
11+
String(d.getUTCMonth() + 1).padStart(2, '0') +
12+
'-' +
13+
String(d.getUTCDate()).padStart(2, '0');
714

815
const stats: Command = {
916
name: 'stats',
@@ -13,11 +20,15 @@ const stats: Command = {
1320
async execute(msg) {
1421
const db = await initDb();
1522

16-
const { totalStats, statsChangeThisWeek } = await getStatsChangeThisWeek(db);
23+
const { totalStats, statsChangeThisWeek, year1, year2, week1, week2 } =
24+
await getStatsChangeThisWeek(db);
25+
26+
const d1 = formatDate(getDateForWeekNumber(year2, week2 + 1));
27+
const d2 = formatDate(getDateForWeekNumber(year1, week1 + 1));
1728

1829
return msg.channel.send(
1930
[
20-
format('Najbardziej aktywne w tym tygodniu:', statsChangeThisWeek),
31+
format(`Najbardziej aktywne w tym tygodniu (${d1}${d2}):`, statsChangeThisWeek),
2132
'\n',
2233
format('Najbardziej aktywne osoby od początku istnienia serwera:', totalStats),
2334
].join('\n'),
@@ -50,7 +61,7 @@ async function getStatsChangeThisWeek(db: Db) {
5061

5162
const now = new Date();
5263
const [year1, week1] = getWeekNumber(now);
53-
const thisweek = `${year1}-${week1}`;
64+
const thisWeek = `${year1}-${week1}`;
5465

5566
now.setDate(now.getDate() - 7);
5667
const [year2, week2] = getWeekNumber(now);
@@ -66,7 +77,7 @@ async function getStatsChangeThisWeek(db: Db) {
6677
)
6778
.toArray(),
6879

69-
statsCollection.find({ yearWeek: thisweek }).toArray(),
80+
statsCollection.find({ yearWeek: thisWeek }).toArray(),
7081

7182
statsCollection.find({ yearWeek: previousWeek }).toArray(),
7283
]);
@@ -88,7 +99,14 @@ async function getStatsChangeThisWeek(db: Db) {
8899
.filter((obj): obj is Stats => !!obj)
89100
.sort((a, b) => b.messagesCount - a.messagesCount);
90101

91-
return { statsChangeThisWeek, totalStats: totalStats as readonly Stats[] };
102+
return {
103+
statsChangeThisWeek,
104+
totalStats: totalStats as readonly Stats[],
105+
year1,
106+
year2,
107+
week1,
108+
week2,
109+
};
92110
}
93111

94112
function resultToMessagesByMemberId(stats: readonly StatsCollection[]) {

src/utils.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ export function getWeekNumber(d: Date): readonly [year: number, week: number] {
1515
// Get first day of year
1616
const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));
1717
// Calculate full weeks to nearest Thursday
18-
const weekNo = Math.ceil(((Number(d) - Number(yearStart)) / 86400000 + 1) / 7);
18+
const weekNo = Math.ceil(((Number(date) - Number(yearStart)) / 86400000 + 1) / 7);
1919

20-
return [d.getUTCFullYear(), weekNo];
20+
return [date.getUTCFullYear(), weekNo];
21+
}
22+
23+
export function getDateForWeekNumber(year: number, weekNo: number): Date {
24+
const yearStart = new Date(year, 0, 1);
25+
return new Date((weekNo * 7 - 1) * 86400000 + Number(yearStart));
2126
}

0 commit comments

Comments
 (0)