@jubbio/core 1.3.1 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Client.d.ts +157 -0
- package/dist/cjs/Client.js +640 -0
- package/dist/cjs/builders/ActionRowBuilder.d.ts +53 -0
- package/dist/cjs/builders/ActionRowBuilder.js +68 -0
- package/dist/cjs/builders/ButtonBuilder.d.ts +77 -0
- package/dist/cjs/builders/ButtonBuilder.js +96 -0
- package/dist/cjs/builders/EmbedBuilder.d.ts +157 -0
- package/dist/cjs/builders/EmbedBuilder.js +208 -0
- package/dist/cjs/builders/ModalBuilder.d.ts +122 -0
- package/dist/cjs/builders/ModalBuilder.js +162 -0
- package/dist/cjs/builders/SelectMenuBuilder.d.ts +123 -0
- package/dist/cjs/builders/SelectMenuBuilder.js +165 -0
- package/dist/cjs/builders/SlashCommandBuilder.d.ts +197 -0
- package/dist/cjs/builders/SlashCommandBuilder.js +324 -0
- package/dist/cjs/builders/index.d.ts +9 -0
- package/dist/cjs/builders/index.js +26 -0
- package/dist/cjs/enums.d.ts +191 -0
- package/dist/cjs/enums.js +211 -0
- package/dist/cjs/index.d.ts +25 -0
- package/dist/cjs/index.js +130 -0
- package/dist/cjs/managers/BaseManager.d.ts +69 -0
- package/dist/cjs/managers/BaseManager.js +106 -0
- package/dist/cjs/managers/ChannelManager.d.ts +95 -0
- package/dist/cjs/managers/ChannelManager.js +205 -0
- package/dist/cjs/managers/GuildMemberManager.d.ts +74 -0
- package/dist/cjs/managers/GuildMemberManager.js +157 -0
- package/dist/cjs/managers/RoleManager.d.ts +84 -0
- package/dist/cjs/managers/RoleManager.js +207 -0
- package/dist/cjs/managers/index.d.ts +7 -0
- package/dist/cjs/managers/index.js +24 -0
- package/dist/cjs/rest/REST.d.ts +527 -0
- package/dist/cjs/rest/REST.js +904 -0
- package/dist/cjs/rest/index.d.ts +1 -0
- package/dist/cjs/rest/index.js +18 -0
- package/dist/cjs/sharding/ShardingManager.d.ts +179 -0
- package/dist/cjs/sharding/ShardingManager.js +375 -0
- package/dist/cjs/sharding/index.d.ts +4 -0
- package/dist/cjs/sharding/index.js +21 -0
- package/dist/cjs/structures/Channel.d.ts +122 -0
- package/dist/cjs/structures/Channel.js +240 -0
- package/dist/cjs/structures/Collection.d.ts +53 -0
- package/dist/cjs/structures/Collection.js +115 -0
- package/dist/cjs/structures/Guild.d.ts +59 -0
- package/dist/cjs/structures/Guild.js +94 -0
- package/dist/cjs/structures/GuildMember.d.ts +174 -0
- package/dist/cjs/structures/GuildMember.js +311 -0
- package/dist/cjs/structures/Interaction.d.ts +245 -0
- package/dist/cjs/structures/Interaction.js +450 -0
- package/dist/cjs/structures/Message.d.ts +98 -0
- package/dist/cjs/structures/Message.js +195 -0
- package/dist/cjs/structures/User.d.ts +37 -0
- package/dist/cjs/structures/User.js +65 -0
- package/dist/cjs/structures/index.d.ts +7 -0
- package/dist/cjs/structures/index.js +25 -0
- package/dist/cjs/structures.d.ts +1 -0
- package/dist/cjs/structures.js +19 -0
- package/dist/cjs/types.d.ts +255 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/utils/BitField.d.ts +66 -0
- package/dist/cjs/utils/BitField.js +138 -0
- package/dist/cjs/utils/Collection.d.ts +116 -0
- package/dist/cjs/utils/Collection.js +265 -0
- package/dist/cjs/utils/Collector.d.ts +152 -0
- package/dist/cjs/utils/Collector.js +314 -0
- package/dist/cjs/utils/DataResolver.d.ts +61 -0
- package/dist/cjs/utils/DataResolver.js +146 -0
- package/dist/cjs/utils/Formatters.d.ts +145 -0
- package/dist/cjs/utils/Formatters.js +213 -0
- package/dist/cjs/utils/IntentsBitField.d.ts +85 -0
- package/dist/cjs/utils/IntentsBitField.js +99 -0
- package/dist/cjs/utils/Partials.d.ts +104 -0
- package/dist/cjs/utils/Partials.js +148 -0
- package/dist/cjs/utils/PermissionsBitField.d.ts +118 -0
- package/dist/cjs/utils/PermissionsBitField.js +145 -0
- package/dist/cjs/utils/SnowflakeUtil.d.ts +63 -0
- package/dist/cjs/utils/SnowflakeUtil.js +93 -0
- package/dist/cjs/utils/Sweepers.d.ts +119 -0
- package/dist/cjs/utils/Sweepers.js +249 -0
- package/dist/cjs/utils/index.d.ts +13 -0
- package/dist/cjs/utils/index.js +30 -0
- package/dist/esm/Client.js +634 -0
- package/dist/esm/builders/ActionRowBuilder.js +64 -0
- package/dist/esm/builders/ButtonBuilder.js +92 -0
- package/dist/esm/builders/EmbedBuilder.js +204 -0
- package/dist/esm/builders/ModalBuilder.js +157 -0
- package/dist/esm/builders/SelectMenuBuilder.js +161 -0
- package/dist/esm/builders/SlashCommandBuilder.js +311 -0
- package/dist/esm/builders/index.js +10 -0
- package/dist/esm/enums.js +208 -0
- package/dist/esm/index.js +34 -0
- package/dist/esm/managers/BaseManager.js +100 -0
- package/dist/esm/managers/ChannelManager.js +200 -0
- package/dist/esm/managers/GuildMemberManager.js +153 -0
- package/dist/esm/managers/RoleManager.js +203 -0
- package/dist/esm/managers/index.js +8 -0
- package/dist/esm/rest/REST.js +900 -0
- package/dist/esm/rest/index.js +2 -0
- package/dist/esm/sharding/ShardingManager.js +366 -0
- package/dist/esm/sharding/index.js +5 -0
- package/dist/esm/structures/Channel.js +232 -0
- package/dist/esm/structures/Collection.js +111 -0
- package/dist/esm/structures/Guild.js +90 -0
- package/dist/esm/structures/GuildMember.js +306 -0
- package/dist/esm/structures/Interaction.js +438 -0
- package/dist/esm/structures/Message.js +191 -0
- package/dist/esm/structures/User.js +61 -0
- package/dist/esm/structures/index.js +9 -0
- package/dist/esm/structures.js +3 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/utils/BitField.js +134 -0
- package/dist/esm/utils/Collection.js +261 -0
- package/dist/esm/utils/Collector.js +305 -0
- package/dist/esm/utils/DataResolver.js +142 -0
- package/dist/esm/utils/Formatters.js +191 -0
- package/dist/esm/utils/IntentsBitField.js +93 -0
- package/dist/esm/utils/Partials.js +137 -0
- package/dist/esm/utils/PermissionsBitField.js +141 -0
- package/dist/esm/utils/SnowflakeUtil.js +89 -0
- package/dist/esm/utils/Sweepers.js +245 -0
- package/dist/esm/utils/index.js +14 -0
- package/package.json +14 -4
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manager for guild members with caching and lazy loading
|
|
3
|
+
*/
|
|
4
|
+
import { CachedManager } from './BaseManager';
|
|
5
|
+
import { Collection } from '../utils/Collection';
|
|
6
|
+
import { Permissions } from '../structures/GuildMember';
|
|
7
|
+
/**
|
|
8
|
+
* Manages guild members
|
|
9
|
+
*/
|
|
10
|
+
export class GuildMemberManager extends CachedManager {
|
|
11
|
+
/** The guild this manager belongs to */
|
|
12
|
+
guild;
|
|
13
|
+
constructor(guild, iterable) {
|
|
14
|
+
// Use a simple object as placeholder since we don't have GuildMember class yet
|
|
15
|
+
super(guild.client, Object, iterable);
|
|
16
|
+
this.guild = guild;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Add a member to the cache
|
|
20
|
+
*/
|
|
21
|
+
_add(data, cache = true) {
|
|
22
|
+
const id = data.user?.id ?? data.id;
|
|
23
|
+
const existing = this.cache.get(id);
|
|
24
|
+
if (existing) {
|
|
25
|
+
if (cache) {
|
|
26
|
+
Object.assign(existing, data);
|
|
27
|
+
}
|
|
28
|
+
return existing;
|
|
29
|
+
}
|
|
30
|
+
const member = {
|
|
31
|
+
id,
|
|
32
|
+
guildId: this.guild.id,
|
|
33
|
+
user: data.user,
|
|
34
|
+
nick: data.nick,
|
|
35
|
+
roles: data.roles ?? [],
|
|
36
|
+
joinedAt: data.joined_at ? new Date(data.joined_at) : null,
|
|
37
|
+
premiumSince: data.premium_since ? new Date(data.premium_since) : null,
|
|
38
|
+
deaf: data.deaf ?? false,
|
|
39
|
+
mute: data.mute ?? false,
|
|
40
|
+
pending: data.pending ?? false,
|
|
41
|
+
permissions: new Permissions(data.permissions || '0', this.guild.ownerId === id),
|
|
42
|
+
communicationDisabledUntil: data.communication_disabled_until
|
|
43
|
+
? new Date(data.communication_disabled_until)
|
|
44
|
+
: null,
|
|
45
|
+
// Helper methods
|
|
46
|
+
get displayName() {
|
|
47
|
+
return this.nick ?? this.user?.display_name ?? this.user?.username ?? 'Unknown';
|
|
48
|
+
},
|
|
49
|
+
toString() {
|
|
50
|
+
return `<@${this.id}>`;
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
if (cache) {
|
|
54
|
+
this.cache.set(id, member);
|
|
55
|
+
}
|
|
56
|
+
return member;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Fetch a member from the API
|
|
60
|
+
*/
|
|
61
|
+
async fetch(id, options) {
|
|
62
|
+
if (!options?.force) {
|
|
63
|
+
const existing = this.cache.get(id);
|
|
64
|
+
if (existing)
|
|
65
|
+
return existing;
|
|
66
|
+
}
|
|
67
|
+
const data = await this.client.rest.request('GET', `/guilds/${this.guild.id}/members/${id}`);
|
|
68
|
+
return this._add(data, options?.cache ?? true);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fetch multiple members
|
|
72
|
+
*/
|
|
73
|
+
async fetchMany(options) {
|
|
74
|
+
const params = new URLSearchParams();
|
|
75
|
+
if (options?.limit)
|
|
76
|
+
params.set('limit', String(options.limit));
|
|
77
|
+
if (options?.after)
|
|
78
|
+
params.set('after', options.after);
|
|
79
|
+
if (options?.query)
|
|
80
|
+
params.set('query', options.query);
|
|
81
|
+
const data = await this.client.rest.request('GET', `/guilds/${this.guild.id}/members?${params}`);
|
|
82
|
+
const members = new Collection();
|
|
83
|
+
for (const memberData of data) {
|
|
84
|
+
const member = this._add(memberData);
|
|
85
|
+
members.set(member.id, member);
|
|
86
|
+
}
|
|
87
|
+
return members;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Search for members by query
|
|
91
|
+
*/
|
|
92
|
+
async search(options) {
|
|
93
|
+
return this.fetchMany({ query: options.query, limit: options.limit ?? 10 });
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Kick a member
|
|
97
|
+
*/
|
|
98
|
+
async kick(id, reason) {
|
|
99
|
+
await this.client.rest.request('DELETE', `/guilds/${this.guild.id}/members/${id}`, reason ? { reason } : undefined);
|
|
100
|
+
this.cache.delete(id);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Ban a member
|
|
104
|
+
*/
|
|
105
|
+
async ban(id, options) {
|
|
106
|
+
await this.client.rest.request('PUT', `/guilds/${this.guild.id}/bans/${id}`, {
|
|
107
|
+
delete_message_days: options?.deleteMessageDays,
|
|
108
|
+
reason: options?.reason,
|
|
109
|
+
});
|
|
110
|
+
this.cache.delete(id);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Unban a user
|
|
114
|
+
*/
|
|
115
|
+
async unban(id, reason) {
|
|
116
|
+
await this.client.rest.request('DELETE', `/guilds/${this.guild.id}/bans/${id}`, reason ? { reason } : undefined);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Edit a member
|
|
120
|
+
*/
|
|
121
|
+
async edit(id, data) {
|
|
122
|
+
const body = {};
|
|
123
|
+
if (data.nick !== undefined)
|
|
124
|
+
body.nick = data.nick;
|
|
125
|
+
if (data.roles !== undefined)
|
|
126
|
+
body.roles = data.roles;
|
|
127
|
+
if (data.mute !== undefined)
|
|
128
|
+
body.mute = data.mute;
|
|
129
|
+
if (data.deaf !== undefined)
|
|
130
|
+
body.deaf = data.deaf;
|
|
131
|
+
if (data.channel_id !== undefined)
|
|
132
|
+
body.channel_id = data.channel_id;
|
|
133
|
+
if (data.communication_disabled_until !== undefined) {
|
|
134
|
+
body.communication_disabled_until = data.communication_disabled_until?.toISOString() ?? null;
|
|
135
|
+
}
|
|
136
|
+
const result = await this.client.rest.request('PATCH', `/guilds/${this.guild.id}/members/${id}`, body);
|
|
137
|
+
return this._add(result);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Add a role to a member
|
|
141
|
+
*/
|
|
142
|
+
async addRole(memberId, roleId, reason) {
|
|
143
|
+
await this.client.rest.request('PUT', `/guilds/${this.guild.id}/members/${memberId}/roles/${roleId}`, reason ? { reason } : undefined);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Remove a role from a member
|
|
147
|
+
*/
|
|
148
|
+
async removeRole(memberId, roleId, reason) {
|
|
149
|
+
await this.client.rest.request('DELETE', `/guilds/${this.guild.id}/members/${memberId}/roles/${roleId}`, reason ? { reason } : undefined);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export default GuildMemberManager;
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpbGRNZW1iZXJNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21hbmFnZXJzL0d1aWxkTWVtYmVyTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RDs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUEwQjtJQUNoRSx3Q0FBd0M7SUFDeEIsS0FBSyxDQUFNO0lBRTNCLFlBQVksS0FBVSxFQUFFLFFBQXdCO1FBQzlDLCtFQUErRTtRQUMvRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLElBQVMsRUFBRSxLQUFLLEdBQUcsSUFBSTtRQUMxQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDYixFQUFFO1lBQ0YsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFB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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hbmFnZXIgZm9yIGd1aWxkIG1lbWJlcnMgd2l0aCBjYWNoaW5nIGFuZCBsYXp5IGxvYWRpbmdcbiAqL1xuXG5pbXBvcnQgeyBDYWNoZWRNYW5hZ2VyIH0gZnJvbSAnLi9CYXNlTWFuYWdlcic7XG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvQ29sbGVjdGlvbic7XG5pbXBvcnQgeyBQZXJtaXNzaW9ucyB9IGZyb20gJy4uL3N0cnVjdHVyZXMvR3VpbGRNZW1iZXInO1xuXG4vKipcbiAqIE1hbmFnZXMgZ3VpbGQgbWVtYmVyc1xuICovXG5leHBvcnQgY2xhc3MgR3VpbGRNZW1iZXJNYW5hZ2VyIGV4dGVuZHMgQ2FjaGVkTWFuYWdlcjxzdHJpbmcsIGFueT4ge1xuICAvKiogVGhlIGd1aWxkIHRoaXMgbWFuYWdlciBiZWxvbmdzIHRvICovXG4gIHB1YmxpYyByZWFkb25seSBndWlsZDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGd1aWxkOiBhbnksIGl0ZXJhYmxlPzogSXRlcmFibGU8YW55Pikge1xuICAgIC8vIFVzZSBhIHNpbXBsZSBvYmplY3QgYXMgcGxhY2Vob2xkZXIgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBHdWlsZE1lbWJlciBjbGFzcyB5ZXRcbiAgICBzdXBlcihndWlsZC5jbGllbnQsIE9iamVjdCBhcyBhbnksIGl0ZXJhYmxlKTtcbiAgICB0aGlzLmd1aWxkID0gZ3VpbGQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbWVtYmVyIHRvIHRoZSBjYWNoZVxuICAgKi9cbiAgX2FkZChkYXRhOiBhbnksIGNhY2hlID0gdHJ1ZSk6IGFueSB7XG4gICAgY29uc3QgaWQgPSBkYXRhLnVzZXI/LmlkID8/IGRhdGEuaWQ7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNhY2hlLmdldChpZCk7XG4gICAgXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBpZiAoY2FjaGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihleGlzdGluZywgZGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG1lbWJlciA9IHtcbiAgICAgIGlkLFxuICAgICAgZ3VpbGRJZDogdGhpcy5ndWlsZC5pZCxcbiAgICAgIHVzZXI6IGRhdGEudXNlcixcbiAgICAgIG5pY2s6IGRhdGEubmljayxcbiAgICAgIHJvbGVzOiBkYXRhLnJvbGVzID8/IFtdLFxuICAgICAgam9pbmVkQXQ6IGRhdGEuam9pbmVkX2F0ID8gbmV3IERhdGUoZGF0YS5qb2luZWRfYXQpIDogbnVsbCxcbiAgICAgIHByZW1pdW1TaW5jZTogZGF0YS5wcmVtaXVtX3NpbmNlID8gbmV3IERhdGUoZGF0YS5wcmVtaXVtX3NpbmNlKSA6IG51bGwsXG4gICAgICBkZWFmOiBkYXRhLmRlYWYgPz8gZmFsc2UsXG4gICAgICBtdXRlOiBkYXRhLm11dGUgPz8gZmFsc2UsXG4gICAgICBwZW5kaW5nOiBkYXRhLnBlbmRpbmcgPz8gZmFsc2UsXG4gICAgICBwZXJtaXNzaW9uczogbmV3IFBlcm1pc3Npb25zKGRhdGEucGVybWlzc2lvbnMgfHwgJzAnLCB0aGlzLmd1aWxkLm93bmVySWQgPT09IGlkKSxcbiAgICAgIGNvbW11bmljYXRpb25EaXNhYmxlZFVudGlsOiBkYXRhLmNvbW11bmljYXRpb25fZGlzYWJsZWRfdW50aWwgXG4gICAgICAgID8gbmV3IERhdGUoZGF0YS5jb21tdW5pY2F0aW9uX2Rpc2FibGVkX3VudGlsKSBcbiAgICAgICAgOiBudWxsLFxuICAgICAgXG4gICAgICAvLyBIZWxwZXIgbWV0aG9kc1xuICAgICAgZ2V0IGRpc3BsYXlOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uaWNrID8/IHRoaXMudXNlcj8uZGlzcGxheV9uYW1lID8/IHRoaXMudXNlcj8udXNlcm5hbWUgPz8gJ1Vua25vd24nO1xuICAgICAgfSxcbiAgICAgIFxuICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgPEAke3RoaXMuaWR9PmA7XG4gICAgICB9LFxuICAgIH07XG4gICAgXG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICB0aGlzLmNhY2hlLnNldChpZCwgbWVtYmVyKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG1lbWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhIG1lbWJlciBmcm9tIHRoZSBBUElcbiAgICovXG4gIGFzeW5jIGZldGNoKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiB7IGNhY2hlPzogYm9vbGVhbjsgZm9yY2U/OiBib29sZWFuIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghb3B0aW9ucz8uZm9yY2UpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5jYWNoZS5nZXQoaWQpO1xuICAgICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoXG4gICAgICAnR0VUJyxcbiAgICAgIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vbWVtYmVycy8ke2lkfWBcbiAgICApO1xuICAgIFxuICAgIHJldHVybiB0aGlzLl9hZGQoZGF0YSwgb3B0aW9ucz8uY2FjaGUgPz8gdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggbXVsdGlwbGUgbWVtYmVyc1xuICAgKi9cbiAgYXN5bmMgZmV0Y2hNYW55KG9wdGlvbnM/OiB7IFxuICAgIGxpbWl0PzogbnVtYmVyOyBcbiAgICBhZnRlcj86IHN0cmluZztcbiAgICBxdWVyeT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8Q29sbGVjdGlvbjxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnM/LmxpbWl0KSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhvcHRpb25zLmxpbWl0KSk7XG4gICAgaWYgKG9wdGlvbnM/LmFmdGVyKSBwYXJhbXMuc2V0KCdhZnRlcicsIG9wdGlvbnMuYWZ0ZXIpO1xuICAgIGlmIChvcHRpb25zPy5xdWVyeSkgcGFyYW1zLnNldCgncXVlcnknLCBvcHRpb25zLnF1ZXJ5KTtcbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KFxuICAgICAgJ0dFVCcsXG4gICAgICBgL2d1aWxkcy8ke3RoaXMuZ3VpbGQuaWR9L21lbWJlcnM/JHtwYXJhbXN9YFxuICAgICk7XG4gICAgXG4gICAgY29uc3QgbWVtYmVycyA9IG5ldyBDb2xsZWN0aW9uPHN0cmluZywgYW55PigpO1xuICAgIGZvciAoY29uc3QgbWVtYmVyRGF0YSBvZiBkYXRhKSB7XG4gICAgICBjb25zdCBtZW1iZXIgPSB0aGlzLl9hZGQobWVtYmVyRGF0YSk7XG4gICAgICBtZW1iZXJzLnNldChtZW1iZXIuaWQsIG1lbWJlcik7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBtZW1iZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgbWVtYmVycyBieSBxdWVyeVxuICAgKi9cbiAgYXN5bmMgc2VhcmNoKG9wdGlvbnM6IHsgcXVlcnk6IHN0cmluZzsgbGltaXQ/OiBudW1iZXIgfSk6IFByb21pc2U8Q29sbGVjdGlvbjxzdHJpbmcsIGFueT4+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaE1hbnkoeyBxdWVyeTogb3B0aW9ucy5xdWVyeSwgbGltaXQ6IG9wdGlvbnMubGltaXQgPz8gMTAgfSk7XG4gIH1cblxuICAvKipcbiAgICogS2ljayBhIG1lbWJlclxuICAgKi9cbiAgYXN5bmMga2ljayhpZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoXG4gICAgICAnREVMRVRFJyxcbiAgICAgIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vbWVtYmVycy8ke2lkfWAsXG4gICAgICByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkXG4gICAgKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShpZCk7XG4gIH1cblxuICAvKipcbiAgICogQmFuIGEgbWVtYmVyXG4gICAqL1xuICBhc3luYyBiYW4oaWQ6IHN0cmluZywgb3B0aW9ucz86IHsgZGVsZXRlTWVzc2FnZURheXM/OiBudW1iZXI7IHJlYXNvbj86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KFxuICAgICAgJ1BVVCcsXG4gICAgICBgL2d1aWxkcy8ke3RoaXMuZ3VpbGQuaWR9L2JhbnMvJHtpZH1gLFxuICAgICAge1xuICAgICAgICBkZWxldGVfbWVzc2FnZV9kYXlzOiBvcHRpb25zPy5kZWxldGVNZXNzYWdlRGF5cyxcbiAgICAgICAgcmVhc29uOiBvcHRpb25zPy5yZWFzb24sXG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShpZCk7XG4gIH1cblxuICAvKipcbiAgICogVW5iYW4gYSB1c2VyXG4gICAqL1xuICBhc3luYyB1bmJhbihpZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoXG4gICAgICAnREVMRVRFJyxcbiAgICAgIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vYmFucy8ke2lkfWAsXG4gICAgICByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IGEgbWVtYmVyXG4gICAqL1xuICBhc3luYyBlZGl0KGlkOiBzdHJpbmcsIGRhdGE6IHtcbiAgICBuaWNrPzogc3RyaW5nIHwgbnVsbDtcbiAgICByb2xlcz86IHN0cmluZ1tdO1xuICAgIG11dGU/OiBib29sZWFuO1xuICAgIGRlYWY/OiBib29sZWFuO1xuICAgIGNoYW5uZWxfaWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIGNvbW11bmljYXRpb25fZGlzYWJsZWRfdW50aWw/OiBEYXRlIHwgbnVsbDtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYm9keTogYW55ID0ge307XG4gICAgaWYgKGRhdGEubmljayAhPT0gdW5kZWZpbmVkKSBib2R5Lm5pY2sgPSBkYXRhLm5pY2s7XG4gICAgaWYgKGRhdGEucm9sZXMgIT09IHVuZGVmaW5lZCkgYm9keS5yb2xlcyA9IGRhdGEucm9sZXM7XG4gICAgaWYgKGRhdGEubXV0ZSAhPT0gdW5kZWZpbmVkKSBib2R5Lm11dGUgPSBkYXRhLm11dGU7XG4gICAgaWYgKGRhdGEuZGVhZiAhPT0gdW5kZWZpbmVkKSBib2R5LmRlYWYgPSBkYXRhLmRlYWY7XG4gICAgaWYgKGRhdGEuY2hhbm5lbF9pZCAhPT0gdW5kZWZpbmVkKSBib2R5LmNoYW5uZWxfaWQgPSBkYXRhLmNoYW5uZWxfaWQ7XG4gICAgaWYgKGRhdGEuY29tbXVuaWNhdGlvbl9kaXNhYmxlZF91bnRpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBib2R5LmNvbW11bmljYXRpb25fZGlzYWJsZWRfdW50aWwgPSBkYXRhLmNvbW11bmljYXRpb25fZGlzYWJsZWRfdW50aWw/LnRvSVNPU3RyaW5nKCkgPz8gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KFxuICAgICAgJ1BBVENIJyxcbiAgICAgIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vbWVtYmVycy8ke2lkfWAsXG4gICAgICBib2R5XG4gICAgKTtcbiAgICBcbiAgICByZXR1cm4gdGhpcy5fYWRkKHJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcm9sZSB0byBhIG1lbWJlclxuICAgKi9cbiAgYXN5bmMgYWRkUm9sZShtZW1iZXJJZDogc3RyaW5nLCByb2xlSWQ6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KFxuICAgICAgJ1BVVCcsXG4gICAgICBgL2d1aWxkcy8ke3RoaXMuZ3VpbGQuaWR9L21lbWJlcnMvJHttZW1iZXJJZH0vcm9sZXMvJHtyb2xlSWR9YCxcbiAgICAgIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHJvbGUgZnJvbSBhIG1lbWJlclxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlUm9sZShtZW1iZXJJZDogc3RyaW5nLCByb2xlSWQ6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KFxuICAgICAgJ0RFTEVURScsXG4gICAgICBgL2d1aWxkcy8ke3RoaXMuZ3VpbGQuaWR9L21lbWJlcnMvJHttZW1iZXJJZH0vcm9sZXMvJHtyb2xlSWR9YCxcbiAgICAgIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEd1aWxkTWVtYmVyTWFuYWdlcjtcbiJdfQ==
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manager for roles with caching and lazy loading
|
|
3
|
+
*/
|
|
4
|
+
import { CachedManager } from './BaseManager';
|
|
5
|
+
import { Collection } from '../utils/Collection';
|
|
6
|
+
/**
|
|
7
|
+
* Manages roles for a guild
|
|
8
|
+
*/
|
|
9
|
+
export class RoleManager extends CachedManager {
|
|
10
|
+
/** The guild this manager belongs to */
|
|
11
|
+
guild;
|
|
12
|
+
constructor(guild, iterable) {
|
|
13
|
+
super(guild.client, Object, iterable);
|
|
14
|
+
this.guild = guild;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the @everyone role
|
|
18
|
+
*/
|
|
19
|
+
get everyone() {
|
|
20
|
+
return this.cache.get(this.guild.id) ?? null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the highest role
|
|
24
|
+
*/
|
|
25
|
+
get highest() {
|
|
26
|
+
return this.cache.reduce((prev, role) => (role.position > (prev?.position ?? -1)) ? role : prev, null);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the bot's highest role
|
|
30
|
+
*/
|
|
31
|
+
get botRoleFor() {
|
|
32
|
+
return (userId) => {
|
|
33
|
+
const member = this.guild.members?.cache.get(userId);
|
|
34
|
+
if (!member)
|
|
35
|
+
return null;
|
|
36
|
+
return this.cache
|
|
37
|
+
.filter((role) => member.roles?.includes(role.id))
|
|
38
|
+
.sort((a, b) => b.position - a.position)
|
|
39
|
+
.first() ?? null;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Add a role to the cache
|
|
44
|
+
*/
|
|
45
|
+
_add(data, cache = true) {
|
|
46
|
+
const id = data.id;
|
|
47
|
+
const existing = this.cache.get(id);
|
|
48
|
+
if (existing) {
|
|
49
|
+
if (cache)
|
|
50
|
+
Object.assign(existing, data);
|
|
51
|
+
return existing;
|
|
52
|
+
}
|
|
53
|
+
const role = {
|
|
54
|
+
id,
|
|
55
|
+
guildId: this.guild.id,
|
|
56
|
+
name: data.name,
|
|
57
|
+
color: data.color ?? 0,
|
|
58
|
+
hoist: data.hoist ?? false,
|
|
59
|
+
position: data.position ?? 0,
|
|
60
|
+
permissions: data.permissions ?? '0',
|
|
61
|
+
managed: data.managed ?? false,
|
|
62
|
+
mentionable: data.mentionable ?? false,
|
|
63
|
+
icon: data.icon ?? null,
|
|
64
|
+
unicodeEmoji: data.unicode_emoji ?? null,
|
|
65
|
+
tags: data.tags ?? null,
|
|
66
|
+
get hexColor() {
|
|
67
|
+
return `#${this.color.toString(16).padStart(6, '0')}`;
|
|
68
|
+
},
|
|
69
|
+
get createdAt() {
|
|
70
|
+
const timestamp = BigInt(this.id) >> 22n;
|
|
71
|
+
return new Date(Number(timestamp) + 1640995200000); // Jubbio epoch
|
|
72
|
+
},
|
|
73
|
+
toString() {
|
|
74
|
+
return this.id === this.guildId ? '@everyone' : `<@&${this.id}>`;
|
|
75
|
+
},
|
|
76
|
+
comparePositionTo(role) {
|
|
77
|
+
return this.position - (role?.position ?? 0);
|
|
78
|
+
},
|
|
79
|
+
async edit(data) {
|
|
80
|
+
return this.guild.roles.edit(this.id, data);
|
|
81
|
+
},
|
|
82
|
+
async delete(reason) {
|
|
83
|
+
return this.guild.roles.delete(this.id, reason);
|
|
84
|
+
},
|
|
85
|
+
async setPosition(position) {
|
|
86
|
+
return this.guild.roles.setPositions([{ role: this.id, position }]);
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
if (cache)
|
|
90
|
+
this.cache.set(id, role);
|
|
91
|
+
return role;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Fetch a role from the API
|
|
95
|
+
*/
|
|
96
|
+
async fetch(id, options) {
|
|
97
|
+
if (!options?.force) {
|
|
98
|
+
const existing = this.cache.get(id);
|
|
99
|
+
if (existing)
|
|
100
|
+
return existing;
|
|
101
|
+
}
|
|
102
|
+
// Roles are fetched as part of guild, so fetch all
|
|
103
|
+
const roles = await this.fetchAll();
|
|
104
|
+
return roles.get(id) ?? null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Fetch all roles for the guild
|
|
108
|
+
*/
|
|
109
|
+
async fetchAll() {
|
|
110
|
+
const data = await this.client.rest.request('GET', `/guilds/${this.guild.id}/roles`);
|
|
111
|
+
const roles = new Collection();
|
|
112
|
+
for (const roleData of data) {
|
|
113
|
+
const role = this._add(roleData);
|
|
114
|
+
roles.set(role.id, role);
|
|
115
|
+
}
|
|
116
|
+
return roles;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create a new role
|
|
120
|
+
*/
|
|
121
|
+
async create(options) {
|
|
122
|
+
const body = {};
|
|
123
|
+
if (options?.name)
|
|
124
|
+
body.name = options.name;
|
|
125
|
+
if (options?.color !== undefined) {
|
|
126
|
+
body.color = typeof options.color === 'string'
|
|
127
|
+
? parseInt(options.color.replace('#', ''), 16)
|
|
128
|
+
: options.color;
|
|
129
|
+
}
|
|
130
|
+
if (options?.hoist !== undefined)
|
|
131
|
+
body.hoist = options.hoist;
|
|
132
|
+
if (options?.permissions !== undefined)
|
|
133
|
+
body.permissions = String(options.permissions);
|
|
134
|
+
if (options?.mentionable !== undefined)
|
|
135
|
+
body.mentionable = options.mentionable;
|
|
136
|
+
if (options?.icon)
|
|
137
|
+
body.icon = options.icon;
|
|
138
|
+
if (options?.unicodeEmoji)
|
|
139
|
+
body.unicode_emoji = options.unicodeEmoji;
|
|
140
|
+
const data = await this.client.rest.request('POST', `/guilds/${this.guild.id}/roles`, body);
|
|
141
|
+
const role = this._add(data);
|
|
142
|
+
// Set position if specified
|
|
143
|
+
if (options?.position !== undefined) {
|
|
144
|
+
await this.setPositions([{ role: role.id, position: options.position }]);
|
|
145
|
+
}
|
|
146
|
+
return role;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Delete a role
|
|
150
|
+
*/
|
|
151
|
+
async delete(id, reason) {
|
|
152
|
+
await this.client.rest.request('DELETE', `/guilds/${this.guild.id}/roles/${id}`, reason ? { reason } : undefined);
|
|
153
|
+
this.cache.delete(id);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Edit a role
|
|
157
|
+
*/
|
|
158
|
+
async edit(id, data) {
|
|
159
|
+
const body = {};
|
|
160
|
+
if (data.name !== undefined)
|
|
161
|
+
body.name = data.name;
|
|
162
|
+
if (data.color !== undefined) {
|
|
163
|
+
body.color = typeof data.color === 'string'
|
|
164
|
+
? parseInt(data.color.replace('#', ''), 16)
|
|
165
|
+
: data.color;
|
|
166
|
+
}
|
|
167
|
+
if (data.hoist !== undefined)
|
|
168
|
+
body.hoist = data.hoist;
|
|
169
|
+
if (data.permissions !== undefined)
|
|
170
|
+
body.permissions = String(data.permissions);
|
|
171
|
+
if (data.mentionable !== undefined)
|
|
172
|
+
body.mentionable = data.mentionable;
|
|
173
|
+
if (data.icon !== undefined)
|
|
174
|
+
body.icon = data.icon;
|
|
175
|
+
if (data.unicodeEmoji !== undefined)
|
|
176
|
+
body.unicode_emoji = data.unicodeEmoji;
|
|
177
|
+
const result = await this.client.rest.request('PATCH', `/guilds/${this.guild.id}/roles/${id}`, body);
|
|
178
|
+
return this._add(result);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Set role positions
|
|
182
|
+
*/
|
|
183
|
+
async setPositions(positions) {
|
|
184
|
+
const body = positions.map(p => ({ id: p.role, position: p.position }));
|
|
185
|
+
const data = await this.client.rest.request('PATCH', `/guilds/${this.guild.id}/roles`, body);
|
|
186
|
+
const roles = new Collection();
|
|
187
|
+
for (const roleData of data) {
|
|
188
|
+
const role = this._add(roleData);
|
|
189
|
+
roles.set(role.id, role);
|
|
190
|
+
}
|
|
191
|
+
return roles;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Compare two roles by position
|
|
195
|
+
*/
|
|
196
|
+
comparePositions(role1, role2) {
|
|
197
|
+
const r1 = typeof role1 === 'string' ? this.cache.get(role1) : role1;
|
|
198
|
+
const r2 = typeof role2 === 'string' ? this.cache.get(role2) : role2;
|
|
199
|
+
return (r1?.position ?? 0) - (r2?.position ?? 0);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export default RoleManager;
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9sZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFuYWdlcnMvUm9sZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRDs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsYUFBMEI7SUFDekQsd0NBQXdDO0lBQ3hCLEtBQUssQ0FBTTtJQUUzQixZQUFZLEtBQVUsRUFBRSxRQUF3QjtRQUM5QyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQ3RDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDdEQsSUFBVyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFF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QUFFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFuYWdlciBmb3Igcm9sZXMgd2l0aCBjYWNoaW5nIGFuZCBsYXp5IGxvYWRpbmdcbiAqL1xuXG5pbXBvcnQgeyBDYWNoZWRNYW5hZ2VyIH0gZnJvbSAnLi9CYXNlTWFuYWdlcic7XG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvQ29sbGVjdGlvbic7XG5cbi8qKlxuICogTWFuYWdlcyByb2xlcyBmb3IgYSBndWlsZFxuICovXG5leHBvcnQgY2xhc3MgUm9sZU1hbmFnZXIgZXh0ZW5kcyBDYWNoZWRNYW5hZ2VyPHN0cmluZywgYW55PiB7XG4gIC8qKiBUaGUgZ3VpbGQgdGhpcyBtYW5hZ2VyIGJlbG9uZ3MgdG8gKi9cbiAgcHVibGljIHJlYWRvbmx5IGd1aWxkOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoZ3VpbGQ6IGFueSwgaXRlcmFibGU/OiBJdGVyYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIoZ3VpbGQuY2xpZW50LCBPYmplY3QgYXMgYW55LCBpdGVyYWJsZSk7XG4gICAgdGhpcy5ndWlsZCA9IGd1aWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQGV2ZXJ5b25lIHJvbGVcbiAgICovXG4gIGdldCBldmVyeW9uZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldCh0aGlzLmd1aWxkLmlkKSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaGlnaGVzdCByb2xlXG4gICAqL1xuICBnZXQgaGlnaGVzdCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnJlZHVjZSgocHJldiwgcm9sZSkgPT4gXG4gICAgICAocm9sZS5wb3NpdGlvbiA+IChwcmV2Py5wb3NpdGlvbiA/PyAtMSkpID8gcm9sZSA6IHByZXZcbiAgICAsIG51bGwgYXMgYW55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJvdCdzIGhpZ2hlc3Qgcm9sZVxuICAgKi9cbiAgZ2V0IGJvdFJvbGVGb3IoKTogKHVzZXJJZDogc3RyaW5nKSA9PiBhbnkgfCBudWxsIHtcbiAgICByZXR1cm4gKHVzZXJJZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZW1iZXIgPSB0aGlzLmd1aWxkLm1lbWJlcnM/LmNhY2hlLmdldCh1c2VySWQpO1xuICAgICAgaWYgKCFtZW1iZXIpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVcbiAgICAgICAgLmZpbHRlcigocm9sZTogYW55KSA9PiBtZW1iZXIucm9sZXM/LmluY2x1ZGVzKHJvbGUuaWQpKVxuICAgICAgICAuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGIucG9zaXRpb24gLSBhLnBvc2l0aW9uKVxuICAgICAgICAuZmlyc3QoKSA/PyBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcm9sZSB0byB0aGUgY2FjaGVcbiAgICovXG4gIF9hZGQoZGF0YTogYW55LCBjYWNoZSA9IHRydWUpOiBhbnkge1xuICAgIGNvbnN0IGlkID0gZGF0YS5pZDtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuY2FjaGUuZ2V0KGlkKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGlmIChjYWNoZSkgT2JqZWN0LmFzc2lnbihleGlzdGluZywgZGF0YSk7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHJvbGUgPSB7XG4gICAgICBpZCxcbiAgICAgIGd1aWxkSWQ6IHRoaXMuZ3VpbGQuaWQsXG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICBjb2xvcjogZGF0YS5jb2xvciA/PyAwLFxuICAgICAgaG9pc3Q6IGRhdGEuaG9pc3QgPz8gZmFsc2UsXG4gICAgICBwb3NpdGlvbjogZGF0YS5wb3NpdGlvbiA/PyAwLFxuICAgICAgcGVybWlzc2lvbnM6IGRhdGEucGVybWlzc2lvbnMgPz8gJzAnLFxuICAgICAgbWFuYWdlZDogZGF0YS5tYW5hZ2VkID8/IGZhbHNlLFxuICAgICAgbWVudGlvbmFibGU6IGRhdGEubWVudGlvbmFibGUgPz8gZmFsc2UsXG4gICAgICBpY29uOiBkYXRhLmljb24gPz8gbnVsbCxcbiAgICAgIHVuaWNvZGVFbW9qaTogZGF0YS51bmljb2RlX2Vtb2ppID8/IG51bGwsXG4gICAgICB0YWdzOiBkYXRhLnRhZ3MgPz8gbnVsbCxcbiAgICAgIFxuICAgICAgZ2V0IGhleENvbG9yKCkge1xuICAgICAgICByZXR1cm4gYCMke3RoaXMuY29sb3IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDYsICcwJyl9YDtcbiAgICAgIH0sXG4gICAgICBcbiAgICAgIGdldCBjcmVhdGVkQXQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IEJpZ0ludCh0aGlzLmlkKSA+PiAyMm47XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOdW1iZXIodGltZXN0YW1wKSArIDE2NDA5OTUyMDAwMDApOyAvLyBKdWJiaW8gZXBvY2hcbiAgICAgIH0sXG4gICAgICBcbiAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pZCA9PT0gdGhpcy5ndWlsZElkID8gJ0BldmVyeW9uZScgOiBgPEAmJHt0aGlzLmlkfT5gO1xuICAgICAgfSxcbiAgICAgIFxuICAgICAgY29tcGFyZVBvc2l0aW9uVG8ocm9sZTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uIC0gKHJvbGU/LnBvc2l0aW9uID8/IDApO1xuICAgICAgfSxcbiAgICAgIFxuICAgICAgYXN5bmMgZWRpdChkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3VpbGQucm9sZXMuZWRpdCh0aGlzLmlkLCBkYXRhKTtcbiAgICAgIH0sXG4gICAgICBcbiAgICAgIGFzeW5jIGRlbGV0ZShyZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3VpbGQucm9sZXMuZGVsZXRlKHRoaXMuaWQsIHJlYXNvbik7XG4gICAgICB9LFxuICAgICAgXG4gICAgICBhc3luYyBzZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmd1aWxkLnJvbGVzLnNldFBvc2l0aW9ucyhbeyByb2xlOiB0aGlzLmlkLCBwb3NpdGlvbiB9XSk7XG4gICAgICB9LFxuICAgIH07XG4gICAgXG4gICAgaWYgKGNhY2hlKSB0aGlzLmNhY2hlLnNldChpZCwgcm9sZSk7XG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSByb2xlIGZyb20gdGhlIEFQSVxuICAgKi9cbiAgYXN5bmMgZmV0Y2goaWQ6IHN0cmluZywgb3B0aW9ucz86IHsgY2FjaGU/OiBib29sZWFuOyBmb3JjZT86IGJvb2xlYW4gfSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCFvcHRpb25zPy5mb3JjZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNhY2hlLmdldChpZCk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgXG4gICAgLy8gUm9sZXMgYXJlIGZldGNoZWQgYXMgcGFydCBvZiBndWlsZCwgc28gZmV0Y2ggYWxsXG4gICAgY29uc3Qgcm9sZXMgPSBhd2FpdCB0aGlzLmZldGNoQWxsKCk7XG4gICAgcmV0dXJuIHJvbGVzLmdldChpZCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgcm9sZXMgZm9yIHRoZSBndWlsZFxuICAgKi9cbiAgYXN5bmMgZmV0Y2hBbGwoKTogUHJvbWlzZTxDb2xsZWN0aW9uPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoJ0dFVCcsIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vcm9sZXNgKTtcbiAgICBjb25zdCByb2xlcyA9IG5ldyBDb2xsZWN0aW9uPHN0cmluZywgYW55PigpO1xuICAgIGZvciAoY29uc3Qgcm9sZURhdGEgb2YgZGF0YSkge1xuICAgICAgY29uc3Qgcm9sZSA9IHRoaXMuX2FkZChyb2xlRGF0YSk7XG4gICAgICByb2xlcy5zZXQocm9sZS5pZCwgcm9sZSk7XG4gICAgfVxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcm9sZVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlKG9wdGlvbnM/OiB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBjb2xvcj86IG51bWJlciB8IHN0cmluZztcbiAgICBob2lzdD86IGJvb2xlYW47XG4gICAgcG9zaXRpb24/OiBudW1iZXI7XG4gICAgcGVybWlzc2lvbnM/OiBzdHJpbmcgfCBiaWdpbnQ7XG4gICAgbWVudGlvbmFibGU/OiBib29sZWFuO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgdW5pY29kZUVtb2ppPzogc3RyaW5nO1xuICAgIHJlYXNvbj86IHN0cmluZztcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYm9keTogYW55ID0ge307XG4gICAgaWYgKG9wdGlvbnM/Lm5hbWUpIGJvZHkubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICBpZiAob3B0aW9ucz8uY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5jb2xvciA9IHR5cGVvZiBvcHRpb25zLmNvbG9yID09PSAnc3RyaW5nJyBcbiAgICAgICAgPyBwYXJzZUludChvcHRpb25zLmNvbG9yLnJlcGxhY2UoJyMnLCAnJyksIDE2KSBcbiAgICAgICAgOiBvcHRpb25zLmNvbG9yO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uaG9pc3QgIT09IHVuZGVmaW5lZCkgYm9keS5ob2lzdCA9IG9wdGlvbnMuaG9pc3Q7XG4gICAgaWYgKG9wdGlvbnM/LnBlcm1pc3Npb25zICE9PSB1bmRlZmluZWQpIGJvZHkucGVybWlzc2lvbnMgPSBTdHJpbmcob3B0aW9ucy5wZXJtaXNzaW9ucyk7XG4gICAgaWYgKG9wdGlvbnM/Lm1lbnRpb25hYmxlICE9PSB1bmRlZmluZWQpIGJvZHkubWVudGlvbmFibGUgPSBvcHRpb25zLm1lbnRpb25hYmxlO1xuICAgIGlmIChvcHRpb25zPy5pY29uKSBib2R5Lmljb24gPSBvcHRpb25zLmljb247XG4gICAgaWYgKG9wdGlvbnM/LnVuaWNvZGVFbW9qaSkgYm9keS51bmljb2RlX2Vtb2ppID0gb3B0aW9ucy51bmljb2RlRW1vamk7XG4gICAgXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY2xpZW50LnJlc3QucmVxdWVzdCgnUE9TVCcsIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vcm9sZXNgLCBib2R5KTtcbiAgICBjb25zdCByb2xlID0gdGhpcy5fYWRkKGRhdGEpO1xuICAgIFxuICAgIC8vIFNldCBwb3NpdGlvbiBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucz8ucG9zaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRQb3NpdGlvbnMoW3sgcm9sZTogcm9sZS5pZCwgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb24gfV0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSByb2xlXG4gICAqL1xuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KCdERUxFVEUnLCBgL2d1aWxkcy8ke3RoaXMuZ3VpbGQuaWR9L3JvbGVzLyR7aWR9YCwgXG4gICAgICByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkXG4gICAgKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZShpZCk7XG4gIH1cblxuICAvKipcbiAgICogRWRpdCBhIHJvbGVcbiAgICovXG4gIGFzeW5jIGVkaXQoaWQ6IHN0cmluZywgZGF0YToge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgY29sb3I/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgaG9pc3Q/OiBib29sZWFuO1xuICAgIHBvc2l0aW9uPzogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25zPzogc3RyaW5nIHwgYmlnaW50O1xuICAgIG1lbnRpb25hYmxlPzogYm9vbGVhbjtcbiAgICBpY29uPzogc3RyaW5nIHwgbnVsbDtcbiAgICB1bmljb2RlRW1vamk/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYXNvbj86IHN0cmluZztcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYm9keTogYW55ID0ge307XG4gICAgaWYgKGRhdGEubmFtZSAhPT0gdW5kZWZpbmVkKSBib2R5Lm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgaWYgKGRhdGEuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYm9keS5jb2xvciA9IHR5cGVvZiBkYXRhLmNvbG9yID09PSAnc3RyaW5nJyBcbiAgICAgICAgPyBwYXJzZUludChkYXRhLmNvbG9yLnJlcGxhY2UoJyMnLCAnJyksIDE2KSBcbiAgICAgICAgOiBkYXRhLmNvbG9yO1xuICAgIH1cbiAgICBpZiAoZGF0YS5ob2lzdCAhPT0gdW5kZWZpbmVkKSBib2R5LmhvaXN0ID0gZGF0YS5ob2lzdDtcbiAgICBpZiAoZGF0YS5wZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKSBib2R5LnBlcm1pc3Npb25zID0gU3RyaW5nKGRhdGEucGVybWlzc2lvbnMpO1xuICAgIGlmIChkYXRhLm1lbnRpb25hYmxlICE9PSB1bmRlZmluZWQpIGJvZHkubWVudGlvbmFibGUgPSBkYXRhLm1lbnRpb25hYmxlO1xuICAgIGlmIChkYXRhLmljb24gIT09IHVuZGVmaW5lZCkgYm9keS5pY29uID0gZGF0YS5pY29uO1xuICAgIGlmIChkYXRhLnVuaWNvZGVFbW9qaSAhPT0gdW5kZWZpbmVkKSBib2R5LnVuaWNvZGVfZW1vamkgPSBkYXRhLnVuaWNvZGVFbW9qaTtcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoJ1BBVENIJywgYC9ndWlsZHMvJHt0aGlzLmd1aWxkLmlkfS9yb2xlcy8ke2lkfWAsIGJvZHkpO1xuICAgIHJldHVybiB0aGlzLl9hZGQocmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcm9sZSBwb3NpdGlvbnNcbiAgICovXG4gIGFzeW5jIHNldFBvc2l0aW9ucyhwb3NpdGlvbnM6IEFycmF5PHsgcm9sZTogc3RyaW5nOyBwb3NpdGlvbjogbnVtYmVyIH0+KTogUHJvbWlzZTxDb2xsZWN0aW9uPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IGJvZHkgPSBwb3NpdGlvbnMubWFwKHAgPT4gKHsgaWQ6IHAucm9sZSwgcG9zaXRpb246IHAucG9zaXRpb24gfSkpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoJ1BBVENIJywgYC9ndWlsZHMvJHt0aGlzLmd1aWxkLmlkfS9yb2xlc2AsIGJvZHkpO1xuICAgIFxuICAgIGNvbnN0IHJvbGVzID0gbmV3IENvbGxlY3Rpb248c3RyaW5nLCBhbnk+KCk7XG4gICAgZm9yIChjb25zdCByb2xlRGF0YSBvZiBkYXRhKSB7XG4gICAgICBjb25zdCByb2xlID0gdGhpcy5fYWRkKHJvbGVEYXRhKTtcbiAgICAgIHJvbGVzLnNldChyb2xlLmlkLCByb2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvbGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIHJvbGVzIGJ5IHBvc2l0aW9uXG4gICAqL1xuICBjb21wYXJlUG9zaXRpb25zKHJvbGUxOiBzdHJpbmcgfCBhbnksIHJvbGUyOiBzdHJpbmcgfCBhbnkpOiBudW1iZXIge1xuICAgIGNvbnN0IHIxID0gdHlwZW9mIHJvbGUxID09PSAnc3RyaW5nJyA/IHRoaXMuY2FjaGUuZ2V0KHJvbGUxKSA6IHJvbGUxO1xuICAgIGNvbnN0IHIyID0gdHlwZW9mIHJvbGUyID09PSAnc3RyaW5nJyA/IHRoaXMuY2FjaGUuZ2V0KHJvbGUyKSA6IHJvbGUyO1xuICAgIHJldHVybiAocjE/LnBvc2l0aW9uID8/IDApIC0gKHIyPy5wb3NpdGlvbiA/PyAwKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb2xlTWFuYWdlcjtcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manager exports
|
|
3
|
+
*/
|
|
4
|
+
export * from './BaseManager';
|
|
5
|
+
export * from './GuildMemberManager';
|
|
6
|
+
export * from './ChannelManager';
|
|
7
|
+
export * from './RoleManager';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFuYWdlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hbmFnZXIgZXhwb3J0c1xuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vQmFzZU1hbmFnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9HdWlsZE1lbWJlck1hbmFnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFubmVsTWFuYWdlcic7XG5leHBvcnQgKiBmcm9tICcuL1JvbGVNYW5hZ2VyJztcbiJdfQ==
|