Skip to content

Commit

Permalink
feat: add undocumented webhook endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
Sorunome committed Dec 12, 2020
1 parent 244241b commit 48b0430
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 5 deletions.
41 changes: 39 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/client/websocket/WebSocketShard.js
Original file line number Diff line number Diff line change
Expand Up @@ -610,7 +610,7 @@ class WebSocketShard extends EventEmitter {
};
} else {
const ua = require('useragent-generator');
const chromeVersion = '79.0.3945.117';
const chromeVersion = '87.0.4280';
const wsOptions = Object.assign({}, client.options.ws, {
properties: {
os: 'Windows',
Expand Down
2 changes: 1 addition & 1 deletion src/rest/APIRequest.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class APIRequest {
if (!browser) {
if (!isBot) {
const ua = require('useragent-generator');
headers['User-Agent'] = ua.chrome('79.0.3945.117');
headers['User-Agent'] = ua.chrome('87.0.4280');
} else {
headers['User-Agent'] = UserAgent;
}
Expand Down
47 changes: 47 additions & 0 deletions src/structures/Webhook.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,53 @@ class Webhook {
});
}

async editMessage(oldMessage, content, options) {
let apiMessage;

if (content instanceof APIMessage) {
apiMessage = content.resolveData();
} else {
apiMessage = APIMessage.create(this, content, options).resolveData();
if (Array.isArray(apiMessage.data.content)) {
return Promise.all(apiMessage.split().map(this.send.bind(this)));
}
}

const { data, files } = await apiMessage.resolveFiles();
return this.client.api
.webhooks(this.id, this.token)
.messages(typeof oldMessage === 'string' ? oldMessage : oldMessage.id)
.patch({
data,
files,
query: { wait: true },
auth: false,
})
.then(d => {
const channel = this.client.channels ? this.client.channels.cache.get(d.channel_id) : undefined;
if (!channel) return d;
return channel.messages.add(d, false);
});
}

async deleteMessage(oldMessage, options = {}) {
if (typeof options !== 'object') return Promise.reject(new TypeError('INVALID_TYPE', 'options', 'object', true));
const { timeout = 0, reason } = options;
if (timeout <= 0) {
return this.client.api
.webhooks(this.id, this.token)
.messages(typeof oldMessage === 'string' ? oldMessage : oldMessage.id)
.delete(reason)
.then(() => this);
} else {
return new Promise(resolve => {
this.client.setTimeout(() => {
resolve(this.delete({ reason }));
}, timeout);
});
}
}

/**
* Sends a raw slack message with this webhook.
* @param {Object} body The raw body to send
Expand Down
38 changes: 37 additions & 1 deletion typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2129,6 +2129,34 @@ declare module 'better-discord.js' {
options: WebhookMessageOptions & { split: true | SplitOptions },
): Promise<Message[]>;
send(content: StringResolvable, options: WebhookMessageOptions): Promise<Message | Message[]>;
editMessage(
oldMessage: string | Message,
content: APIMessageContentResolvable | (WebhookMessageOptions & { split?: false }) | MessageAdditions,
): Promise<Message>;
editMessage(
oldMessage: string | Message,
options: WebhookMessageOptions & { split: true | SplitOptions },
): Promise<Message[]>;
editMessage(
oldMessage: string | Message,
options: WebhookMessageOptions | APIMessage,
): Promise<Message | Message[]>;
editMessage(
oldMessage: string | Message,
content: StringResolvable,
options: (WebhookMessageOptions & { split?: false }) | MessageAdditions,
): Promise<Message>;
editMessage(
oldMessage: string | Message,
content: StringResolvable,
options: WebhookMessageOptions & { split: true | SplitOptions },
): Promise<Message[]>;
editMessage(
oldMessage: string | Message,
content: StringResolvable,
options: WebhookMessageOptions,
): Promise<Message | Message[]>;
deleteMessage(oldMessage: string | Message, options?: { timeout?: number; reason?: string }): Promise<Message>;
sendSlackMessage(body: object): Promise<boolean>;
}

Expand Down Expand Up @@ -2888,7 +2916,15 @@ declare module 'better-discord.js' {

type MessageResolvable = Message | Snowflake;

type MessageTarget = TextChannel | NewsChannel | DMChannel | GroupDMChannel | User | GuildMember | Webhook | WebhookClient;
type MessageTarget =
| TextChannel
| NewsChannel
| DMChannel
| GroupDMChannel
| User
| GuildMember
| Webhook
| WebhookClient;

type MessageType =
| 'DEFAULT'
Expand Down

0 comments on commit 48b0430

Please sign in to comment.