Skip to content

Commit e63652c

Browse files
committed
karma: XP
1 parent 2a1fa4d commit e63652c

File tree

3 files changed

+29
-29
lines changed

3 files changed

+29
-29
lines changed

src/commands/karma.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import Discord from 'discord.js';
2-
import { polishPlurals } from 'polish-plurals';
32
import Bluebird from 'bluebird';
43

54
import {
6-
getEmojiForKarmaValue,
75
getKarmaForMember,
86
getKarmaForAllMembers,
97
KarmaAgg,
108
getKarmaForMembers,
9+
getKarmaDescription,
1110
} from '../data/karma';
1211
import { getKarmaCollection, initDb } from '../db';
1312
import type { Command } from '../types';
@@ -57,9 +56,9 @@ const addKarma: Command = {
5756

5857
const messages = membersKarma.map(({ value, _id }) => {
5958
const member = membersToReward.find((m) => m.id === _id);
60-
return `${msg.author.toString()} podziękował(a) ${member?.toString()}! Karma ${member?.toString()} wynosi ${value.toFixed(
61-
2,
62-
)} ${getEmojiForKarmaValue(value)}`;
59+
return `${msg.author.toString()} podziękował(a) ${member?.toString()}! ${member?.toString()} ma ${getKarmaDescription(
60+
value,
61+
)}`;
6362
});
6463

6564
return msg.channel.send(messages.join('\n'));
@@ -79,11 +78,7 @@ const karma: Command = {
7978
const agg = await getKarmaForMember(member.id, db);
8079
const value = agg?.value ?? 0;
8180

82-
const pkt = polishPlurals('punkt', 'punkty', 'punktów', value);
83-
84-
return msg.channel.send(
85-
`${member.displayName} ma ${value.toFixed(2)} ${pkt} karmy ${getEmojiForKarmaValue(value)}`,
86-
);
81+
return msg.channel.send(`${member.displayName} ma ${getKarmaDescription(value)}`);
8782
} else {
8883
const agg = await getKarmaForAllMembers(db);
8984
const data = agg.filter((el): el is KarmaAgg => !!el);
@@ -92,9 +87,9 @@ const karma: Command = {
9287
const messages = [
9388
`**TOP 10 karma**`,
9489
...data.map(({ _id: memberId, value }, index) => {
95-
return `\`${(index + 1).toString().padStart(2, ' ')}\`. ${
96-
msg.guild?.members.cache.get(memberId)?.displayName ?? ''
97-
} ${value.toFixed(2)} ${getEmojiForKarmaValue(value)}`;
90+
const name = msg.guild?.members.cache.get(memberId)?.displayName ?? '';
91+
return `\`${(index + 1).toString().padStart(2, ' ')}\`. ${name}\
92+
${getKarmaDescription(value)}`;
9893
}),
9994
];
10095

src/cron/roles/stats.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { fetchOrCreateRole, updateRoles } from '.';
33
import { initDb, getStatsCollection } from '../../db';
44
import { offsetDateByWeeks } from '../../utils';
55

6-
const TOP_STATS_ROLE_NAME = '🏎 AKTYWNI';
6+
const TOP_STATS_ROLE_NAME = `🏎 AKTYWNI`;
77

88
const createStatsRole = (guild: Discord.Guild) => {
99
return guild.roles.create({

src/data/karma.ts

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@ export type KarmaAgg = {
88
readonly value: number;
99
};
1010

11-
const RATE_OF_DECAY = 1000 * 60 * 60 * 24 * (365 / 6); // half every two months
11+
// const RATE_OF_DECAY = 1000 * 60 * 60 * 24 * (365 / 6); // half every two months
1212

1313
const karmaAggregateGroup = [
14-
{
15-
$project: {
16-
to: '$to',
17-
from: '$from',
18-
value: {
19-
$multiply: [
20-
'$value',
21-
{ $exp: { $divide: [{ $subtract: ['$createdAt', new Date()] }, RATE_OF_DECAY] } },
22-
],
23-
},
24-
},
25-
},
14+
// {
15+
// $project: {
16+
// to: '$to',
17+
// from: '$from',
18+
// value: {
19+
// $multiply: [
20+
// '$value',
21+
// { $exp: { $divide: [{ $subtract: ['$createdAt', new Date()] }, RATE_OF_DECAY] } },
22+
// ],
23+
// },
24+
// },
25+
// },
2626
{ $group: { _id: '$to', from: { $push: '$from' }, value: { $sum: '$value' } } },
2727
] as const;
2828

@@ -57,12 +57,17 @@ export const getKarmaForAllMembers = async (db: Db) => {
5757
return agg;
5858
};
5959

60+
export const getKarmaLevel = (value: number) => Math.floor(Math.log(value + 1));
61+
6062
export const getEmojiForKarmaValue = (value: number) => {
61-
const adjustedValue = Math.floor(Math.log(value + 1));
62-
const idx = Math.min(karmaEmojis.length - 1, adjustedValue);
63+
const level = getKarmaLevel(value);
64+
const idx = Math.min(karmaEmojis.length - 1, level);
6365
return karmaEmojis[idx];
6466
};
6567

68+
export const getKarmaDescription = (value: number) =>
69+
`${Math.floor(value)} XP (lvl ${getKarmaLevel(value)}) ${getEmojiForKarmaValue(value)}`;
70+
6671
const karmaEmojis = [
6772
'👋',
6873
'👍',

0 commit comments

Comments
 (0)