Skip to content

Commit

Permalink
refactor(Webhook): only take one param
Browse files Browse the repository at this point in the history
  • Loading branch information
castdrian committed Jun 6, 2021
1 parent 34dedac commit 572daae
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 41 deletions.
32 changes: 19 additions & 13 deletions src/structures/Webhook.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,7 @@ class Webhook {

/**
* Sends a message with this webhook.
* @param {string|APIMessage} [content=''] The content to send
* @param {WebhookMessageOptions|MessageAdditions} [options={}] The options to provide
* @param {string|APIMessage|WebhookMessageOptions|MessageAdditions} options The options to provide
* @returns {Promise<Message|Object>}
* @example
* // Send a basic message
Expand All @@ -132,7 +131,8 @@ class Webhook {
* .catch(console.error);
* @example
* // Send an embed with a local image inside
* webhook.send('This is an embed', {
* webhook.send({
* content: 'This is an embed',
* embeds: [{
* thumbnail: {
* url: 'attachment://file.jpg'
Expand All @@ -146,13 +146,15 @@ class Webhook {
* .then(console.log)
* .catch(console.error);
*/
async send(content, options) {
async send(options) {
let apiMessage;

if (content instanceof APIMessage) {
apiMessage = content.resolveData();
if (options instanceof APIMessage) {
apiMessage = options.resolveData();
} else if (typeof options === 'string') {
apiMessage = APIMessage.create(this, options);
} else {
apiMessage = APIMessage.create(this, content, options).resolveData();
apiMessage = APIMessage.create(this, null, options).resolveData();
if (Array.isArray(apiMessage.data.content)) {
return Promise.all(apiMessage.split().map(this.send.bind(this)));
}
Expand Down Expand Up @@ -242,15 +244,19 @@ class Webhook {
/**
* Edits a message that was sent by this webhook.
* @param {MessageResolvable|'@original'} message The message to edit
* @param {?(string|APIMessage)} [content] The new content for the message
* @param {WebhookEditMessageOptions|MessageAdditions} [options] The options to provide
* @param {string|APIMessage|WebhookEditMessageOptions|MessageAdditions} options The options to provide
* @returns {Promise<Message|Object>} Returns the raw message data if the webhook was instantiated as a
* {@link WebhookClient} or if the channel is uncached, otherwise a {@link Message} will be returned
*/
async editMessage(message, content, options) {
const { data, files } = await (
content?.resolveData?.() ?? APIMessage.create(this, content, options).resolveData()
).resolveFiles();
async editMessage(message, options) {
let apiMessage;

if (options instanceof APIMessage) apiMessage = options.resolveData();
else if (typeof options === 'string') apiMessage = APIMessage.create(this, options).resolveData();
else apiMessage = APIMessage.create(this, null, options).resolveData();

const { data, files } = await apiMessage.resolveFiles();

const d = await this.client.api
.webhooks(this.id, this.token)
.messages(typeof message === 'string' ? message : message.id)
Expand Down
35 changes: 7 additions & 28 deletions typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2111,23 +2111,15 @@ declare module 'discord.js' {
public token: string;
public editMessage(
message: MessageResolvable,
content: string | null | APIMessage | MessageEmbed | MessageEmbed[],
options?: WebhookEditMessageOptions,
options: string | APIMessage | WebhookEditMessageOptions | MessageEmbed | MessageEmbed[],
): Promise<RawMessage>;
public editMessage(message: MessageResolvable, options: WebhookEditMessageOptions): Promise<RawMessage>;
public fetchMessage(message: Snowflake, cache?: boolean): Promise<RawMessage>;
public send(content: string | (WebhookMessageOptions & { split?: false }) | MessageAdditions): Promise<RawMessage>;
public send(options: WebhookMessageOptions & { split: true | SplitOptions }): Promise<RawMessage[]>;
public send(options: WebhookMessageOptions | APIMessage): Promise<RawMessage | RawMessage[]>;
public send(
content: string | null,
options: (WebhookMessageOptions & { split?: false }) | MessageAdditions,
content: string | APIMessage | (WebhookMessageOptions & { split?: false }) | MessageAdditions,
): Promise<RawMessage>;
public send(
content: string | null,
options: WebhookMessageOptions & { split: true | SplitOptions },
options: string | APIMessage | (WebhookMessageOptions & { split: true | SplitOptions }),
): Promise<RawMessage[]>;
public send(content: string | null, options: WebhookMessageOptions): Promise<RawMessage | RawMessage[]>;
}

export class WebSocketManager extends EventEmitter {
Expand Down Expand Up @@ -2506,31 +2498,18 @@ declare module 'discord.js' {
deleteMessage(message: MessageResolvable | '@original'): Promise<void>;
editMessage(
message: MessageResolvable | '@original',
content: string | null | APIMessage | MessageAdditions,
options?: WebhookEditMessageOptions,
): Promise<Message | RawMessage>;
editMessage(
message: MessageResolvable | '@original',
options: WebhookEditMessageOptions,
options: string | APIMessage | WebhookEditMessageOptions | MessageAdditions,
): Promise<Message | RawMessage>;
fetchMessage(message: Snowflake | '@original', cache?: boolean): Promise<Message | RawMessage>;
send(
content: string | (WebhookMessageOptions & { split?: false }) | MessageAdditions,
): Promise<Message | RawMessage>;
send(options: WebhookMessageOptions & { split: true | SplitOptions }): Promise<(Message | RawMessage)[]>;
send(options: WebhookMessageOptions | APIMessage): Promise<Message | RawMessage | (Message | RawMessage)[]>;
send(
content: string | null,
options: (WebhookMessageOptions & { split?: false }) | MessageAdditions,
): Promise<Message | RawMessage>;
send(
content: string | null,
options: WebhookMessageOptions & { split: true | SplitOptions },
options: string | APIMessage | (WebhookMessageOptions & { split: true | SplitOptions }),
): Promise<(Message | RawMessage)[]>;
send(
content: string | null,
options: WebhookMessageOptions,
): Promise<Message | RawMessage | (Message | RawMessage)[]>;
options: string | APIMessage | (WebhookMessageOptions & { split?: false }) | MessageAdditions,
): Promise<Message | RawMessage>;
}

interface WebhookFields extends PartialWebhookFields {
Expand Down

0 comments on commit 572daae

Please sign in to comment.