|
1 | 1 | import Discord from 'discord.js'; |
2 | 2 | import { polishPlurals } from 'polish-plurals'; |
3 | 3 |
|
4 | | -import { getEmojiForKarmaValue, getKarmaForMember } from '../data/karma'; |
| 4 | +import { |
| 5 | + getEmojiForKarmaValue, |
| 6 | + getKarmaForMember, |
| 7 | + getKarmaForMembers, |
| 8 | + KarmaAgg, |
| 9 | +} from '../data/karma'; |
5 | 10 | import { getKarmaCollection, initDb } from '../db'; |
6 | 11 | import type { Command } from '../types'; |
7 | | -import { InvalidUsageError } from '../types'; |
8 | 12 |
|
9 | 13 | export const KARMA_REGEX = new RegExp( |
10 | 14 | `^${Discord.MessageMentions.USERS_PATTERN.source}\\s*\\+\\+\\s*(?<description>.*)$`, |
@@ -52,22 +56,37 @@ const addKarma: Command = { |
52 | 56 | const karma: Command = { |
53 | 57 | name: 'karma', |
54 | 58 | description: 'Sprawdź ile kto ma pkt. karmy.', |
55 | | - args: true, |
| 59 | + args: false, |
56 | 60 | async execute(msg) { |
57 | 61 | const member = await msg.mentions.members?.first()?.fetch(); |
58 | | - if (!member) { |
59 | | - throw new InvalidUsageError(`Podaj nazwę użytkownika.`); |
60 | | - } |
61 | 62 |
|
62 | 63 | const db = await initDb(); |
63 | | - const agg = await getKarmaForMember(member.id, db); |
64 | | - const value = agg?.value ?? 0; |
65 | 64 |
|
66 | | - const pkt = polishPlurals('punkt', 'punkty', 'punktów', value); |
| 65 | + if (member) { |
| 66 | + const agg = await getKarmaForMember(member.id, db); |
| 67 | + const value = agg?.value ?? 0; |
67 | 68 |
|
68 | | - return msg.channel.send( |
69 | | - `${member.displayName} ma ${value.toFixed(2)} ${pkt} karmy ${getEmojiForKarmaValue(value)}`, |
70 | | - ); |
| 69 | + const pkt = polishPlurals('punkt', 'punkty', 'punktów', value); |
| 70 | + |
| 71 | + return msg.channel.send( |
| 72 | + `${member.displayName} ma ${value.toFixed(2)} ${pkt} karmy ${getEmojiForKarmaValue(value)}`, |
| 73 | + ); |
| 74 | + } else { |
| 75 | + const agg = await getKarmaForMembers(db); |
| 76 | + const data = agg.filter((el): el is KarmaAgg => !!el); |
| 77 | + await Promise.allSettled(data.map(({ _id: memberId }) => msg.guild?.members.fetch(memberId))); |
| 78 | + |
| 79 | + const messages = [ |
| 80 | + `**TOP 10 karma**`, |
| 81 | + ...data.map(({ _id: memberId, value }, index) => { |
| 82 | + return `\`${(index + 1).toString().padStart(2, ' ')}\`. ${ |
| 83 | + msg.guild?.members.cache.get(memberId)?.displayName ?? '' |
| 84 | + } – ${value.toFixed(2)} ${getEmojiForKarmaValue(value)}`; |
| 85 | + }), |
| 86 | + ]; |
| 87 | + |
| 88 | + return msg.channel.send(messages.join('\n')); |
| 89 | + } |
71 | 90 | }, |
72 | 91 | }; |
73 | 92 |
|
|
0 commit comments