-
Notifications
You must be signed in to change notification settings - Fork 4
/
leaderboard.ts
64 lines (55 loc) · 1.88 KB
/
leaderboard.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { Message, TextChannel } from 'discord.js';
import Command from '../../struct/command';
import { Level } from '../../struct/models/Level';
export default class extends Command {
constructor () {
super('level-leaderboard', {
description: {
content: 'Displays a leaderboard of member levels from the current server.',
usage: '[page number]'
},
noTrash: true,
args: [
{
id: 'page',
type: 'integer',
default: 1
},
]
});
}
public async exec (message: Message, { page }: { page: number }) {
const factory = this.client.db.Level;
const levels = await factory.findAll({
where: { guild: message.guild.id },
order: [ [ 'exp', 'DESC' ] ],
attributes: [ 'user', 'exp' ]
});
if (!levels.length) return message.util.send('Looks like this is a ghost guild...');
const Pagination = this.client.fields<Level>(message)
.setAuthorizedUsers(message.author.id)
.setChannel(message.channel as TextChannel)
.setClientAssets({ message: message.util.lastResponse })
.setArray(levels)
.setPage(page);
Pagination.embed
.setTitle('Highest Level Members')
.setAuthor(`${message.guild.name} (${message.guild.id})`)
.setThumbnail(message.guild.iconURL({ format: 'webp' }))
.addField('Help', [
'React with the emoji below to navigate. ↗ to skip a page.',
`See a members's information with \`${await this.handler.prefix(message)}level info <member>\``,
]);
Pagination
.formatField(
'#) Name',
el => {
const user = this.client.users.cache.get(el.user);
const tag = user ? user.tag : 'UNKNOWN_USER';
return `${levels.findIndex(l => l.user === el.user) + 1}) ${tag}`;
}
)
.formatField('EXP', el => el.exp);
return Pagination.build();
}
}