1 |
rakin |
74 |
import { CommandInteraction, InteractionCollector, Message, MessageActionRow, MessageButton, Role } from 'discord.js'; |
2 |
rakin |
60 |
import BaseCommand from '../../utils/structures/BaseCommand'; |
3 |
|
|
import DiscordClient from '../../client/Client'; |
4 |
|
|
import CommandOptions from '../../types/CommandOptions'; |
5 |
|
|
import InteractionOptions from '../../types/InteractionOptions'; |
6 |
|
|
import MessageEmbed from '../../client/MessageEmbed'; |
7 |
|
|
import getRole from '../../utils/getRole'; |
8 |
|
|
|
9 |
|
|
export default class RoleListCommand extends BaseCommand { |
10 |
|
|
supportsInteractions: boolean = true; |
11 |
rakin |
74 |
supportsLegacy = false; |
12 |
rakin |
60 |
|
13 |
|
|
constructor() { |
14 |
|
|
super('rolelist', 'information', []); |
15 |
|
|
} |
16 |
|
|
|
17 |
rakin |
74 |
async run(client: DiscordClient, msg: CommandInteraction, options: InteractionOptions) { |
18 |
|
|
let role: Role | null = null, page = 1; |
19 |
rakin |
60 |
|
20 |
rakin |
74 |
if (options.options.getRole('role')) |
21 |
|
|
role = <Role> options.options.getRole('role'); |
22 |
rakin |
60 |
|
23 |
rakin |
74 |
if (options.options.getInteger('page')) |
24 |
|
|
page = <number> options.options.getInteger('page'); |
25 |
|
|
|
26 |
rakin |
60 |
if (!role) { |
27 |
|
|
const roles = await msg.guild!.roles.cache.toJSON(); |
28 |
rakin |
74 |
|
29 |
rakin |
60 |
let str = ``; |
30 |
rakin |
74 |
let limit = 15, i = 1, offset = (page - 1) * limit; |
31 |
rakin |
60 |
|
32 |
rakin |
74 |
if (offset >= roles.length) { |
33 |
|
|
await msg.reply({ |
34 |
|
|
content: "Invalid page number.", |
35 |
|
|
ephemeral: true |
36 |
|
|
}); |
37 |
|
|
|
38 |
|
|
return; |
39 |
|
|
} |
40 |
|
|
|
41 |
rakin |
60 |
for await (const role of roles) { |
42 |
|
|
if (role.id === msg.guild!.id) |
43 |
|
|
continue; |
44 |
|
|
|
45 |
rakin |
74 |
i++; |
46 |
|
|
|
47 |
|
|
if (offset >= (i - 1)) |
48 |
|
|
continue; |
49 |
|
|
|
50 |
|
|
if ((limit + offset) < (i - 1)) |
51 |
|
|
break; |
52 |
|
|
|
53 |
rakin |
72 |
str += `${role.name} - ${role.id} - ${role.members.size} Members - ${role.hexColor}\n`; |
54 |
rakin |
60 |
} |
55 |
|
|
|
56 |
|
|
await msg.reply({ |
57 |
rakin |
74 |
content: "**Role List (" + page + ")**:\n\n```" + str + '```', |
58 |
rakin |
60 |
}); |
59 |
|
|
} |
60 |
|
|
else { |
61 |
|
|
await msg.reply({ |
62 |
|
|
embeds: [ |
63 |
|
|
new MessageEmbed() |
64 |
|
|
.setAuthor({ |
65 |
|
|
name: `Role Information` |
66 |
|
|
}) |
67 |
|
|
.setColor(role.hexColor) |
68 |
|
|
.addFields([ |
69 |
|
|
{ |
70 |
|
|
name: 'Name', |
71 |
|
|
value: role.name |
72 |
|
|
}, |
73 |
|
|
{ |
74 |
|
|
name: 'Color', |
75 |
|
|
value: role.hexColor |
76 |
|
|
}, |
77 |
|
|
{ |
78 |
|
|
name: 'Members', |
79 |
|
|
value: role.members.size + '' |
80 |
|
|
}, |
81 |
|
|
{ |
82 |
|
|
name: 'Bot Role', |
83 |
|
|
value: role.members.size === 1 && role.members.first()?.user.bot ? 'Yes' : 'No' |
84 |
|
|
} |
85 |
|
|
]) |
86 |
|
|
] |
87 |
|
|
}); |
88 |
|
|
} |
89 |
|
|
} |
90 |
|
|
} |