@jubbio/core 1.0.0
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/LICENSE +21 -0
- package/README.md +166 -0
- package/dist/Client.d.ts +147 -0
- package/dist/Client.js +471 -0
- package/dist/builders/ActionRowBuilder.d.ts +53 -0
- package/dist/builders/ActionRowBuilder.js +68 -0
- package/dist/builders/ButtonBuilder.d.ts +77 -0
- package/dist/builders/ButtonBuilder.js +96 -0
- package/dist/builders/EmbedBuilder.d.ts +157 -0
- package/dist/builders/EmbedBuilder.js +199 -0
- package/dist/builders/ModalBuilder.d.ts +122 -0
- package/dist/builders/ModalBuilder.js +162 -0
- package/dist/builders/SelectMenuBuilder.d.ts +123 -0
- package/dist/builders/SelectMenuBuilder.js +165 -0
- package/dist/builders/SlashCommandBuilder.d.ts +197 -0
- package/dist/builders/SlashCommandBuilder.js +324 -0
- package/dist/builders/index.d.ts +9 -0
- package/dist/builders/index.js +26 -0
- package/dist/enums.d.ts +196 -0
- package/dist/enums.js +216 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +128 -0
- package/dist/managers/BaseManager.d.ts +69 -0
- package/dist/managers/BaseManager.js +106 -0
- package/dist/managers/ChannelManager.d.ts +98 -0
- package/dist/managers/ChannelManager.js +209 -0
- package/dist/managers/GuildMemberManager.d.ts +74 -0
- package/dist/managers/GuildMemberManager.js +156 -0
- package/dist/managers/RoleManager.d.ts +84 -0
- package/dist/managers/RoleManager.js +207 -0
- package/dist/managers/index.d.ts +7 -0
- package/dist/managers/index.js +24 -0
- package/dist/rest/REST.d.ts +483 -0
- package/dist/rest/REST.js +805 -0
- package/dist/rest/index.d.ts +1 -0
- package/dist/rest/index.js +18 -0
- package/dist/sharding/ShardingManager.d.ts +179 -0
- package/dist/sharding/ShardingManager.js +375 -0
- package/dist/sharding/index.d.ts +4 -0
- package/dist/sharding/index.js +21 -0
- package/dist/structures/Channel.d.ts +120 -0
- package/dist/structures/Channel.js +224 -0
- package/dist/structures/Collection.d.ts +53 -0
- package/dist/structures/Collection.js +115 -0
- package/dist/structures/Guild.d.ts +59 -0
- package/dist/structures/Guild.js +90 -0
- package/dist/structures/GuildMember.d.ts +130 -0
- package/dist/structures/GuildMember.js +208 -0
- package/dist/structures/Interaction.d.ts +224 -0
- package/dist/structures/Interaction.js +404 -0
- package/dist/structures/Message.d.ts +93 -0
- package/dist/structures/Message.js +145 -0
- package/dist/structures/User.d.ts +37 -0
- package/dist/structures/User.js +65 -0
- package/dist/structures/index.d.ts +7 -0
- package/dist/structures/index.js +25 -0
- package/dist/structures.d.ts +1 -0
- package/dist/structures.js +19 -0
- package/dist/types.d.ts +255 -0
- package/dist/types.js +3 -0
- package/dist/utils/BitField.d.ts +66 -0
- package/dist/utils/BitField.js +138 -0
- package/dist/utils/Collection.d.ts +116 -0
- package/dist/utils/Collection.js +265 -0
- package/dist/utils/Collector.d.ts +152 -0
- package/dist/utils/Collector.js +314 -0
- package/dist/utils/DataResolver.d.ts +61 -0
- package/dist/utils/DataResolver.js +146 -0
- package/dist/utils/Formatters.d.ts +145 -0
- package/dist/utils/Formatters.js +213 -0
- package/dist/utils/IntentsBitField.d.ts +85 -0
- package/dist/utils/IntentsBitField.js +99 -0
- package/dist/utils/Partials.d.ts +105 -0
- package/dist/utils/Partials.js +149 -0
- package/dist/utils/PermissionsBitField.d.ts +118 -0
- package/dist/utils/PermissionsBitField.js +145 -0
- package/dist/utils/SnowflakeUtil.d.ts +63 -0
- package/dist/utils/SnowflakeUtil.js +93 -0
- package/dist/utils/Sweepers.d.ts +127 -0
- package/dist/utils/Sweepers.js +270 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.js +30 -0
- package/package.json +37 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collectors for awaiting messages, reactions, and interactions
|
|
3
|
+
* API compatible with Discord.js Collectors
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { Collection } from './Collection';
|
|
7
|
+
export interface CollectorOptions<T> {
|
|
8
|
+
/** How long to run the collector for in milliseconds */
|
|
9
|
+
time?: number;
|
|
10
|
+
/** How long to wait for the next item in milliseconds */
|
|
11
|
+
idle?: number;
|
|
12
|
+
/** Maximum number of items to collect */
|
|
13
|
+
max?: number;
|
|
14
|
+
/** Maximum number of items to process */
|
|
15
|
+
maxProcessed?: number;
|
|
16
|
+
/** Filter function */
|
|
17
|
+
filter?: (item: T, collected: Collection<string, T>) => boolean | Promise<boolean>;
|
|
18
|
+
/** Whether to dispose of items when the collector ends */
|
|
19
|
+
dispose?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface CollectorResetTimerOptions {
|
|
22
|
+
time?: number;
|
|
23
|
+
idle?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Abstract base class for collectors
|
|
27
|
+
*/
|
|
28
|
+
export declare abstract class Collector<K extends string, V> extends EventEmitter {
|
|
29
|
+
/** The client that instantiated this collector */
|
|
30
|
+
readonly client: any;
|
|
31
|
+
/** The items collected */
|
|
32
|
+
readonly collected: Collection<K, V>;
|
|
33
|
+
/** Whether the collector has ended */
|
|
34
|
+
ended: boolean;
|
|
35
|
+
/** The reason the collector ended */
|
|
36
|
+
endReason: string | null;
|
|
37
|
+
/** Filter function */
|
|
38
|
+
filter: (item: V, collected: Collection<K, V>) => boolean | Promise<boolean>;
|
|
39
|
+
/** Collector options */
|
|
40
|
+
options: CollectorOptions<V>;
|
|
41
|
+
/** Number of items processed */
|
|
42
|
+
private _processedCount;
|
|
43
|
+
/** Timeout for time limit */
|
|
44
|
+
private _timeout;
|
|
45
|
+
/** Timeout for idle limit */
|
|
46
|
+
private _idleTimeout;
|
|
47
|
+
constructor(client: any, options?: CollectorOptions<V>);
|
|
48
|
+
/**
|
|
49
|
+
* Handle an item being collected
|
|
50
|
+
*/
|
|
51
|
+
handleCollect(item: V): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Handle an item being disposed
|
|
54
|
+
*/
|
|
55
|
+
handleDispose(item: V): void;
|
|
56
|
+
/**
|
|
57
|
+
* Get the key for an item
|
|
58
|
+
*/
|
|
59
|
+
abstract collect(item: V): K | null;
|
|
60
|
+
/**
|
|
61
|
+
* Get the key for disposing an item
|
|
62
|
+
*/
|
|
63
|
+
abstract dispose(item: V): K | null;
|
|
64
|
+
/**
|
|
65
|
+
* Stop the collector
|
|
66
|
+
*/
|
|
67
|
+
stop(reason?: string): void;
|
|
68
|
+
/**
|
|
69
|
+
* Reset the collector's timer
|
|
70
|
+
*/
|
|
71
|
+
resetTimer(options?: CollectorResetTimerOptions): void;
|
|
72
|
+
/**
|
|
73
|
+
* Check the end conditions
|
|
74
|
+
*/
|
|
75
|
+
checkEnd(): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Get the next item
|
|
78
|
+
*/
|
|
79
|
+
get next(): Promise<V>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Message collector options
|
|
83
|
+
*/
|
|
84
|
+
export interface MessageCollectorOptions extends CollectorOptions<any> {
|
|
85
|
+
/** Channel to collect messages from */
|
|
86
|
+
channelId?: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Collector for messages
|
|
90
|
+
*/
|
|
91
|
+
export declare class MessageCollector extends Collector<string, any> {
|
|
92
|
+
readonly channelId: string;
|
|
93
|
+
private readonly messageHandler;
|
|
94
|
+
constructor(client: any, channelId: string, options?: MessageCollectorOptions);
|
|
95
|
+
collect(message: any): string | null;
|
|
96
|
+
dispose(message: any): string | null;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Interaction collector options
|
|
100
|
+
*/
|
|
101
|
+
export interface InteractionCollectorOptions extends CollectorOptions<any> {
|
|
102
|
+
/** Channel to collect interactions from */
|
|
103
|
+
channelId?: string;
|
|
104
|
+
/** Guild to collect interactions from */
|
|
105
|
+
guildId?: string;
|
|
106
|
+
/** Message to collect interactions from */
|
|
107
|
+
messageId?: string;
|
|
108
|
+
/** Interaction types to collect */
|
|
109
|
+
interactionType?: number | number[];
|
|
110
|
+
/** Component types to collect */
|
|
111
|
+
componentType?: number | number[];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Collector for interactions (buttons, select menus, etc.)
|
|
115
|
+
*/
|
|
116
|
+
export declare class InteractionCollector extends Collector<string, any> {
|
|
117
|
+
readonly channelId?: string;
|
|
118
|
+
readonly guildId?: string;
|
|
119
|
+
readonly messageId?: string;
|
|
120
|
+
readonly interactionType?: number[];
|
|
121
|
+
readonly componentType?: number[];
|
|
122
|
+
private readonly interactionHandler;
|
|
123
|
+
constructor(client: any, options?: InteractionCollectorOptions);
|
|
124
|
+
collect(interaction: any): string | null;
|
|
125
|
+
dispose(interaction: any): string | null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Reaction collector options
|
|
129
|
+
*/
|
|
130
|
+
export interface ReactionCollectorOptions extends CollectorOptions<any> {
|
|
131
|
+
/** Message to collect reactions from */
|
|
132
|
+
messageId: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Collector for reactions
|
|
136
|
+
*/
|
|
137
|
+
export declare class ReactionCollector extends Collector<string, any> {
|
|
138
|
+
readonly messageId: string;
|
|
139
|
+
private readonly reactionHandler;
|
|
140
|
+
constructor(client: any, messageId: string, options: ReactionCollectorOptions);
|
|
141
|
+
collect(reaction: any): string | null;
|
|
142
|
+
dispose(reaction: any): string | null;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Await messages helper
|
|
146
|
+
*/
|
|
147
|
+
export declare function awaitMessages(client: any, channelId: string, options?: MessageCollectorOptions): Promise<Collection<string, any>>;
|
|
148
|
+
/**
|
|
149
|
+
* Await reactions helper
|
|
150
|
+
*/
|
|
151
|
+
export declare function awaitReactions(client: any, messageId: string, options: ReactionCollectorOptions): Promise<Collection<string, any>>;
|
|
152
|
+
export default Collector;
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Collectors for awaiting messages, reactions, and interactions
|
|
4
|
+
* API compatible with Discord.js Collectors
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ReactionCollector = exports.InteractionCollector = exports.MessageCollector = exports.Collector = void 0;
|
|
8
|
+
exports.awaitMessages = awaitMessages;
|
|
9
|
+
exports.awaitReactions = awaitReactions;
|
|
10
|
+
const events_1 = require("events");
|
|
11
|
+
const Collection_1 = require("./Collection");
|
|
12
|
+
/**
|
|
13
|
+
* Abstract base class for collectors
|
|
14
|
+
*/
|
|
15
|
+
class Collector extends events_1.EventEmitter {
|
|
16
|
+
/** The client that instantiated this collector */
|
|
17
|
+
client;
|
|
18
|
+
/** The items collected */
|
|
19
|
+
collected = new Collection_1.Collection();
|
|
20
|
+
/** Whether the collector has ended */
|
|
21
|
+
ended = false;
|
|
22
|
+
/** The reason the collector ended */
|
|
23
|
+
endReason = null;
|
|
24
|
+
/** Filter function */
|
|
25
|
+
filter;
|
|
26
|
+
/** Collector options */
|
|
27
|
+
options;
|
|
28
|
+
/** Number of items processed */
|
|
29
|
+
_processedCount = 0;
|
|
30
|
+
/** Timeout for time limit */
|
|
31
|
+
_timeout = null;
|
|
32
|
+
/** Timeout for idle limit */
|
|
33
|
+
_idleTimeout = null;
|
|
34
|
+
constructor(client, options = {}) {
|
|
35
|
+
super();
|
|
36
|
+
this.client = client;
|
|
37
|
+
this.options = options;
|
|
38
|
+
this.filter = options.filter ?? (() => true);
|
|
39
|
+
this.handleCollect = this.handleCollect.bind(this);
|
|
40
|
+
this.handleDispose = this.handleDispose.bind(this);
|
|
41
|
+
if (options.time) {
|
|
42
|
+
this._timeout = setTimeout(() => this.stop('time'), options.time);
|
|
43
|
+
}
|
|
44
|
+
if (options.idle) {
|
|
45
|
+
this._idleTimeout = setTimeout(() => this.stop('idle'), options.idle);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Handle an item being collected
|
|
50
|
+
*/
|
|
51
|
+
async handleCollect(item) {
|
|
52
|
+
if (this.ended)
|
|
53
|
+
return;
|
|
54
|
+
this._processedCount++;
|
|
55
|
+
const filterResult = await this.filter(item, this.collected);
|
|
56
|
+
if (!filterResult)
|
|
57
|
+
return;
|
|
58
|
+
const key = this.collect(item);
|
|
59
|
+
if (key === null)
|
|
60
|
+
return;
|
|
61
|
+
this.collected.set(key, item);
|
|
62
|
+
this.emit('collect', item);
|
|
63
|
+
// Reset idle timer
|
|
64
|
+
if (this._idleTimeout) {
|
|
65
|
+
clearTimeout(this._idleTimeout);
|
|
66
|
+
this._idleTimeout = setTimeout(() => this.stop('idle'), this.options.idle);
|
|
67
|
+
}
|
|
68
|
+
// Check limits
|
|
69
|
+
if (this.options.max && this.collected.size >= this.options.max) {
|
|
70
|
+
this.stop('limit');
|
|
71
|
+
}
|
|
72
|
+
if (this.options.maxProcessed && this._processedCount >= this.options.maxProcessed) {
|
|
73
|
+
this.stop('processedLimit');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Handle an item being disposed
|
|
78
|
+
*/
|
|
79
|
+
handleDispose(item) {
|
|
80
|
+
if (!this.options.dispose)
|
|
81
|
+
return;
|
|
82
|
+
const key = this.dispose(item);
|
|
83
|
+
if (key === null)
|
|
84
|
+
return;
|
|
85
|
+
if (this.collected.has(key)) {
|
|
86
|
+
this.collected.delete(key);
|
|
87
|
+
this.emit('dispose', item);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Stop the collector
|
|
92
|
+
*/
|
|
93
|
+
stop(reason = 'user') {
|
|
94
|
+
if (this.ended)
|
|
95
|
+
return;
|
|
96
|
+
this.ended = true;
|
|
97
|
+
this.endReason = reason;
|
|
98
|
+
if (this._timeout) {
|
|
99
|
+
clearTimeout(this._timeout);
|
|
100
|
+
this._timeout = null;
|
|
101
|
+
}
|
|
102
|
+
if (this._idleTimeout) {
|
|
103
|
+
clearTimeout(this._idleTimeout);
|
|
104
|
+
this._idleTimeout = null;
|
|
105
|
+
}
|
|
106
|
+
this.emit('end', this.collected, reason);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Reset the collector's timer
|
|
110
|
+
*/
|
|
111
|
+
resetTimer(options = {}) {
|
|
112
|
+
if (this._timeout) {
|
|
113
|
+
clearTimeout(this._timeout);
|
|
114
|
+
this._timeout = null;
|
|
115
|
+
}
|
|
116
|
+
if (this._idleTimeout) {
|
|
117
|
+
clearTimeout(this._idleTimeout);
|
|
118
|
+
this._idleTimeout = null;
|
|
119
|
+
}
|
|
120
|
+
if (options.time ?? this.options.time) {
|
|
121
|
+
this._timeout = setTimeout(() => this.stop('time'), options.time ?? this.options.time);
|
|
122
|
+
}
|
|
123
|
+
if (options.idle ?? this.options.idle) {
|
|
124
|
+
this._idleTimeout = setTimeout(() => this.stop('idle'), options.idle ?? this.options.idle);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check the end conditions
|
|
129
|
+
*/
|
|
130
|
+
checkEnd() {
|
|
131
|
+
const reason = this.endReason;
|
|
132
|
+
if (reason) {
|
|
133
|
+
this.stop(reason);
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get the next item
|
|
140
|
+
*/
|
|
141
|
+
get next() {
|
|
142
|
+
return new Promise((resolve, reject) => {
|
|
143
|
+
if (this.ended) {
|
|
144
|
+
reject(new Error('Collector has ended'));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const cleanup = () => {
|
|
148
|
+
this.removeListener('collect', onCollect);
|
|
149
|
+
this.removeListener('end', onEnd);
|
|
150
|
+
};
|
|
151
|
+
const onCollect = (item) => {
|
|
152
|
+
cleanup();
|
|
153
|
+
resolve(item);
|
|
154
|
+
};
|
|
155
|
+
const onEnd = () => {
|
|
156
|
+
cleanup();
|
|
157
|
+
reject(new Error('Collector ended'));
|
|
158
|
+
};
|
|
159
|
+
this.on('collect', onCollect);
|
|
160
|
+
this.on('end', onEnd);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.Collector = Collector;
|
|
165
|
+
/**
|
|
166
|
+
* Collector for messages
|
|
167
|
+
*/
|
|
168
|
+
class MessageCollector extends Collector {
|
|
169
|
+
channelId;
|
|
170
|
+
messageHandler;
|
|
171
|
+
constructor(client, channelId, options = {}) {
|
|
172
|
+
super(client, options);
|
|
173
|
+
this.channelId = channelId;
|
|
174
|
+
// Get bot's user ID to filter out bot's own messages
|
|
175
|
+
const botUserId = client.user?.id;
|
|
176
|
+
this.messageHandler = (message) => {
|
|
177
|
+
if (message.channel_id === this.channelId || message.channelId === this.channelId) {
|
|
178
|
+
// Automatically filter out bot's own messages
|
|
179
|
+
const authorId = message.author?.id || message.author_id;
|
|
180
|
+
if (botUserId && authorId === botUserId)
|
|
181
|
+
return;
|
|
182
|
+
// Also filter by application_id (bot messages have this)
|
|
183
|
+
if (message.application_id || message.applicationId)
|
|
184
|
+
return;
|
|
185
|
+
this.handleCollect(message);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
client.on('messageCreate', this.messageHandler);
|
|
189
|
+
this.once('end', () => {
|
|
190
|
+
client.removeListener('messageCreate', this.messageHandler);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
collect(message) {
|
|
194
|
+
return message.id ?? null;
|
|
195
|
+
}
|
|
196
|
+
dispose(message) {
|
|
197
|
+
return message.id ?? null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.MessageCollector = MessageCollector;
|
|
201
|
+
/**
|
|
202
|
+
* Collector for interactions (buttons, select menus, etc.)
|
|
203
|
+
*/
|
|
204
|
+
class InteractionCollector extends Collector {
|
|
205
|
+
channelId;
|
|
206
|
+
guildId;
|
|
207
|
+
messageId;
|
|
208
|
+
interactionType;
|
|
209
|
+
componentType;
|
|
210
|
+
interactionHandler;
|
|
211
|
+
constructor(client, options = {}) {
|
|
212
|
+
super(client, options);
|
|
213
|
+
this.channelId = options.channelId;
|
|
214
|
+
this.guildId = options.guildId;
|
|
215
|
+
this.messageId = options.messageId;
|
|
216
|
+
this.interactionType = options.interactionType
|
|
217
|
+
? Array.isArray(options.interactionType) ? options.interactionType : [options.interactionType]
|
|
218
|
+
: undefined;
|
|
219
|
+
this.componentType = options.componentType
|
|
220
|
+
? Array.isArray(options.componentType) ? options.componentType : [options.componentType]
|
|
221
|
+
: undefined;
|
|
222
|
+
this.interactionHandler = (interaction) => {
|
|
223
|
+
// Filter by channel
|
|
224
|
+
if (this.channelId && interaction.channelId !== this.channelId)
|
|
225
|
+
return;
|
|
226
|
+
// Filter by guild
|
|
227
|
+
if (this.guildId && interaction.guildId !== this.guildId)
|
|
228
|
+
return;
|
|
229
|
+
// Filter by message
|
|
230
|
+
if (this.messageId && interaction.message?.id !== this.messageId)
|
|
231
|
+
return;
|
|
232
|
+
// Filter by interaction type
|
|
233
|
+
if (this.interactionType && !this.interactionType.includes(interaction.type))
|
|
234
|
+
return;
|
|
235
|
+
// Filter by component type
|
|
236
|
+
if (this.componentType && interaction.componentType && !this.componentType.includes(interaction.componentType))
|
|
237
|
+
return;
|
|
238
|
+
this.handleCollect(interaction);
|
|
239
|
+
};
|
|
240
|
+
client.on('interactionCreate', this.interactionHandler);
|
|
241
|
+
this.once('end', () => {
|
|
242
|
+
client.removeListener('interactionCreate', this.interactionHandler);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
collect(interaction) {
|
|
246
|
+
return interaction.id ?? null;
|
|
247
|
+
}
|
|
248
|
+
dispose(interaction) {
|
|
249
|
+
return interaction.id ?? null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.InteractionCollector = InteractionCollector;
|
|
253
|
+
/**
|
|
254
|
+
* Collector for reactions
|
|
255
|
+
*/
|
|
256
|
+
class ReactionCollector extends Collector {
|
|
257
|
+
messageId;
|
|
258
|
+
reactionHandler;
|
|
259
|
+
constructor(client, messageId, options) {
|
|
260
|
+
super(client, options);
|
|
261
|
+
this.messageId = messageId;
|
|
262
|
+
this.reactionHandler = (reaction) => {
|
|
263
|
+
if (reaction.message_id === this.messageId || reaction.messageId === this.messageId) {
|
|
264
|
+
this.handleCollect(reaction);
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
client.on('messageReactionAdd', this.reactionHandler);
|
|
268
|
+
this.once('end', () => {
|
|
269
|
+
client.removeListener('messageReactionAdd', this.reactionHandler);
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
collect(reaction) {
|
|
273
|
+
// Key is emoji identifier
|
|
274
|
+
return reaction.emoji?.id ?? reaction.emoji?.name ?? null;
|
|
275
|
+
}
|
|
276
|
+
dispose(reaction) {
|
|
277
|
+
return reaction.emoji?.id ?? reaction.emoji?.name ?? null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.ReactionCollector = ReactionCollector;
|
|
281
|
+
/**
|
|
282
|
+
* Await messages helper
|
|
283
|
+
*/
|
|
284
|
+
function awaitMessages(client, channelId, options = {}) {
|
|
285
|
+
return new Promise((resolve, reject) => {
|
|
286
|
+
const collector = new MessageCollector(client, channelId, options);
|
|
287
|
+
collector.once('end', (collected, reason) => {
|
|
288
|
+
if (options.max && collected.size < options.max) {
|
|
289
|
+
reject(new Error(`Collector ended with reason: ${reason}`));
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
resolve(collected);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Await reactions helper
|
|
299
|
+
*/
|
|
300
|
+
function awaitReactions(client, messageId, options) {
|
|
301
|
+
return new Promise((resolve, reject) => {
|
|
302
|
+
const collector = new ReactionCollector(client, messageId, options);
|
|
303
|
+
collector.once('end', (collected, reason) => {
|
|
304
|
+
if (options.max && collected.size < options.max) {
|
|
305
|
+
reject(new Error(`Collector ended with reason: ${reason}`));
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
resolve(collected);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
exports.default = Collector;
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL0NvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUE2WEgsc0NBZ0JDO0FBS0Qsd0NBZ0JDO0FBaGFELG1DQUFzQztBQUN0Qyw2Q0FBMEM7QUFzQjFDOztHQUVHO0FBQ0gsTUFBc0IsU0FBK0IsU0FBUSxxQkFBWTtJQUN2RSxrREFBa0Q7SUFDbEMsTUFBTSxDQUFNO0lBRTVCLDBCQUEwQjtJQUNWLFNBQVMsR0FBcUIsSUFBSSx1QkFBVSxFQUFFLENBQUM7SUFFL0Qsc0NBQXNDO0lBQy9CLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFckIscUNBQXFDO0lBQzlCLFNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBRXZDLHNCQUFzQjtJQUNmLE1BQU0sQ0FBdUU7SUFFcEYsd0JBQXdCO0lBQ2pCLE9BQU8sQ0FBc0I7SUFFcEMsZ0NBQWdDO0lBQ3hCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFFNUIsNkJBQTZCO0lBQ3JCLFFBQVEsR0FBMEIsSUFBSSxDQUFDO0lBRS9DLDZCQUE2QjtJQUNyQixZQUFZLEdBQTBCLElBQUksQ0FBQztJQUVuRCxZQUFZLE1BQVcsRUFBRSxVQUErQixFQUFFO1FBQ3hELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBSSxPQUFPLENBQUMsTUFBYyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5ELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFPO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRXZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLEdBQUcsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUV6QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0IsbUJBQW1CO1FBQ25CLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUssQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxlQUFlO1FBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25GLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLElBQU87UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUFFLE9BQU87UUFFbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLEdBQUcsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUV6QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFZRDs7T0FFRztJQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTTtRQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUV2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxVQUFzQyxFQUFFO1FBQ2pELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDOUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFPLEVBQUUsRUFBRTtnQkFDNUIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtnQkFDakIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpMRCw4QkF5TEM7QUFVRDs7R0FFRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsU0FBc0I7SUFDMUMsU0FBUyxDQUFTO0lBQ2pCLGNBQWMsQ0FBeUI7SUFFeEQsWUFBWSxNQUFXLEVBQUUsU0FBaUIsRUFBRSxVQUFtQyxFQUFFO1FBQy9FLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IscURBQXFEO1FBQ3JELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNyQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbEYsOENBQThDO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN6RCxJQUFJLFNBQVMsSUFBSSxRQUFRLEtBQUssU0FBUztvQkFBRSxPQUFPO2dCQUVoRCx5REFBeUQ7Z0JBQ3pELElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsYUFBYTtvQkFBRSxPQUFPO2dCQUU1RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBWTtRQUNsQixPQUFPLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBWTtRQUNsQixPQUFPLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQXRDRCw0Q0FzQ0M7QUFrQkQ7O0dBRUc7QUFDSCxNQUFhLG9CQUFxQixTQUFRLFNBQXNCO0lBQzlDLFNBQVMsQ0FBVTtJQUNuQixPQUFPLENBQVU7SUFDakIsU0FBUyxDQUFVO0lBQ25CLGVBQWUsQ0FBWTtJQUMzQixhQUFhLENBQVk7SUFDeEIsa0JBQWtCLENBQTZCO0lBRWhFLFlBQVksTUFBVyxFQUFFLFVBQXVDLEVBQUU7UUFDaEUsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlO1lBQzVDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQzlGLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhO1lBQ3hDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3hGLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxXQUFnQixFQUFFLEVBQUU7WUFDN0Msb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFDdkUsa0JBQWtCO1lBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFDakUsb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPO1lBQ3pFLDZCQUE2QjtZQUM3QixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU87WUFDckYsMkJBQTJCO1lBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxXQUFXLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztnQkFBRSxPQUFPO1lBRXZILElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDcEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsV0FBZ0I7UUFDdEIsT0FBTyxXQUFXLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFdBQWdCO1FBQ3RCLE9BQU8sV0FBVyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBakRELG9EQWlEQztBQVVEOztHQUVHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxTQUFzQjtJQUMzQyxTQUFTLENBQVM7SUFDakIsZUFBZSxDQUEwQjtJQUUxRCxZQUFZLE1BQVcsRUFBRSxTQUFpQixFQUFFLE9BQWlDO1FBQzNFLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3ZDLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNwRixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDcEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWE7UUFDbkIsMEJBQTBCO1FBQzFCLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPLENBQUMsUUFBYTtRQUNuQixPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUE3QkQsOENBNkJDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQzNCLE1BQVcsRUFDWCxTQUFpQixFQUNqQixVQUFtQyxFQUFFO0lBRXJDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRW5FLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGdDQUFnQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsTUFBVyxFQUNYLFNBQWlCLEVBQ2pCLE9BQWlDO0lBRWpDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGdDQUFnQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxrQkFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29sbGVjdG9ycyBmb3IgYXdhaXRpbmcgbWVzc2FnZXMsIHJlYWN0aW9ucywgYW5kIGludGVyYWN0aW9uc1xyXG4gKiBBUEkgY29tcGF0aWJsZSB3aXRoIERpc2NvcmQuanMgQ29sbGVjdG9yc1xyXG4gKi9cclxuXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0b3JPcHRpb25zPFQ+IHtcclxuICAvKiogSG93IGxvbmcgdG8gcnVuIHRoZSBjb2xsZWN0b3IgZm9yIGluIG1pbGxpc2Vjb25kcyAqL1xyXG4gIHRpbWU/OiBudW1iZXI7XHJcbiAgLyoqIEhvdyBsb25nIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGl0ZW0gaW4gbWlsbGlzZWNvbmRzICovXHJcbiAgaWRsZT86IG51bWJlcjtcclxuICAvKiogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gY29sbGVjdCAqL1xyXG4gIG1heD86IG51bWJlcjtcclxuICAvKiogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcHJvY2VzcyAqL1xyXG4gIG1heFByb2Nlc3NlZD86IG51bWJlcjtcclxuICAvKiogRmlsdGVyIGZ1bmN0aW9uICovXHJcbiAgZmlsdGVyPzogKGl0ZW06IFQsIGNvbGxlY3RlZDogQ29sbGVjdGlvbjxzdHJpbmcsIFQ+KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcclxuICAvKiogV2hldGhlciB0byBkaXNwb3NlIG9mIGl0ZW1zIHdoZW4gdGhlIGNvbGxlY3RvciBlbmRzICovXHJcbiAgZGlzcG9zZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdG9yUmVzZXRUaW1lck9wdGlvbnMge1xyXG4gIHRpbWU/OiBudW1iZXI7XHJcbiAgaWRsZT86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNvbGxlY3RvcnNcclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb2xsZWN0b3I8SyBleHRlbmRzIHN0cmluZywgVj4gZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gIC8qKiBUaGUgY2xpZW50IHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgY29sbGVjdG9yICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogYW55O1xyXG4gIFxyXG4gIC8qKiBUaGUgaXRlbXMgY29sbGVjdGVkICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGNvbGxlY3RlZDogQ29sbGVjdGlvbjxLLCBWPiA9IG5ldyBDb2xsZWN0aW9uKCk7XHJcbiAgXHJcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbGxlY3RvciBoYXMgZW5kZWQgKi9cclxuICBwdWJsaWMgZW5kZWQgPSBmYWxzZTtcclxuICBcclxuICAvKiogVGhlIHJlYXNvbiB0aGUgY29sbGVjdG9yIGVuZGVkICovXHJcbiAgcHVibGljIGVuZFJlYXNvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgLyoqIEZpbHRlciBmdW5jdGlvbiAqL1xyXG4gIHB1YmxpYyBmaWx0ZXI6IChpdGVtOiBWLCBjb2xsZWN0ZWQ6IENvbGxlY3Rpb248SywgVj4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xyXG4gIFxyXG4gIC8qKiBDb2xsZWN0b3Igb3B0aW9ucyAqL1xyXG4gIHB1YmxpYyBvcHRpb25zOiBDb2xsZWN0b3JPcHRpb25zPFY+O1xyXG4gIFxyXG4gIC8qKiBOdW1iZXIgb2YgaXRlbXMgcHJvY2Vzc2VkICovXHJcbiAgcHJpdmF0ZSBfcHJvY2Vzc2VkQ291bnQgPSAwO1xyXG4gIFxyXG4gIC8qKiBUaW1lb3V0IGZvciB0aW1lIGxpbWl0ICovXHJcbiAgcHJpdmF0ZSBfdGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvKiogVGltZW91dCBmb3IgaWRsZSBsaW1pdCAqL1xyXG4gIHByaXZhdGUgX2lkbGVUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IGFueSwgb3B0aW9uczogQ29sbGVjdG9yT3B0aW9uczxWPiA9IHt9KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgdGhpcy5maWx0ZXIgPSAob3B0aW9ucy5maWx0ZXIgYXMgYW55KSA/PyAoKCkgPT4gdHJ1ZSk7XHJcbiAgICBcclxuICAgIHRoaXMuaGFuZGxlQ29sbGVjdCA9IHRoaXMuaGFuZGxlQ29sbGVjdC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5oYW5kbGVEaXNwb3NlID0gdGhpcy5oYW5kbGVEaXNwb3NlLmJpbmQodGhpcyk7XHJcbiAgICBcclxuICAgIGlmIChvcHRpb25zLnRpbWUpIHtcclxuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCd0aW1lJyksIG9wdGlvbnMudGltZSk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pZGxlKSB7XHJcbiAgICAgIHRoaXMuX2lkbGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0b3AoJ2lkbGUnKSwgb3B0aW9ucy5pZGxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBhbiBpdGVtIGJlaW5nIGNvbGxlY3RlZFxyXG4gICAqL1xyXG4gIGFzeW5jIGhhbmRsZUNvbGxlY3QoaXRlbTogVik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuZW5kZWQpIHJldHVybjtcclxuICAgIFxyXG4gICAgdGhpcy5fcHJvY2Vzc2VkQ291bnQrKztcclxuICAgIFxyXG4gICAgY29uc3QgZmlsdGVyUmVzdWx0ID0gYXdhaXQgdGhpcy5maWx0ZXIoaXRlbSwgdGhpcy5jb2xsZWN0ZWQpO1xyXG4gICAgaWYgKCFmaWx0ZXJSZXN1bHQpIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb2xsZWN0KGl0ZW0pO1xyXG4gICAgaWYgKGtleSA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB0aGlzLmNvbGxlY3RlZC5zZXQoa2V5LCBpdGVtKTtcclxuICAgIHRoaXMuZW1pdCgnY29sbGVjdCcsIGl0ZW0pO1xyXG4gICAgXHJcbiAgICAvLyBSZXNldCBpZGxlIHRpbWVyXHJcbiAgICBpZiAodGhpcy5faWRsZVRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lb3V0KTtcclxuICAgICAgdGhpcy5faWRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RvcCgnaWRsZScpLCB0aGlzLm9wdGlvbnMuaWRsZSEpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBDaGVjayBsaW1pdHNcclxuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4ICYmIHRoaXMuY29sbGVjdGVkLnNpemUgPj0gdGhpcy5vcHRpb25zLm1heCkge1xyXG4gICAgICB0aGlzLnN0b3AoJ2xpbWl0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm1heFByb2Nlc3NlZCAmJiB0aGlzLl9wcm9jZXNzZWRDb3VudCA+PSB0aGlzLm9wdGlvbnMubWF4UHJvY2Vzc2VkKSB7XHJcbiAgICAgIHRoaXMuc3RvcCgncHJvY2Vzc2VkTGltaXQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBhbiBpdGVtIGJlaW5nIGRpc3Bvc2VkXHJcbiAgICovXHJcbiAgaGFuZGxlRGlzcG9zZShpdGVtOiBWKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNwb3NlKSByZXR1cm47XHJcbiAgICBcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZGlzcG9zZShpdGVtKTtcclxuICAgIGlmIChrZXkgPT09IG51bGwpIHJldHVybjtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuY29sbGVjdGVkLmhhcyhrZXkpKSB7XHJcbiAgICAgIHRoaXMuY29sbGVjdGVkLmRlbGV0ZShrZXkpO1xyXG4gICAgICB0aGlzLmVtaXQoJ2Rpc3Bvc2UnLCBpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUga2V5IGZvciBhbiBpdGVtXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgY29sbGVjdChpdGVtOiBWKTogSyB8IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUga2V5IGZvciBkaXNwb3NpbmcgYW4gaXRlbVxyXG4gICAqL1xyXG4gIGFic3RyYWN0IGRpc3Bvc2UoaXRlbTogVik6IEsgfCBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHRoZSBjb2xsZWN0b3JcclxuICAgKi9cclxuICBzdG9wKHJlYXNvbiA9ICd1c2VyJyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZW5kZWQpIHJldHVybjtcclxuICAgIFxyXG4gICAgdGhpcy5lbmRlZCA9IHRydWU7XHJcbiAgICB0aGlzLmVuZFJlYXNvbiA9IHJlYXNvbjtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xyXG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pZGxlVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVvdXQpO1xyXG4gICAgICB0aGlzLl9pZGxlVGltZW91dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuZW1pdCgnZW5kJywgdGhpcy5jb2xsZWN0ZWQsIHJlYXNvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0aGUgY29sbGVjdG9yJ3MgdGltZXJcclxuICAgKi9cclxuICByZXNldFRpbWVyKG9wdGlvbnM6IENvbGxlY3RvclJlc2V0VGltZXJPcHRpb25zID0ge30pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcclxuICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5faWRsZVRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2lkbGVUaW1lb3V0KTtcclxuICAgICAgdGhpcy5faWRsZVRpbWVvdXQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAob3B0aW9ucy50aW1lID8/IHRoaXMub3B0aW9ucy50aW1lKSB7XHJcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RvcCgndGltZScpLCBvcHRpb25zLnRpbWUgPz8gdGhpcy5vcHRpb25zLnRpbWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaWRsZSA/PyB0aGlzLm9wdGlvbnMuaWRsZSkge1xyXG4gICAgICB0aGlzLl9pZGxlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCdpZGxlJyksIG9wdGlvbnMuaWRsZSA/PyB0aGlzLm9wdGlvbnMuaWRsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayB0aGUgZW5kIGNvbmRpdGlvbnNcclxuICAgKi9cclxuICBjaGVja0VuZCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlYXNvbiA9IHRoaXMuZW5kUmVhc29uO1xyXG4gICAgaWYgKHJlYXNvbikge1xyXG4gICAgICB0aGlzLnN0b3AocmVhc29uKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIG5leHQgaXRlbVxyXG4gICAqL1xyXG4gIGdldCBuZXh0KCk6IFByb21pc2U8Vj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5kZWQpIHtcclxuICAgICAgICByZWplY3QobmV3IEVycm9yKCdDb2xsZWN0b3IgaGFzIGVuZGVkJykpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdjb2xsZWN0Jywgb25Db2xsZWN0KTtcclxuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkVuZCk7XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBvbkNvbGxlY3QgPSAoaXRlbTogVikgPT4ge1xyXG4gICAgICAgIGNsZWFudXAoKTtcclxuICAgICAgICByZXNvbHZlKGl0ZW0pO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgY29uc3Qgb25FbmQgPSAoKSA9PiB7XHJcbiAgICAgICAgY2xlYW51cCgpO1xyXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvbGxlY3RvciBlbmRlZCcpKTtcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMub24oJ2NvbGxlY3QnLCBvbkNvbGxlY3QpO1xyXG4gICAgICB0aGlzLm9uKCdlbmQnLCBvbkVuZCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNZXNzYWdlIGNvbGxlY3RvciBvcHRpb25zXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VDb2xsZWN0b3JPcHRpb25zIGV4dGVuZHMgQ29sbGVjdG9yT3B0aW9uczxhbnk+IHtcclxuICAvKiogQ2hhbm5lbCB0byBjb2xsZWN0IG1lc3NhZ2VzIGZyb20gKi9cclxuICBjaGFubmVsSWQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0b3IgZm9yIG1lc3NhZ2VzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWVzc2FnZUNvbGxlY3RvciBleHRlbmRzIENvbGxlY3RvcjxzdHJpbmcsIGFueT4ge1xyXG4gIHB1YmxpYyByZWFkb25seSBjaGFubmVsSWQ6IHN0cmluZztcclxuICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VIYW5kbGVyOiAobWVzc2FnZTogYW55KSA9PiB2b2lkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IGFueSwgY2hhbm5lbElkOiBzdHJpbmcsIG9wdGlvbnM6IE1lc3NhZ2VDb2xsZWN0b3JPcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKGNsaWVudCwgb3B0aW9ucyk7XHJcbiAgICB0aGlzLmNoYW5uZWxJZCA9IGNoYW5uZWxJZDtcclxuICAgIFxyXG4gICAgLy8gR2V0IGJvdCdzIHVzZXIgSUQgdG8gZmlsdGVyIG91dCBib3QncyBvd24gbWVzc2FnZXNcclxuICAgIGNvbnN0IGJvdFVzZXJJZCA9IGNsaWVudC51c2VyPy5pZDtcclxuICAgIFxyXG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IChtZXNzYWdlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKG1lc3NhZ2UuY2hhbm5lbF9pZCA9PT0gdGhpcy5jaGFubmVsSWQgfHwgbWVzc2FnZS5jaGFubmVsSWQgPT09IHRoaXMuY2hhbm5lbElkKSB7XHJcbiAgICAgICAgLy8gQXV0b21hdGljYWxseSBmaWx0ZXIgb3V0IGJvdCdzIG93biBtZXNzYWdlc1xyXG4gICAgICAgIGNvbnN0IGF1dGhvcklkID0gbWVzc2FnZS5hdXRob3I/LmlkIHx8IG1lc3NhZ2UuYXV0aG9yX2lkO1xyXG4gICAgICAgIGlmIChib3RVc2VySWQgJiYgYXV0aG9ySWQgPT09IGJvdFVzZXJJZCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIEFsc28gZmlsdGVyIGJ5IGFwcGxpY2F0aW9uX2lkIChib3QgbWVzc2FnZXMgaGF2ZSB0aGlzKVxyXG4gICAgICAgIGlmIChtZXNzYWdlLmFwcGxpY2F0aW9uX2lkIHx8IG1lc3NhZ2UuYXBwbGljYXRpb25JZCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaGFuZGxlQ29sbGVjdChtZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgY2xpZW50Lm9uKCdtZXNzYWdlQ3JlYXRlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XHJcbiAgICBcclxuICAgIHRoaXMub25jZSgnZW5kJywgKCkgPT4ge1xyXG4gICAgICBjbGllbnQucmVtb3ZlTGlzdGVuZXIoJ21lc3NhZ2VDcmVhdGUnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29sbGVjdChtZXNzYWdlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiBtZXNzYWdlLmlkID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKG1lc3NhZ2U6IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIG1lc3NhZ2UuaWQgPz8gbnVsbDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbnRlcmFjdGlvbiBjb2xsZWN0b3Igb3B0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmFjdGlvbkNvbGxlY3Rvck9wdGlvbnMgZXh0ZW5kcyBDb2xsZWN0b3JPcHRpb25zPGFueT4ge1xyXG4gIC8qKiBDaGFubmVsIHRvIGNvbGxlY3QgaW50ZXJhY3Rpb25zIGZyb20gKi9cclxuICBjaGFubmVsSWQ/OiBzdHJpbmc7XHJcbiAgLyoqIEd1aWxkIHRvIGNvbGxlY3QgaW50ZXJhY3Rpb25zIGZyb20gKi9cclxuICBndWlsZElkPzogc3RyaW5nO1xyXG4gIC8qKiBNZXNzYWdlIHRvIGNvbGxlY3QgaW50ZXJhY3Rpb25zIGZyb20gKi9cclxuICBtZXNzYWdlSWQ/OiBzdHJpbmc7XHJcbiAgLyoqIEludGVyYWN0aW9uIHR5cGVzIHRvIGNvbGxlY3QgKi9cclxuICBpbnRlcmFjdGlvblR5cGU/OiBudW1iZXIgfCBudW1iZXJbXTtcclxuICAvKiogQ29tcG9uZW50IHR5cGVzIHRvIGNvbGxlY3QgKi9cclxuICBjb21wb25lbnRUeXBlPzogbnVtYmVyIHwgbnVtYmVyW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0b3IgZm9yIGludGVyYWN0aW9ucyAoYnV0dG9ucywgc2VsZWN0IG1lbnVzLCBldGMuKVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uQ29sbGVjdG9yIGV4dGVuZHMgQ29sbGVjdG9yPHN0cmluZywgYW55PiB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGNoYW5uZWxJZD86IHN0cmluZztcclxuICBwdWJsaWMgcmVhZG9ubHkgZ3VpbGRJZD86IHN0cmluZztcclxuICBwdWJsaWMgcmVhZG9ubHkgbWVzc2FnZUlkPzogc3RyaW5nO1xyXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcmFjdGlvblR5cGU/OiBudW1iZXJbXTtcclxuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VHlwZT86IG51bWJlcltdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25IYW5kbGVyOiAoaW50ZXJhY3Rpb246IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgY29uc3RydWN0b3IoY2xpZW50OiBhbnksIG9wdGlvbnM6IEludGVyYWN0aW9uQ29sbGVjdG9yT3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihjbGllbnQsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5jaGFubmVsSWQgPSBvcHRpb25zLmNoYW5uZWxJZDtcclxuICAgIHRoaXMuZ3VpbGRJZCA9IG9wdGlvbnMuZ3VpbGRJZDtcclxuICAgIHRoaXMubWVzc2FnZUlkID0gb3B0aW9ucy5tZXNzYWdlSWQ7XHJcbiAgICB0aGlzLmludGVyYWN0aW9uVHlwZSA9IG9wdGlvbnMuaW50ZXJhY3Rpb25UeXBlIFxyXG4gICAgICA/IEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmFjdGlvblR5cGUpID8gb3B0aW9ucy5pbnRlcmFjdGlvblR5cGUgOiBbb3B0aW9ucy5pbnRlcmFjdGlvblR5cGVdXHJcbiAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jb21wb25lbnRUeXBlID0gb3B0aW9ucy5jb21wb25lbnRUeXBlXHJcbiAgICAgID8gQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbXBvbmVudFR5cGUpID8gb3B0aW9ucy5jb21wb25lbnRUeXBlIDogW29wdGlvbnMuY29tcG9uZW50VHlwZV1cclxuICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICBcclxuICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyID0gKGludGVyYWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgLy8gRmlsdGVyIGJ5IGNoYW5uZWxcclxuICAgICAgaWYgKHRoaXMuY2hhbm5lbElkICYmIGludGVyYWN0aW9uLmNoYW5uZWxJZCAhPT0gdGhpcy5jaGFubmVsSWQpIHJldHVybjtcclxuICAgICAgLy8gRmlsdGVyIGJ5IGd1aWxkXHJcbiAgICAgIGlmICh0aGlzLmd1aWxkSWQgJiYgaW50ZXJhY3Rpb24uZ3VpbGRJZCAhPT0gdGhpcy5ndWlsZElkKSByZXR1cm47XHJcbiAgICAgIC8vIEZpbHRlciBieSBtZXNzYWdlXHJcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VJZCAmJiBpbnRlcmFjdGlvbi5tZXNzYWdlPy5pZCAhPT0gdGhpcy5tZXNzYWdlSWQpIHJldHVybjtcclxuICAgICAgLy8gRmlsdGVyIGJ5IGludGVyYWN0aW9uIHR5cGVcclxuICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb25UeXBlICYmICF0aGlzLmludGVyYWN0aW9uVHlwZS5pbmNsdWRlcyhpbnRlcmFjdGlvbi50eXBlKSkgcmV0dXJuO1xyXG4gICAgICAvLyBGaWx0ZXIgYnkgY29tcG9uZW50IHR5cGVcclxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50VHlwZSAmJiBpbnRlcmFjdGlvbi5jb21wb25lbnRUeXBlICYmICF0aGlzLmNvbXBvbmVudFR5cGUuaW5jbHVkZXMoaW50ZXJhY3Rpb24uY29tcG9uZW50VHlwZSkpIHJldHVybjtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuaGFuZGxlQ29sbGVjdChpbnRlcmFjdGlvbik7XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICBjbGllbnQub24oJ2ludGVyYWN0aW9uQ3JlYXRlJywgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIpO1xyXG4gICAgXHJcbiAgICB0aGlzLm9uY2UoJ2VuZCcsICgpID0+IHtcclxuICAgICAgY2xpZW50LnJlbW92ZUxpc3RlbmVyKCdpbnRlcmFjdGlvbkNyZWF0ZScsIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29sbGVjdChpbnRlcmFjdGlvbjogYW55KTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gaW50ZXJhY3Rpb24uaWQgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoaW50ZXJhY3Rpb246IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIGludGVyYWN0aW9uLmlkID8/IG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVhY3Rpb24gY29sbGVjdG9yIG9wdGlvbnNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25Db2xsZWN0b3JPcHRpb25zIGV4dGVuZHMgQ29sbGVjdG9yT3B0aW9uczxhbnk+IHtcclxuICAvKiogTWVzc2FnZSB0byBjb2xsZWN0IHJlYWN0aW9ucyBmcm9tICovXHJcbiAgbWVzc2FnZUlkOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0b3IgZm9yIHJlYWN0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFJlYWN0aW9uQ29sbGVjdG9yIGV4dGVuZHMgQ29sbGVjdG9yPHN0cmluZywgYW55PiB7XHJcbiAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2VJZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVhY3Rpb25IYW5kbGVyOiAocmVhY3Rpb246IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgY29uc3RydWN0b3IoY2xpZW50OiBhbnksIG1lc3NhZ2VJZDogc3RyaW5nLCBvcHRpb25zOiBSZWFjdGlvbkNvbGxlY3Rvck9wdGlvbnMpIHtcclxuICAgIHN1cGVyKGNsaWVudCwgb3B0aW9ucyk7XHJcbiAgICB0aGlzLm1lc3NhZ2VJZCA9IG1lc3NhZ2VJZDtcclxuICAgIFxyXG4gICAgdGhpcy5yZWFjdGlvbkhhbmRsZXIgPSAocmVhY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVhY3Rpb24ubWVzc2FnZV9pZCA9PT0gdGhpcy5tZXNzYWdlSWQgfHwgcmVhY3Rpb24ubWVzc2FnZUlkID09PSB0aGlzLm1lc3NhZ2VJZCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ29sbGVjdChyZWFjdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBcclxuICAgIGNsaWVudC5vbignbWVzc2FnZVJlYWN0aW9uQWRkJywgdGhpcy5yZWFjdGlvbkhhbmRsZXIpO1xyXG4gICAgXHJcbiAgICB0aGlzLm9uY2UoJ2VuZCcsICgpID0+IHtcclxuICAgICAgY2xpZW50LnJlbW92ZUxpc3RlbmVyKCdtZXNzYWdlUmVhY3Rpb25BZGQnLCB0aGlzLnJlYWN0aW9uSGFuZGxlcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbGxlY3QocmVhY3Rpb246IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgLy8gS2V5IGlzIGVtb2ppIGlkZW50aWZpZXJcclxuICAgIHJldHVybiByZWFjdGlvbi5lbW9qaT8uaWQgPz8gcmVhY3Rpb24uZW1vamk/Lm5hbWUgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UocmVhY3Rpb246IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHJlYWN0aW9uLmVtb2ppPy5pZCA/PyByZWFjdGlvbi5lbW9qaT8ubmFtZSA/PyBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEF3YWl0IG1lc3NhZ2VzIGhlbHBlclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGF3YWl0TWVzc2FnZXMoXHJcbiAgY2xpZW50OiBhbnksXHJcbiAgY2hhbm5lbElkOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogTWVzc2FnZUNvbGxlY3Rvck9wdGlvbnMgPSB7fVxyXG4pOiBQcm9taXNlPENvbGxlY3Rpb248c3RyaW5nLCBhbnk+PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGNvbnN0IGNvbGxlY3RvciA9IG5ldyBNZXNzYWdlQ29sbGVjdG9yKGNsaWVudCwgY2hhbm5lbElkLCBvcHRpb25zKTtcclxuICAgIFxyXG4gICAgY29sbGVjdG9yLm9uY2UoJ2VuZCcsIChjb2xsZWN0ZWQsIHJlYXNvbikgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucy5tYXggJiYgY29sbGVjdGVkLnNpemUgPCBvcHRpb25zLm1heCkge1xyXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYENvbGxlY3RvciBlbmRlZCB3aXRoIHJlYXNvbjogJHtyZWFzb259YCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUoY29sbGVjdGVkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBd2FpdCByZWFjdGlvbnMgaGVscGVyXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYXdhaXRSZWFjdGlvbnMoXHJcbiAgY2xpZW50OiBhbnksXHJcbiAgbWVzc2FnZUlkOiBzdHJpbmcsXHJcbiAgb3B0aW9uczogUmVhY3Rpb25Db2xsZWN0b3JPcHRpb25zXHJcbik6IFByb21pc2U8Q29sbGVjdGlvbjxzdHJpbmcsIGFueT4+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgY29uc3QgY29sbGVjdG9yID0gbmV3IFJlYWN0aW9uQ29sbGVjdG9yKGNsaWVudCwgbWVzc2FnZUlkLCBvcHRpb25zKTtcclxuICAgIFxyXG4gICAgY29sbGVjdG9yLm9uY2UoJ2VuZCcsIChjb2xsZWN0ZWQsIHJlYXNvbikgPT4ge1xyXG4gICAgICBpZiAob3B0aW9ucy5tYXggJiYgY29sbGVjdGVkLnNpemUgPCBvcHRpb25zLm1heCkge1xyXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYENvbGxlY3RvciBlbmRlZCB3aXRoIHJlYXNvbjogJHtyZWFzb259YCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUoY29sbGVjdGVkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbGxlY3RvcjtcclxuIl19
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data resolver utilities for handling various data types
|
|
3
|
+
*/
|
|
4
|
+
export type BufferResolvable = Buffer | string;
|
|
5
|
+
export type Base64Resolvable = Buffer | string;
|
|
6
|
+
/**
|
|
7
|
+
* Resolves various data types to usable formats
|
|
8
|
+
*/
|
|
9
|
+
export declare class DataResolver {
|
|
10
|
+
/**
|
|
11
|
+
* Resolves a BufferResolvable to a Buffer
|
|
12
|
+
* @param resource The resource to resolve
|
|
13
|
+
*/
|
|
14
|
+
static resolveBuffer(resource: BufferResolvable): Promise<Buffer>;
|
|
15
|
+
/**
|
|
16
|
+
* Resolves a Base64Resolvable to a base64 string
|
|
17
|
+
* @param resource The resource to resolve
|
|
18
|
+
* @param mimeType The MIME type for the data URI
|
|
19
|
+
*/
|
|
20
|
+
static resolveBase64(resource: Base64Resolvable, mimeType?: string): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Resolves a file to a name and buffer
|
|
23
|
+
* @param resource The file resource
|
|
24
|
+
*/
|
|
25
|
+
static resolveFile(resource: BufferResolvable | {
|
|
26
|
+
name?: string;
|
|
27
|
+
attachment: BufferResolvable;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
name: string;
|
|
30
|
+
data: Buffer;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Resolves multiple files
|
|
34
|
+
* @param resources The file resources
|
|
35
|
+
*/
|
|
36
|
+
static resolveFiles(resources: (BufferResolvable | {
|
|
37
|
+
name?: string;
|
|
38
|
+
attachment: BufferResolvable;
|
|
39
|
+
})[]): Promise<{
|
|
40
|
+
name: string;
|
|
41
|
+
data: Buffer;
|
|
42
|
+
}[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Resolves a color to a number
|
|
45
|
+
* @param color The color to resolve
|
|
46
|
+
*/
|
|
47
|
+
static resolveColor(color: number | string | [number, number, number] | null): number | null;
|
|
48
|
+
/**
|
|
49
|
+
* Resolves a string to a snowflake ID
|
|
50
|
+
* @param value The value to resolve
|
|
51
|
+
*/
|
|
52
|
+
static resolveSnowflake(value: string | number | {
|
|
53
|
+
id: string | number;
|
|
54
|
+
}): string;
|
|
55
|
+
/**
|
|
56
|
+
* Resolves an image to a base64 data URI
|
|
57
|
+
* @param image The image to resolve
|
|
58
|
+
*/
|
|
59
|
+
static resolveImage(image: BufferResolvable): Promise<string>;
|
|
60
|
+
}
|
|
61
|
+
export default DataResolver;
|