@jubbio/core 1.1.20 → 1.3.2

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.
Files changed (125) hide show
  1. package/dist/Client.js +13 -14
  2. package/dist/cjs/Client.d.ts +157 -0
  3. package/dist/cjs/Client.js +640 -0
  4. package/dist/cjs/builders/ActionRowBuilder.d.ts +53 -0
  5. package/dist/cjs/builders/ActionRowBuilder.js +68 -0
  6. package/dist/cjs/builders/ButtonBuilder.d.ts +77 -0
  7. package/dist/cjs/builders/ButtonBuilder.js +96 -0
  8. package/dist/cjs/builders/EmbedBuilder.d.ts +157 -0
  9. package/dist/cjs/builders/EmbedBuilder.js +208 -0
  10. package/dist/cjs/builders/ModalBuilder.d.ts +122 -0
  11. package/dist/cjs/builders/ModalBuilder.js +162 -0
  12. package/dist/cjs/builders/SelectMenuBuilder.d.ts +123 -0
  13. package/dist/cjs/builders/SelectMenuBuilder.js +165 -0
  14. package/dist/cjs/builders/SlashCommandBuilder.d.ts +197 -0
  15. package/dist/cjs/builders/SlashCommandBuilder.js +324 -0
  16. package/dist/cjs/builders/index.d.ts +9 -0
  17. package/dist/cjs/builders/index.js +26 -0
  18. package/dist/cjs/enums.d.ts +191 -0
  19. package/dist/cjs/enums.js +211 -0
  20. package/dist/cjs/index.d.ts +25 -0
  21. package/dist/cjs/index.js +130 -0
  22. package/dist/cjs/managers/BaseManager.d.ts +69 -0
  23. package/dist/cjs/managers/BaseManager.js +106 -0
  24. package/dist/cjs/managers/ChannelManager.d.ts +95 -0
  25. package/dist/cjs/managers/ChannelManager.js +205 -0
  26. package/dist/cjs/managers/GuildMemberManager.d.ts +74 -0
  27. package/dist/cjs/managers/GuildMemberManager.js +157 -0
  28. package/dist/cjs/managers/RoleManager.d.ts +84 -0
  29. package/dist/cjs/managers/RoleManager.js +207 -0
  30. package/dist/cjs/managers/index.d.ts +7 -0
  31. package/dist/cjs/managers/index.js +24 -0
  32. package/dist/cjs/rest/REST.d.ts +527 -0
  33. package/dist/cjs/rest/REST.js +904 -0
  34. package/dist/cjs/rest/index.d.ts +1 -0
  35. package/dist/cjs/rest/index.js +18 -0
  36. package/dist/cjs/sharding/ShardingManager.d.ts +179 -0
  37. package/dist/cjs/sharding/ShardingManager.js +375 -0
  38. package/dist/cjs/sharding/index.d.ts +4 -0
  39. package/dist/cjs/sharding/index.js +21 -0
  40. package/dist/cjs/structures/Channel.d.ts +122 -0
  41. package/dist/cjs/structures/Channel.js +240 -0
  42. package/dist/cjs/structures/Collection.d.ts +53 -0
  43. package/dist/cjs/structures/Collection.js +115 -0
  44. package/dist/cjs/structures/Guild.d.ts +59 -0
  45. package/dist/cjs/structures/Guild.js +94 -0
  46. package/dist/cjs/structures/GuildMember.d.ts +174 -0
  47. package/dist/cjs/structures/GuildMember.js +311 -0
  48. package/dist/cjs/structures/Interaction.d.ts +245 -0
  49. package/dist/cjs/structures/Interaction.js +450 -0
  50. package/dist/cjs/structures/Message.d.ts +98 -0
  51. package/dist/cjs/structures/Message.js +195 -0
  52. package/dist/cjs/structures/User.d.ts +37 -0
  53. package/dist/cjs/structures/User.js +65 -0
  54. package/dist/cjs/structures/index.d.ts +7 -0
  55. package/dist/cjs/structures/index.js +25 -0
  56. package/dist/cjs/structures.d.ts +1 -0
  57. package/dist/cjs/structures.js +19 -0
  58. package/dist/cjs/types.d.ts +255 -0
  59. package/dist/cjs/types.js +3 -0
  60. package/dist/cjs/utils/BitField.d.ts +66 -0
  61. package/dist/cjs/utils/BitField.js +138 -0
  62. package/dist/cjs/utils/Collection.d.ts +116 -0
  63. package/dist/cjs/utils/Collection.js +265 -0
  64. package/dist/cjs/utils/Collector.d.ts +152 -0
  65. package/dist/cjs/utils/Collector.js +314 -0
  66. package/dist/cjs/utils/DataResolver.d.ts +61 -0
  67. package/dist/cjs/utils/DataResolver.js +146 -0
  68. package/dist/cjs/utils/Formatters.d.ts +145 -0
  69. package/dist/cjs/utils/Formatters.js +213 -0
  70. package/dist/cjs/utils/IntentsBitField.d.ts +85 -0
  71. package/dist/cjs/utils/IntentsBitField.js +99 -0
  72. package/dist/cjs/utils/Partials.d.ts +104 -0
  73. package/dist/cjs/utils/Partials.js +148 -0
  74. package/dist/cjs/utils/PermissionsBitField.d.ts +118 -0
  75. package/dist/cjs/utils/PermissionsBitField.js +145 -0
  76. package/dist/cjs/utils/SnowflakeUtil.d.ts +63 -0
  77. package/dist/cjs/utils/SnowflakeUtil.js +93 -0
  78. package/dist/cjs/utils/Sweepers.d.ts +119 -0
  79. package/dist/cjs/utils/Sweepers.js +249 -0
  80. package/dist/cjs/utils/index.d.ts +13 -0
  81. package/dist/cjs/utils/index.js +30 -0
  82. package/dist/esm/Client.js +634 -0
  83. package/dist/esm/builders/ActionRowBuilder.js +64 -0
  84. package/dist/esm/builders/ButtonBuilder.js +92 -0
  85. package/dist/esm/builders/EmbedBuilder.js +204 -0
  86. package/dist/esm/builders/ModalBuilder.js +157 -0
  87. package/dist/esm/builders/SelectMenuBuilder.js +161 -0
  88. package/dist/esm/builders/SlashCommandBuilder.js +311 -0
  89. package/dist/esm/builders/index.js +10 -0
  90. package/dist/esm/enums.js +208 -0
  91. package/dist/esm/index.js +34 -0
  92. package/dist/esm/managers/BaseManager.js +100 -0
  93. package/dist/esm/managers/ChannelManager.js +200 -0
  94. package/dist/esm/managers/GuildMemberManager.js +153 -0
  95. package/dist/esm/managers/RoleManager.js +203 -0
  96. package/dist/esm/managers/index.js +8 -0
  97. package/dist/esm/rest/REST.js +900 -0
  98. package/dist/esm/rest/index.js +2 -0
  99. package/dist/esm/sharding/ShardingManager.js +366 -0
  100. package/dist/esm/sharding/index.js +5 -0
  101. package/dist/esm/structures/Channel.js +232 -0
  102. package/dist/esm/structures/Collection.js +111 -0
  103. package/dist/esm/structures/Guild.js +90 -0
  104. package/dist/esm/structures/GuildMember.js +306 -0
  105. package/dist/esm/structures/Interaction.js +438 -0
  106. package/dist/esm/structures/Message.js +191 -0
  107. package/dist/esm/structures/User.js +61 -0
  108. package/dist/esm/structures/index.js +9 -0
  109. package/dist/esm/structures.js +3 -0
  110. package/dist/esm/types.js +2 -0
  111. package/dist/esm/utils/BitField.js +134 -0
  112. package/dist/esm/utils/Collection.js +261 -0
  113. package/dist/esm/utils/Collector.js +305 -0
  114. package/dist/esm/utils/DataResolver.js +142 -0
  115. package/dist/esm/utils/Formatters.js +191 -0
  116. package/dist/esm/utils/IntentsBitField.js +93 -0
  117. package/dist/esm/utils/Partials.js +137 -0
  118. package/dist/esm/utils/PermissionsBitField.js +141 -0
  119. package/dist/esm/utils/SnowflakeUtil.js +89 -0
  120. package/dist/esm/utils/Sweepers.js +245 -0
  121. package/dist/esm/utils/index.js +14 -0
  122. package/dist/rest/REST.js +8 -1
  123. package/dist/structures/Interaction.js +3 -5
  124. package/dist/structures/Message.js +56 -2
  125. package/package.json +14 -4
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Manager for channels with caching and lazy loading
3
+ */
4
+ import { CachedManager } from './BaseManager';
5
+ import { Collection } from '../utils/Collection';
6
+ /** Channel types */
7
+ export declare enum ChannelType {
8
+ GuildText = 0,
9
+ DM = 1,
10
+ GuildVoice = 2,
11
+ GroupDM = 3,
12
+ GuildCategory = 4,
13
+ GuildAnnouncement = 5,
14
+ GuildStageVoice = 13,
15
+ GuildDirectory = 14,
16
+ GuildForum = 15
17
+ }
18
+ /**
19
+ * Manages channels for a guild
20
+ */
21
+ export declare class GuildChannelManager extends CachedManager<string, any> {
22
+ /** The guild this manager belongs to */
23
+ readonly guild: any;
24
+ constructor(guild: any, iterable?: Iterable<any>);
25
+ /**
26
+ * Add a channel to the cache
27
+ */
28
+ _add(data: any, cache?: boolean): any;
29
+ /**
30
+ * Fetch a channel from the API
31
+ */
32
+ fetch(id: string, options?: {
33
+ cache?: boolean;
34
+ force?: boolean;
35
+ }): Promise<any>;
36
+ /**
37
+ * Fetch all channels for the guild
38
+ */
39
+ fetchAll(): Promise<Collection<string, any>>;
40
+ /**
41
+ * Create a new channel
42
+ */
43
+ create(options: {
44
+ name: string;
45
+ type?: ChannelType;
46
+ topic?: string;
47
+ bitrate?: number;
48
+ userLimit?: number;
49
+ rateLimitPerUser?: number;
50
+ position?: number;
51
+ permissionOverwrites?: any[];
52
+ parent?: string;
53
+ nsfw?: boolean;
54
+ reason?: string;
55
+ }): Promise<any>;
56
+ /**
57
+ * Delete a channel
58
+ */
59
+ delete(id: string, reason?: string): Promise<void>;
60
+ /**
61
+ * Edit a channel
62
+ */
63
+ edit(id: string, data: {
64
+ name?: string;
65
+ type?: ChannelType;
66
+ position?: number;
67
+ topic?: string;
68
+ nsfw?: boolean;
69
+ rateLimitPerUser?: number;
70
+ bitrate?: number;
71
+ userLimit?: number;
72
+ permissionOverwrites?: any[];
73
+ parent?: string | null;
74
+ }): Promise<any>;
75
+ /**
76
+ * Set channel positions
77
+ */
78
+ setPositions(positions: Array<{
79
+ channel: string;
80
+ position: number;
81
+ parent?: string | null;
82
+ }>): Promise<void>;
83
+ }
84
+ /**
85
+ * Global channel manager for the client
86
+ */
87
+ export declare class ChannelManager extends CachedManager<string, any> {
88
+ constructor(client: any, iterable?: Iterable<any>);
89
+ _add(data: any, cache?: boolean): any;
90
+ fetch(id: string, options?: {
91
+ cache?: boolean;
92
+ force?: boolean;
93
+ }): Promise<any>;
94
+ }
95
+ export default GuildChannelManager;
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ /**
3
+ * Manager for channels with caching and lazy loading
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ChannelManager = exports.GuildChannelManager = exports.ChannelType = void 0;
7
+ const BaseManager_1 = require("./BaseManager");
8
+ const Collection_1 = require("../utils/Collection");
9
+ /** Channel types */
10
+ var ChannelType;
11
+ (function (ChannelType) {
12
+ ChannelType[ChannelType["GuildText"] = 0] = "GuildText";
13
+ ChannelType[ChannelType["DM"] = 1] = "DM";
14
+ ChannelType[ChannelType["GuildVoice"] = 2] = "GuildVoice";
15
+ ChannelType[ChannelType["GroupDM"] = 3] = "GroupDM";
16
+ ChannelType[ChannelType["GuildCategory"] = 4] = "GuildCategory";
17
+ ChannelType[ChannelType["GuildAnnouncement"] = 5] = "GuildAnnouncement";
18
+ ChannelType[ChannelType["GuildStageVoice"] = 13] = "GuildStageVoice";
19
+ ChannelType[ChannelType["GuildDirectory"] = 14] = "GuildDirectory";
20
+ ChannelType[ChannelType["GuildForum"] = 15] = "GuildForum";
21
+ })(ChannelType || (exports.ChannelType = ChannelType = {}));
22
+ /**
23
+ * Manages channels for a guild
24
+ */
25
+ class GuildChannelManager extends BaseManager_1.CachedManager {
26
+ /** The guild this manager belongs to */
27
+ guild;
28
+ constructor(guild, iterable) {
29
+ super(guild.client, Object, iterable);
30
+ this.guild = guild;
31
+ }
32
+ /**
33
+ * Add a channel to the cache
34
+ */
35
+ _add(data, cache = true) {
36
+ const id = data.id;
37
+ const existing = this.cache.get(id);
38
+ if (existing) {
39
+ if (cache)
40
+ Object.assign(existing, data);
41
+ return existing;
42
+ }
43
+ const channel = {
44
+ id,
45
+ guildId: this.guild.id,
46
+ name: data.name,
47
+ type: data.type,
48
+ position: data.position ?? 0,
49
+ parentId: data.parent_id ?? null,
50
+ permissionOverwrites: data.permission_overwrites ?? [],
51
+ topic: data.topic ?? null,
52
+ nsfw: data.nsfw ?? false,
53
+ rateLimitPerUser: data.rate_limit_per_user ?? 0,
54
+ bitrate: data.bitrate,
55
+ userLimit: data.user_limit,
56
+ get isText() { return [ChannelType.GuildText, ChannelType.GuildAnnouncement].includes(this.type); },
57
+ get isVoice() { return [ChannelType.GuildVoice, ChannelType.GuildStageVoice].includes(this.type); },
58
+ get isCategory() { return this.type === ChannelType.GuildCategory; },
59
+ toString() { return `<#${this.id}>`; },
60
+ async send(content) {
61
+ return this.guild.client.rest.request('POST', `/channels/${this.id}/messages`, typeof content === 'string' ? { content } : content);
62
+ },
63
+ async delete(reason) {
64
+ return this.guild.client.rest.request('DELETE', `/channels/${this.id}`, reason ? { reason } : undefined);
65
+ },
66
+ async edit(data) {
67
+ return this.guild.client.rest.request('PATCH', `/channels/${this.id}`, data);
68
+ },
69
+ };
70
+ if (cache)
71
+ this.cache.set(id, channel);
72
+ return channel;
73
+ }
74
+ /**
75
+ * Fetch a channel from the API
76
+ */
77
+ async fetch(id, options) {
78
+ if (!options?.force) {
79
+ const existing = this.cache.get(id);
80
+ if (existing)
81
+ return existing;
82
+ }
83
+ const data = await this.client.rest.request('GET', `/channels/${id}`);
84
+ return this._add(data, options?.cache ?? true);
85
+ }
86
+ /**
87
+ * Fetch all channels for the guild
88
+ */
89
+ async fetchAll() {
90
+ const data = await this.client.rest.request('GET', `/guilds/${this.guild.id}/channels`);
91
+ const channels = new Collection_1.Collection();
92
+ for (const channelData of data) {
93
+ const channel = this._add(channelData);
94
+ channels.set(channel.id, channel);
95
+ }
96
+ return channels;
97
+ }
98
+ /**
99
+ * Create a new channel
100
+ */
101
+ async create(options) {
102
+ const body = {
103
+ name: options.name,
104
+ type: options.type ?? ChannelType.GuildText,
105
+ };
106
+ if (options.topic)
107
+ body.topic = options.topic;
108
+ if (options.bitrate)
109
+ body.bitrate = options.bitrate;
110
+ if (options.userLimit)
111
+ body.user_limit = options.userLimit;
112
+ if (options.rateLimitPerUser)
113
+ body.rate_limit_per_user = options.rateLimitPerUser;
114
+ if (options.position !== undefined)
115
+ body.position = options.position;
116
+ if (options.permissionOverwrites)
117
+ body.permission_overwrites = options.permissionOverwrites;
118
+ if (options.parent)
119
+ body.parent_id = options.parent;
120
+ if (options.nsfw !== undefined)
121
+ body.nsfw = options.nsfw;
122
+ const data = await this.client.rest.request('POST', `/guilds/${this.guild.id}/channels`, body);
123
+ return this._add(data);
124
+ }
125
+ /**
126
+ * Delete a channel
127
+ */
128
+ async delete(id, reason) {
129
+ await this.client.rest.request('DELETE', `/channels/${id}`, reason ? { reason } : undefined);
130
+ this.cache.delete(id);
131
+ }
132
+ /**
133
+ * Edit a channel
134
+ */
135
+ async edit(id, data) {
136
+ const body = {};
137
+ if (data.name)
138
+ body.name = data.name;
139
+ if (data.type !== undefined)
140
+ body.type = data.type;
141
+ if (data.position !== undefined)
142
+ body.position = data.position;
143
+ if (data.topic !== undefined)
144
+ body.topic = data.topic;
145
+ if (data.nsfw !== undefined)
146
+ body.nsfw = data.nsfw;
147
+ if (data.rateLimitPerUser !== undefined)
148
+ body.rate_limit_per_user = data.rateLimitPerUser;
149
+ if (data.bitrate !== undefined)
150
+ body.bitrate = data.bitrate;
151
+ if (data.userLimit !== undefined)
152
+ body.user_limit = data.userLimit;
153
+ if (data.permissionOverwrites)
154
+ body.permission_overwrites = data.permissionOverwrites;
155
+ if (data.parent !== undefined)
156
+ body.parent_id = data.parent;
157
+ const result = await this.client.rest.request('PATCH', `/channels/${id}`, body);
158
+ return this._add(result);
159
+ }
160
+ /**
161
+ * Set channel positions
162
+ */
163
+ async setPositions(positions) {
164
+ const body = positions.map(p => ({
165
+ id: p.channel,
166
+ position: p.position,
167
+ parent_id: p.parent,
168
+ }));
169
+ await this.client.rest.request('PATCH', `/guilds/${this.guild.id}/channels`, body);
170
+ }
171
+ }
172
+ exports.GuildChannelManager = GuildChannelManager;
173
+ /**
174
+ * Global channel manager for the client
175
+ */
176
+ class ChannelManager extends BaseManager_1.CachedManager {
177
+ constructor(client, iterable) {
178
+ super(client, Object, iterable);
179
+ }
180
+ _add(data, cache = true) {
181
+ const id = data.id;
182
+ const existing = this.cache.get(id);
183
+ if (existing) {
184
+ if (cache)
185
+ Object.assign(existing, data);
186
+ return existing;
187
+ }
188
+ const channel = { ...data, id };
189
+ if (cache)
190
+ this.cache.set(id, channel);
191
+ return channel;
192
+ }
193
+ async fetch(id, options) {
194
+ if (!options?.force) {
195
+ const existing = this.cache.get(id);
196
+ if (existing)
197
+ return existing;
198
+ }
199
+ const data = await this.client.rest.request('GET', `/channels/${id}`);
200
+ return this._add(data, options?.cache ?? true);
201
+ }
202
+ }
203
+ exports.ChannelManager = ChannelManager;
204
+ exports.default = GuildChannelManager;
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhbm5lbE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFuYWdlcnMvQ2hhbm5lbE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCwrQ0FBOEM7QUFDOUMsb0RBQWlEO0FBRWpELG9CQUFvQjtBQUNwQixJQUFZLFdBVVg7QUFWRCxXQUFZLFdBQVc7SUFDckIsdURBQWEsQ0FBQTtJQUNiLHlDQUFNLENBQUE7SUFDTix5REFBYyxDQUFBO0lBQ2QsbURBQVcsQ0FBQTtJQUNYLCtEQUFpQixDQUFBO0lBQ2pCLHVFQUFxQixDQUFBO0lBQ3JCLG9FQUFvQixDQUFBO0lBQ3BCLGtFQUFtQixDQUFBO0lBQ25CLDBEQUFlLENBQUE7QUFDakIsQ0FBQyxFQVZXLFdBQVcsMkJBQVgsV0FBVyxRQVV0QjtBQUVEOztHQUVHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSwyQkFBMEI7SUFDakUsd0NBQXdDO0lBQ3hCLEtBQUssQ0FBTTtJQUUzQixZQUFZLEtBQVUsRUFBRSxRQUF3QjtRQUM5QyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLElBQVMsRUFBRSxLQUFLLEdBQUcsSUFBSTtRQUMxQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLEtBQUs7Z0JBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE1B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O1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxPQUE4QztRQUNwRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLElBQUksUUFBUTtnQkFBRSxPQUFPLFFBQVEsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztDQUNGO0FBMUJELHdDQTBCQztBQUVELGtCQUFlLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW5hZ2VyIGZvciBjaGFubmVscyB3aXRoIGNhY2hpbmcgYW5kIGxhenkgbG9hZGluZ1xuICovXG5cbmltcG9ydCB7IENhY2hlZE1hbmFnZXIgfSBmcm9tICcuL0Jhc2VNYW5hZ2VyJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9Db2xsZWN0aW9uJztcblxuLyoqIENoYW5uZWwgdHlwZXMgKi9cbmV4cG9ydCBlbnVtIENoYW5uZWxUeXBlIHtcbiAgR3VpbGRUZXh0ID0gMCxcbiAgRE0gPSAxLFxuICBHdWlsZFZvaWNlID0gMixcbiAgR3JvdXBETSA9IDMsXG4gIEd1aWxkQ2F0ZWdvcnkgPSA0LFxuICBHdWlsZEFubm91bmNlbWVudCA9IDUsXG4gIEd1aWxkU3RhZ2VWb2ljZSA9IDEzLFxuICBHdWlsZERpcmVjdG9yeSA9IDE0LFxuICBHdWlsZEZvcnVtID0gMTUsXG59XG5cbi8qKlxuICogTWFuYWdlcyBjaGFubmVscyBmb3IgYSBndWlsZFxuICovXG5leHBvcnQgY2xhc3MgR3VpbGRDaGFubmVsTWFuYWdlciBleHRlbmRzIENhY2hlZE1hbmFnZXI8c3RyaW5nLCBhbnk+IHtcbiAgLyoqIFRoZSBndWlsZCB0aGlzIG1hbmFnZXIgYmVsb25ncyB0byAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3VpbGQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihndWlsZDogYW55LCBpdGVyYWJsZT86IEl0ZXJhYmxlPGFueT4pIHtcbiAgICBzdXBlcihndWlsZC5jbGllbnQsIE9iamVjdCBhcyBhbnksIGl0ZXJhYmxlKTtcbiAgICB0aGlzLmd1aWxkID0gZ3VpbGQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY2hhbm5lbCB0byB0aGUgY2FjaGVcbiAgICovXG4gIF9hZGQoZGF0YTogYW55LCBjYWNoZSA9IHRydWUpOiBhbnkge1xuICAgIGNvbnN0IGlkID0gZGF0YS5pZDtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuY2FjaGUuZ2V0KGlkKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGlmIChjYWNoZSkgT2JqZWN0LmFzc2lnbihleGlzdGluZywgZGF0YSk7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGNoYW5uZWwgPSB7XG4gICAgICBpZCxcbiAgICAgIGd1aWxkSWQ6IHRoaXMuZ3VpbGQuaWQsXG4gICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgICBwb3NpdGlvbjogZGF0YS5wb3NpdGlvbiA/PyAwLFxuICAgICAgcGFyZW50SWQ6IGRhdGEucGFyZW50X2lkID8/IG51bGwsXG4gICAgICBwZXJtaXNzaW9uT3ZlcndyaXRlczogZGF0YS5wZXJtaXNzaW9uX292ZXJ3cml0ZXMgPz8gW10sXG4gICAgICB0b3BpYzogZGF0YS50b3BpYyA/PyBudWxsLFxuICAgICAgbnNmdzogZGF0YS5uc2Z3ID8/IGZhbHNlLFxuICAgICAgcmF0ZUxpbWl0UGVyVXNlcjogZGF0YS5yYXRlX2xpbWl0X3Blcl91c2VyID8/IDAsXG4gICAgICBiaXRyYXRlOiBkYXRhLmJpdHJhdGUsXG4gICAgICB1c2VyTGltaXQ6IGRhdGEudXNlcl9saW1pdCxcbiAgICAgIFxuICAgICAgZ2V0IGlzVGV4dCgpIHsgcmV0dXJuIFtDaGFubmVsVHlwZS5HdWlsZFRleHQsIENoYW5uZWxUeXBlLkd1aWxkQW5ub3VuY2VtZW50XS5pbmNsdWRlcyh0aGlzLnR5cGUpOyB9LFxuICAgICAgZ2V0IGlzVm9pY2UoKSB7IHJldHVybiBbQ2hhbm5lbFR5cGUuR3VpbGRWb2ljZSwgQ2hhbm5lbFR5cGUuR3VpbGRTdGFnZVZvaWNlXS5pbmNsdWRlcyh0aGlzLnR5cGUpOyB9LFxuICAgICAgZ2V0IGlzQ2F0ZWdvcnkoKSB7IHJldHVybiB0aGlzLnR5cGUgPT09IENoYW5uZWxUeXBlLkd1aWxkQ2F0ZWdvcnk7IH0sXG4gICAgICBcbiAgICAgIHRvU3RyaW5nKCkgeyByZXR1cm4gYDwjJHt0aGlzLmlkfT5gOyB9LFxuICAgICAgXG4gICAgICBhc3luYyBzZW5kKGNvbnRlbnQ6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ndWlsZC5jbGllbnQucmVzdC5yZXF1ZXN0KCdQT1NUJywgYC9jaGFubmVscy8ke3RoaXMuaWR9L21lc3NhZ2VzYCwgXG4gICAgICAgICAgdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8geyBjb250ZW50IH0gOiBjb250ZW50XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgXG4gICAgICBhc3luYyBkZWxldGUocmVhc29uPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmd1aWxkLmNsaWVudC5yZXN0LnJlcXVlc3QoJ0RFTEVURScsIGAvY2hhbm5lbHMvJHt0aGlzLmlkfWAsIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpO1xuICAgICAgfSxcbiAgICAgIFxuICAgICAgYXN5bmMgZWRpdChkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3VpbGQuY2xpZW50LnJlc3QucmVxdWVzdCgnUEFUQ0gnLCBgL2NoYW5uZWxzLyR7dGhpcy5pZH1gLCBkYXRhKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBcbiAgICBpZiAoY2FjaGUpIHRoaXMuY2FjaGUuc2V0KGlkLCBjaGFubmVsKTtcbiAgICByZXR1cm4gY2hhbm5lbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhIGNoYW5uZWwgZnJvbSB0aGUgQVBJXG4gICAqL1xuICBhc3luYyBmZXRjaChpZDogc3RyaW5nLCBvcHRpb25zPzogeyBjYWNoZT86IGJvb2xlYW47IGZvcmNlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIW9wdGlvbnM/LmZvcmNlKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuY2FjaGUuZ2V0KGlkKTtcbiAgICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KCdHRVQnLCBgL2NoYW5uZWxzLyR7aWR9YCk7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChkYXRhLCBvcHRpb25zPy5jYWNoZSA/PyB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgY2hhbm5lbHMgZm9yIHRoZSBndWlsZFxuICAgKi9cbiAgYXN5bmMgZmV0Y2hBbGwoKTogUHJvbWlzZTxDb2xsZWN0aW9uPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoJ0dFVCcsIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vY2hhbm5lbHNgKTtcbiAgICBjb25zdCBjaGFubmVscyA9IG5ldyBDb2xsZWN0aW9uPHN0cmluZywgYW55PigpO1xuICAgIGZvciAoY29uc3QgY2hhbm5lbERhdGEgb2YgZGF0YSkge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IHRoaXMuX2FkZChjaGFubmVsRGF0YSk7XG4gICAgICBjaGFubmVscy5zZXQoY2hhbm5lbC5pZCwgY2hhbm5lbCk7XG4gICAgfVxuICAgIHJldHVybiBjaGFubmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgY2hhbm5lbFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZT86IENoYW5uZWxUeXBlO1xuICAgIHRvcGljPzogc3RyaW5nO1xuICAgIGJpdHJhdGU/OiBudW1iZXI7XG4gICAgdXNlckxpbWl0PzogbnVtYmVyO1xuICAgIHJhdGVMaW1pdFBlclVzZXI/OiBudW1iZXI7XG4gICAgcG9zaXRpb24/OiBudW1iZXI7XG4gICAgcGVybWlzc2lvbk92ZXJ3cml0ZXM/OiBhbnlbXTtcbiAgICBwYXJlbnQ/OiBzdHJpbmc7XG4gICAgbnNmdz86IGJvb2xlYW47XG4gICAgcmVhc29uPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBib2R5OiBhbnkgPSB7XG4gICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICB0eXBlOiBvcHRpb25zLnR5cGUgPz8gQ2hhbm5lbFR5cGUuR3VpbGRUZXh0LFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMudG9waWMpIGJvZHkudG9waWMgPSBvcHRpb25zLnRvcGljO1xuICAgIGlmIChvcHRpb25zLmJpdHJhdGUpIGJvZHkuYml0cmF0ZSA9IG9wdGlvbnMuYml0cmF0ZTtcbiAgICBpZiAob3B0aW9ucy51c2VyTGltaXQpIGJvZHkudXNlcl9saW1pdCA9IG9wdGlvbnMudXNlckxpbWl0O1xuICAgIGlmIChvcHRpb25zLnJhdGVMaW1pdFBlclVzZXIpIGJvZHkucmF0ZV9saW1pdF9wZXJfdXNlciA9IG9wdGlvbnMucmF0ZUxpbWl0UGVyVXNlcjtcbiAgICBpZiAob3B0aW9ucy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSBib2R5LnBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbjtcbiAgICBpZiAob3B0aW9ucy5wZXJtaXNzaW9uT3ZlcndyaXRlcykgYm9keS5wZXJtaXNzaW9uX292ZXJ3cml0ZXMgPSBvcHRpb25zLnBlcm1pc3Npb25PdmVyd3JpdGVzO1xuICAgIGlmIChvcHRpb25zLnBhcmVudCkgYm9keS5wYXJlbnRfaWQgPSBvcHRpb25zLnBhcmVudDtcbiAgICBpZiAob3B0aW9ucy5uc2Z3ICE9PSB1bmRlZmluZWQpIGJvZHkubnNmdyA9IG9wdGlvbnMubnNmdztcbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KCdQT1NUJywgYC9ndWlsZHMvJHt0aGlzLmd1aWxkLmlkfS9jaGFubmVsc2AsIGJvZHkpO1xuICAgIHJldHVybiB0aGlzLl9hZGQoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGEgY2hhbm5lbFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlc3QucmVxdWVzdCgnREVMRVRFJywgYC9jaGFubmVscy8ke2lkfWAsIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpO1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IGEgY2hhbm5lbFxuICAgKi9cbiAgYXN5bmMgZWRpdChpZDogc3RyaW5nLCBkYXRhOiB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB0eXBlPzogQ2hhbm5lbFR5cGU7XG4gICAgcG9zaXRpb24/OiBudW1iZXI7XG4gICAgdG9waWM/OiBzdHJpbmc7XG4gICAgbnNmdz86IGJvb2xlYW47XG4gICAgcmF0ZUxpbWl0UGVyVXNlcj86IG51bWJlcjtcbiAgICBiaXRyYXRlPzogbnVtYmVyO1xuICAgIHVzZXJMaW1pdD86IG51bWJlcjtcbiAgICBwZXJtaXNzaW9uT3ZlcndyaXRlcz86IGFueVtdO1xuICAgIHBhcmVudD86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGJvZHk6IGFueSA9IHt9O1xuICAgIGlmIChkYXRhLm5hbWUpIGJvZHkubmFtZSA9IGRhdGEubmFtZTtcbiAgICBpZiAoZGF0YS50eXBlICE9PSB1bmRlZmluZWQpIGJvZHkudHlwZSA9IGRhdGEudHlwZTtcbiAgICBpZiAoZGF0YS5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSBib2R5LnBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjtcbiAgICBpZiAoZGF0YS50b3BpYyAhPT0gdW5kZWZpbmVkKSBib2R5LnRvcGljID0gZGF0YS50b3BpYztcbiAgICBpZiAoZGF0YS5uc2Z3ICE9PSB1bmRlZmluZWQpIGJvZHkubnNmdyA9IGRhdGEubnNmdztcbiAgICBpZiAoZGF0YS5yYXRlTGltaXRQZXJVc2VyICE9PSB1bmRlZmluZWQpIGJvZHkucmF0ZV9saW1pdF9wZXJfdXNlciA9IGRhdGEucmF0ZUxpbWl0UGVyVXNlcjtcbiAgICBpZiAoZGF0YS5iaXRyYXRlICE9PSB1bmRlZmluZWQpIGJvZHkuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZTtcbiAgICBpZiAoZGF0YS51c2VyTGltaXQgIT09IHVuZGVmaW5lZCkgYm9keS51c2VyX2xpbWl0ID0gZGF0YS51c2VyTGltaXQ7XG4gICAgaWYgKGRhdGEucGVybWlzc2lvbk92ZXJ3cml0ZXMpIGJvZHkucGVybWlzc2lvbl9vdmVyd3JpdGVzID0gZGF0YS5wZXJtaXNzaW9uT3ZlcndyaXRlcztcbiAgICBpZiAoZGF0YS5wYXJlbnQgIT09IHVuZGVmaW5lZCkgYm9keS5wYXJlbnRfaWQgPSBkYXRhLnBhcmVudDtcbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoJ1BBVENIJywgYC9jaGFubmVscy8ke2lkfWAsIGJvZHkpO1xuICAgIHJldHVybiB0aGlzLl9hZGQocmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY2hhbm5lbCBwb3NpdGlvbnNcbiAgICovXG4gIGFzeW5jIHNldFBvc2l0aW9ucyhwb3NpdGlvbnM6IEFycmF5PHsgY2hhbm5lbDogc3RyaW5nOyBwb3NpdGlvbjogbnVtYmVyOyBwYXJlbnQ/OiBzdHJpbmcgfCBudWxsIH0+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYm9keSA9IHBvc2l0aW9ucy5tYXAocCA9PiAoe1xuICAgICAgaWQ6IHAuY2hhbm5lbCxcbiAgICAgIHBvc2l0aW9uOiBwLnBvc2l0aW9uLFxuICAgICAgcGFyZW50X2lkOiBwLnBhcmVudCxcbiAgICB9KSk7XG4gICAgYXdhaXQgdGhpcy5jbGllbnQucmVzdC5yZXF1ZXN0KCdQQVRDSCcsIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vY2hhbm5lbHNgLCBib2R5KTtcbiAgfVxufVxuXG4vKipcbiAqIEdsb2JhbCBjaGFubmVsIG1hbmFnZXIgZm9yIHRoZSBjbGllbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENoYW5uZWxNYW5hZ2VyIGV4dGVuZHMgQ2FjaGVkTWFuYWdlcjxzdHJpbmcsIGFueT4ge1xuICBjb25zdHJ1Y3RvcihjbGllbnQ6IGFueSwgaXRlcmFibGU/OiBJdGVyYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIoY2xpZW50LCBPYmplY3QgYXMgYW55LCBpdGVyYWJsZSk7XG4gIH1cblxuICBfYWRkKGRhdGE6IGFueSwgY2FjaGUgPSB0cnVlKTogYW55IHtcbiAgICBjb25zdCBpZCA9IGRhdGEuaWQ7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNhY2hlLmdldChpZCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBpZiAoY2FjaGUpIE9iamVjdC5hc3NpZ24oZXhpc3RpbmcsIGRhdGEpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBjaGFubmVsID0geyAuLi5kYXRhLCBpZCB9O1xuICAgIGlmIChjYWNoZSkgdGhpcy5jYWNoZS5zZXQoaWQsIGNoYW5uZWwpO1xuICAgIHJldHVybiBjaGFubmVsO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2goaWQ6IHN0cmluZywgb3B0aW9ucz86IHsgY2FjaGU/OiBib29sZWFuOyBmb3JjZT86IGJvb2xlYW4gfSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCFvcHRpb25zPy5mb3JjZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNhY2hlLmdldChpZCk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY2xpZW50LnJlc3QucmVxdWVzdCgnR0VUJywgYC9jaGFubmVscy8ke2lkfWApO1xuICAgIHJldHVybiB0aGlzLl9hZGQoZGF0YSwgb3B0aW9ucz8uY2FjaGUgPz8gdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3VpbGRDaGFubmVsTWFuYWdlcjtcbiJdfQ==
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Manager for guild members with caching and lazy loading
3
+ */
4
+ import { CachedManager } from './BaseManager';
5
+ import { Collection } from '../utils/Collection';
6
+ /**
7
+ * Manages guild members
8
+ */
9
+ export declare class GuildMemberManager extends CachedManager<string, any> {
10
+ /** The guild this manager belongs to */
11
+ readonly guild: any;
12
+ constructor(guild: any, iterable?: Iterable<any>);
13
+ /**
14
+ * Add a member to the cache
15
+ */
16
+ _add(data: any, cache?: boolean): any;
17
+ /**
18
+ * Fetch a member from the API
19
+ */
20
+ fetch(id: string, options?: {
21
+ cache?: boolean;
22
+ force?: boolean;
23
+ }): Promise<any>;
24
+ /**
25
+ * Fetch multiple members
26
+ */
27
+ fetchMany(options?: {
28
+ limit?: number;
29
+ after?: string;
30
+ query?: string;
31
+ }): Promise<Collection<string, any>>;
32
+ /**
33
+ * Search for members by query
34
+ */
35
+ search(options: {
36
+ query: string;
37
+ limit?: number;
38
+ }): Promise<Collection<string, any>>;
39
+ /**
40
+ * Kick a member
41
+ */
42
+ kick(id: string, reason?: string): Promise<void>;
43
+ /**
44
+ * Ban a member
45
+ */
46
+ ban(id: string, options?: {
47
+ deleteMessageDays?: number;
48
+ reason?: string;
49
+ }): Promise<void>;
50
+ /**
51
+ * Unban a user
52
+ */
53
+ unban(id: string, reason?: string): Promise<void>;
54
+ /**
55
+ * Edit a member
56
+ */
57
+ edit(id: string, data: {
58
+ nick?: string | null;
59
+ roles?: string[];
60
+ mute?: boolean;
61
+ deaf?: boolean;
62
+ channel_id?: string | null;
63
+ communication_disabled_until?: Date | null;
64
+ }): Promise<any>;
65
+ /**
66
+ * Add a role to a member
67
+ */
68
+ addRole(memberId: string, roleId: string, reason?: string): Promise<void>;
69
+ /**
70
+ * Remove a role from a member
71
+ */
72
+ removeRole(memberId: string, roleId: string, reason?: string): Promise<void>;
73
+ }
74
+ export default GuildMemberManager;
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * Manager for guild members with caching and lazy loading
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GuildMemberManager = void 0;
7
+ const BaseManager_1 = require("./BaseManager");
8
+ const Collection_1 = require("../utils/Collection");
9
+ const GuildMember_1 = require("../structures/GuildMember");
10
+ /**
11
+ * Manages guild members
12
+ */
13
+ class GuildMemberManager extends BaseManager_1.CachedManager {
14
+ /** The guild this manager belongs to */
15
+ guild;
16
+ constructor(guild, iterable) {
17
+ // Use a simple object as placeholder since we don't have GuildMember class yet
18
+ super(guild.client, Object, iterable);
19
+ this.guild = guild;
20
+ }
21
+ /**
22
+ * Add a member to the cache
23
+ */
24
+ _add(data, cache = true) {
25
+ const id = data.user?.id ?? data.id;
26
+ const existing = this.cache.get(id);
27
+ if (existing) {
28
+ if (cache) {
29
+ Object.assign(existing, data);
30
+ }
31
+ return existing;
32
+ }
33
+ const member = {
34
+ id,
35
+ guildId: this.guild.id,
36
+ user: data.user,
37
+ nick: data.nick,
38
+ roles: data.roles ?? [],
39
+ joinedAt: data.joined_at ? new Date(data.joined_at) : null,
40
+ premiumSince: data.premium_since ? new Date(data.premium_since) : null,
41
+ deaf: data.deaf ?? false,
42
+ mute: data.mute ?? false,
43
+ pending: data.pending ?? false,
44
+ permissions: new GuildMember_1.Permissions(data.permissions || '0', this.guild.ownerId === id),
45
+ communicationDisabledUntil: data.communication_disabled_until
46
+ ? new Date(data.communication_disabled_until)
47
+ : null,
48
+ // Helper methods
49
+ get displayName() {
50
+ return this.nick ?? this.user?.display_name ?? this.user?.username ?? 'Unknown';
51
+ },
52
+ toString() {
53
+ return `<@${this.id}>`;
54
+ },
55
+ };
56
+ if (cache) {
57
+ this.cache.set(id, member);
58
+ }
59
+ return member;
60
+ }
61
+ /**
62
+ * Fetch a member from the API
63
+ */
64
+ async fetch(id, options) {
65
+ if (!options?.force) {
66
+ const existing = this.cache.get(id);
67
+ if (existing)
68
+ return existing;
69
+ }
70
+ const data = await this.client.rest.request('GET', `/guilds/${this.guild.id}/members/${id}`);
71
+ return this._add(data, options?.cache ?? true);
72
+ }
73
+ /**
74
+ * Fetch multiple members
75
+ */
76
+ async fetchMany(options) {
77
+ const params = new URLSearchParams();
78
+ if (options?.limit)
79
+ params.set('limit', String(options.limit));
80
+ if (options?.after)
81
+ params.set('after', options.after);
82
+ if (options?.query)
83
+ params.set('query', options.query);
84
+ const data = await this.client.rest.request('GET', `/guilds/${this.guild.id}/members?${params}`);
85
+ const members = new Collection_1.Collection();
86
+ for (const memberData of data) {
87
+ const member = this._add(memberData);
88
+ members.set(member.id, member);
89
+ }
90
+ return members;
91
+ }
92
+ /**
93
+ * Search for members by query
94
+ */
95
+ async search(options) {
96
+ return this.fetchMany({ query: options.query, limit: options.limit ?? 10 });
97
+ }
98
+ /**
99
+ * Kick a member
100
+ */
101
+ async kick(id, reason) {
102
+ await this.client.rest.request('DELETE', `/guilds/${this.guild.id}/members/${id}`, reason ? { reason } : undefined);
103
+ this.cache.delete(id);
104
+ }
105
+ /**
106
+ * Ban a member
107
+ */
108
+ async ban(id, options) {
109
+ await this.client.rest.request('PUT', `/guilds/${this.guild.id}/bans/${id}`, {
110
+ delete_message_days: options?.deleteMessageDays,
111
+ reason: options?.reason,
112
+ });
113
+ this.cache.delete(id);
114
+ }
115
+ /**
116
+ * Unban a user
117
+ */
118
+ async unban(id, reason) {
119
+ await this.client.rest.request('DELETE', `/guilds/${this.guild.id}/bans/${id}`, reason ? { reason } : undefined);
120
+ }
121
+ /**
122
+ * Edit a member
123
+ */
124
+ async edit(id, data) {
125
+ const body = {};
126
+ if (data.nick !== undefined)
127
+ body.nick = data.nick;
128
+ if (data.roles !== undefined)
129
+ body.roles = data.roles;
130
+ if (data.mute !== undefined)
131
+ body.mute = data.mute;
132
+ if (data.deaf !== undefined)
133
+ body.deaf = data.deaf;
134
+ if (data.channel_id !== undefined)
135
+ body.channel_id = data.channel_id;
136
+ if (data.communication_disabled_until !== undefined) {
137
+ body.communication_disabled_until = data.communication_disabled_until?.toISOString() ?? null;
138
+ }
139
+ const result = await this.client.rest.request('PATCH', `/guilds/${this.guild.id}/members/${id}`, body);
140
+ return this._add(result);
141
+ }
142
+ /**
143
+ * Add a role to a member
144
+ */
145
+ async addRole(memberId, roleId, reason) {
146
+ await this.client.rest.request('PUT', `/guilds/${this.guild.id}/members/${memberId}/roles/${roleId}`, reason ? { reason } : undefined);
147
+ }
148
+ /**
149
+ * Remove a role from a member
150
+ */
151
+ async removeRole(memberId, roleId, reason) {
152
+ await this.client.rest.request('DELETE', `/guilds/${this.guild.id}/members/${memberId}/roles/${roleId}`, reason ? { reason } : undefined);
153
+ }
154
+ }
155
+ exports.GuildMemberManager = GuildMemberManager;
156
+ exports.default = GuildMemberManager;
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpbGRNZW1iZXJNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21hbmFnZXJzL0d1aWxkTWVtYmVyTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILCtDQUE4QztBQUM5QyxvREFBaUQ7QUFDakQsMkRBQXdEO0FBRXhEOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSwyQkFBMEI7SUFDaEUsd0NBQXdDO0lBQ3hCLEtBQUssQ0FBTTtJQUUzQixZQUFZLEtBQVUsRUFBRSxRQUF3QjtRQUM5QywrRUFBK0U7UUFDL0UsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxJQUFTLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDMUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHO1lBQ2IsRUFBRTtZQUNGLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxL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YW5kIGxhenkgbG9hZGluZ1xuICovXG5cbmltcG9ydCB7IENhY2hlZE1hbmFnZXIgfSBmcm9tICcuL0Jhc2VNYW5hZ2VyJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9Db2xsZWN0aW9uJztcbmltcG9ydCB7IFBlcm1pc3Npb25zIH0gZnJvbSAnLi4vc3RydWN0dXJlcy9HdWlsZE1lbWJlcic7XG5cbi8qKlxuICogTWFuYWdlcyBndWlsZCBtZW1iZXJzXG4gKi9cbmV4cG9ydCBjbGFzcyBHdWlsZE1lbWJlck1hbmFnZXIgZXh0ZW5kcyBDYWNoZWRNYW5hZ2VyPHN0cmluZywgYW55PiB7XG4gIC8qKiBUaGUgZ3VpbGQgdGhpcyBtYW5hZ2VyIGJlbG9uZ3MgdG8gKi9cbiAgcHVibGljIHJlYWRvbmx5IGd1aWxkOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoZ3VpbGQ6IGFueSwgaXRlcmFibGU/OiBJdGVyYWJsZTxhbnk+KSB7XG4gICAgLy8gVXNlIGEgc2ltcGxlIG9iamVjdCBhcyBwbGFjZWhvbGRlciBzaW5jZSB3ZSBkb24ndCBoYXZlIEd1aWxkTWVtYmVyIGNsYXNzIHlldFxuICAgIHN1cGVyKGd1aWxkLmNsaWVudCwgT2JqZWN0IGFzIGFueSwgaXRlcmFibGUpO1xuICAgIHRoaXMuZ3VpbGQgPSBndWlsZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBtZW1iZXIgdG8gdGhlIGNhY2hlXG4gICAqL1xuICBfYWRkKGRhdGE6IGFueSwgY2FjaGUgPSB0cnVlKTogYW55IHtcbiAgICBjb25zdCBpZCA9IGRhdGEudXNlcj8uaWQgPz8gZGF0YS5pZDtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuY2FjaGUuZ2V0KGlkKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGlmIChjYWNoZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKGV4aXN0aW5nLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgXG4gICAgY29uc3QgbWVtYmVyID0ge1xuICAgICAgaWQsXG4gICAgICBndWlsZElkOiB0aGlzLmd1aWxkLmlkLFxuICAgICAgdXNlcjogZGF0YS51c2VyLFxuICAgICAgbmljazogZGF0YS5uaWNrLFxuICAgICAgcm9sZXM6IGRhdGEucm9sZXMgPz8gW10sXG4gICAgICBqb2luZWRBdDogZGF0YS5qb2luZWRfYXQgPyBuZXcgRGF0ZShkYXRhLmpvaW5lZF9hdCkgOiBudWxsLFxuICAgICAgcHJlbWl1bVNpbmNlOiBkYXRhLnByZW1pdW1fc2luY2UgPyBuZXcgRGF0ZShkYXRhLnByZW1pdW1fc2luY2UpIDogbnVsbCxcbiAgICAgIGRlYWY6IGRhdGEuZGVhZiA/PyBmYWxzZSxcbiAgICAgIG11dGU6IGRhdGEubXV0ZSA/PyBmYWxzZSxcbiAgICAgIHBlbmRpbmc6IGRhdGEucGVuZGluZyA/PyBmYWxzZSxcbiAgICAgIHBlcm1pc3Npb25zOiBuZXcgUGVybWlzc2lvbnMoZGF0YS5wZXJtaXNzaW9ucyB8fCAnMCcsIHRoaXMuZ3VpbGQub3duZXJJZCA9PT0gaWQpLFxuICAgICAgY29tbXVuaWNhdGlvbkRpc2FibGVkVW50aWw6IGRhdGEuY29tbXVuaWNhdGlvbl9kaXNhYmxlZF91bnRpbCBcbiAgICAgICAgPyBuZXcgRGF0ZShkYXRhLmNvbW11bmljYXRpb25fZGlzYWJsZWRfdW50aWwpIFxuICAgICAgICA6IG51bGwsXG4gICAgICBcbiAgICAgIC8vIEhlbHBlciBtZXRob2RzXG4gICAgICBnZXQgZGlzcGxheU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5pY2sgPz8gdGhpcy51c2VyPy5kaXNwbGF5X25hbWUgPz8gdGhpcy51c2VyPy51c2VybmFtZSA/PyAnVW5rbm93bic7XG4gICAgICB9LFxuICAgICAgXG4gICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGA8QCR7dGhpcy5pZH0+YDtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBcbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KGlkLCBtZW1iZXIpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gbWVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgbWVtYmVyIGZyb20gdGhlIEFQSVxuICAgKi9cbiAgYXN5bmMgZmV0Y2goaWQ6IHN0cmluZywgb3B0aW9ucz86IHsgY2FjaGU/OiBib29sZWFuOyBmb3JjZT86IGJvb2xlYW4gfSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCFvcHRpb25zPy5mb3JjZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmNhY2hlLmdldChpZCk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY2xpZW50LnJlc3QucmVxdWVzdChcbiAgICAgICdHRVQnLFxuICAgICAgYC9ndWlsZHMvJHt0aGlzLmd1aWxkLmlkfS9tZW1iZXJzLyR7aWR9YFxuICAgICk7XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuX2FkZChkYXRhLCBvcHRpb25zPy5jYWNoZSA/PyB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBtdWx0aXBsZSBtZW1iZXJzXG4gICAqL1xuICBhc3luYyBmZXRjaE1hbnkob3B0aW9ucz86IHsgXG4gICAgbGltaXQ/OiBudW1iZXI7IFxuICAgIGFmdGVyPzogc3RyaW5nO1xuICAgIHF1ZXJ5Pzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxDb2xsZWN0aW9uPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0aW9ucz8ubGltaXQpIHBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKG9wdGlvbnMubGltaXQpKTtcbiAgICBpZiAob3B0aW9ucz8uYWZ0ZXIpIHBhcmFtcy5zZXQoJ2FmdGVyJywgb3B0aW9ucy5hZnRlcik7XG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5KSBwYXJhbXMuc2V0KCdxdWVyeScsIG9wdGlvbnMucXVlcnkpO1xuICAgIFxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoXG4gICAgICAnR0VUJyxcbiAgICAgIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vbWVtYmVycz8ke3BhcmFtc31gXG4gICAgKTtcbiAgICBcbiAgICBjb25zdCBtZW1iZXJzID0gbmV3IENvbGxlY3Rpb248c3RyaW5nLCBhbnk+KCk7XG4gICAgZm9yIChjb25zdCBtZW1iZXJEYXRhIG9mIGRhdGEpIHtcbiAgICAgIGNvbnN0IG1lbWJlciA9IHRoaXMuX2FkZChtZW1iZXJEYXRhKTtcbiAgICAgIG1lbWJlcnMuc2V0KG1lbWJlci5pZCwgbWVtYmVyKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG1lbWJlcnM7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBtZW1iZXJzIGJ5IHF1ZXJ5XG4gICAqL1xuICBhc3luYyBzZWFyY2gob3B0aW9uczogeyBxdWVyeTogc3RyaW5nOyBsaW1pdD86IG51bWJlciB9KTogUHJvbWlzZTxDb2xsZWN0aW9uPHN0cmluZywgYW55Pj4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoTWFueSh7IHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LCBsaW1pdDogb3B0aW9ucy5saW1pdCA/PyAxMCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLaWNrIGEgbWVtYmVyXG4gICAqL1xuICBhc3luYyBraWNrKGlkOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlc3QucmVxdWVzdChcbiAgICAgICdERUxFVEUnLFxuICAgICAgYC9ndWlsZHMvJHt0aGlzLmd1aWxkLmlkfS9tZW1iZXJzLyR7aWR9YCxcbiAgICAgIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWRcbiAgICApO1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCYW4gYSBtZW1iZXJcbiAgICovXG4gIGFzeW5jIGJhbihpZDogc3RyaW5nLCBvcHRpb25zPzogeyBkZWxldGVNZXNzYWdlRGF5cz86IG51bWJlcjsgcmVhc29uPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoXG4gICAgICAnUFVUJyxcbiAgICAgIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vYmFucy8ke2lkfWAsXG4gICAgICB7XG4gICAgICAgIGRlbGV0ZV9tZXNzYWdlX2RheXM6IG9wdGlvbnM/LmRlbGV0ZU1lc3NhZ2VEYXlzLFxuICAgICAgICByZWFzb246IG9wdGlvbnM/LnJlYXNvbixcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJhbiBhIHVzZXJcbiAgICovXG4gIGFzeW5jIHVuYmFuKGlkOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlc3QucmVxdWVzdChcbiAgICAgICdERUxFVEUnLFxuICAgICAgYC9ndWlsZHMvJHt0aGlzLmd1aWxkLmlkfS9iYW5zLyR7aWR9YCxcbiAgICAgIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXQgYSBtZW1iZXJcbiAgICovXG4gIGFzeW5jIGVkaXQoaWQ6IHN0cmluZywgZGF0YToge1xuICAgIG5pY2s/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJvbGVzPzogc3RyaW5nW107XG4gICAgbXV0ZT86IGJvb2xlYW47XG4gICAgZGVhZj86IGJvb2xlYW47XG4gICAgY2hhbm5lbF9pZD86IHN0cmluZyB8IG51bGw7XG4gICAgY29tbXVuaWNhdGlvbl9kaXNhYmxlZF91bnRpbD86IERhdGUgfCBudWxsO1xuICB9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBib2R5OiBhbnkgPSB7fTtcbiAgICBpZiAoZGF0YS5uaWNrICE9PSB1bmRlZmluZWQpIGJvZHkubmljayA9IGRhdGEubmljaztcbiAgICBpZiAoZGF0YS5yb2xlcyAhPT0gdW5kZWZpbmVkKSBib2R5LnJvbGVzID0gZGF0YS5yb2xlcztcbiAgICBpZiAoZGF0YS5tdXRlICE9PSB1bmRlZmluZWQpIGJvZHkubXV0ZSA9IGRhdGEubXV0ZTtcbiAgICBpZiAoZGF0YS5kZWFmICE9PSB1bmRlZmluZWQpIGJvZHkuZGVhZiA9IGRhdGEuZGVhZjtcbiAgICBpZiAoZGF0YS5jaGFubmVsX2lkICE9PSB1bmRlZmluZWQpIGJvZHkuY2hhbm5lbF9pZCA9IGRhdGEuY2hhbm5lbF9pZDtcbiAgICBpZiAoZGF0YS5jb21tdW5pY2F0aW9uX2Rpc2FibGVkX3VudGlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvZHkuY29tbXVuaWNhdGlvbl9kaXNhYmxlZF91bnRpbCA9IGRhdGEuY29tbXVuaWNhdGlvbl9kaXNhYmxlZF91bnRpbD8udG9JU09TdHJpbmcoKSA/PyBudWxsO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoXG4gICAgICAnUEFUQ0gnLFxuICAgICAgYC9ndWlsZHMvJHt0aGlzLmd1aWxkLmlkfS9tZW1iZXJzLyR7aWR9YCxcbiAgICAgIGJvZHlcbiAgICApO1xuICAgIFxuICAgIHJldHVybiB0aGlzLl9hZGQocmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSByb2xlIHRvIGEgbWVtYmVyXG4gICAqL1xuICBhc3luYyBhZGRSb2xlKG1lbWJlcklkOiBzdHJpbmcsIHJvbGVJZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoXG4gICAgICAnUFVUJyxcbiAgICAgIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vbWVtYmVycy8ke21lbWJlcklkfS9yb2xlcy8ke3JvbGVJZH1gLFxuICAgICAgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgcm9sZSBmcm9tIGEgbWVtYmVyXG4gICAqL1xuICBhc3luYyByZW1vdmVSb2xlKG1lbWJlcklkOiBzdHJpbmcsIHJvbGVJZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LnJlcXVlc3QoXG4gICAgICAnREVMRVRFJyxcbiAgICAgIGAvZ3VpbGRzLyR7dGhpcy5ndWlsZC5pZH0vbWVtYmVycy8ke21lbWJlcklkfS9yb2xlcy8ke3JvbGVJZH1gLFxuICAgICAgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3VpbGRNZW1iZXJNYW5hZ2VyO1xuIl19
@@ -0,0 +1,84 @@
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 declare class RoleManager extends CachedManager<string, any> {
10
+ /** The guild this manager belongs to */
11
+ readonly guild: any;
12
+ constructor(guild: any, iterable?: Iterable<any>);
13
+ /**
14
+ * Get the @everyone role
15
+ */
16
+ get everyone(): any;
17
+ /**
18
+ * Get the highest role
19
+ */
20
+ get highest(): any;
21
+ /**
22
+ * Get the bot's highest role
23
+ */
24
+ get botRoleFor(): (userId: string) => any | null;
25
+ /**
26
+ * Add a role to the cache
27
+ */
28
+ _add(data: any, cache?: boolean): any;
29
+ /**
30
+ * Fetch a role from the API
31
+ */
32
+ fetch(id: string, options?: {
33
+ cache?: boolean;
34
+ force?: boolean;
35
+ }): Promise<any>;
36
+ /**
37
+ * Fetch all roles for the guild
38
+ */
39
+ fetchAll(): Promise<Collection<string, any>>;
40
+ /**
41
+ * Create a new role
42
+ */
43
+ create(options?: {
44
+ name?: string;
45
+ color?: number | string;
46
+ hoist?: boolean;
47
+ position?: number;
48
+ permissions?: string | bigint;
49
+ mentionable?: boolean;
50
+ icon?: string;
51
+ unicodeEmoji?: string;
52
+ reason?: string;
53
+ }): Promise<any>;
54
+ /**
55
+ * Delete a role
56
+ */
57
+ delete(id: string, reason?: string): Promise<void>;
58
+ /**
59
+ * Edit a role
60
+ */
61
+ edit(id: string, data: {
62
+ name?: string;
63
+ color?: number | string;
64
+ hoist?: boolean;
65
+ position?: number;
66
+ permissions?: string | bigint;
67
+ mentionable?: boolean;
68
+ icon?: string | null;
69
+ unicodeEmoji?: string | null;
70
+ reason?: string;
71
+ }): Promise<any>;
72
+ /**
73
+ * Set role positions
74
+ */
75
+ setPositions(positions: Array<{
76
+ role: string;
77
+ position: number;
78
+ }>): Promise<Collection<string, any>>;
79
+ /**
80
+ * Compare two roles by position
81
+ */
82
+ comparePositions(role1: string | any, role2: string | any): number;
83
+ }
84
+ export default RoleManager;