2022-03-19 10:37:45 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const BaseClient = require('./BaseClient');
|
|
|
|
const { Error } = require('../errors');
|
|
|
|
const Webhook = require('../structures/Webhook');
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The webhook client.
|
|
|
|
* @implements {Webhook}
|
|
|
|
* @extends {BaseClient}
|
|
|
|
*/
|
|
|
|
class WebhookClient extends BaseClient {
|
|
|
|
/**
|
|
|
|
* The data for the webhook client containing either an id and token or just a URL
|
|
|
|
* @typedef {Object} WebhookClientData
|
|
|
|
* @property {Snowflake} [id] The id of the webhook
|
|
|
|
* @property {string} [token] The token of the webhook
|
|
|
|
* @property {string} [url] The full URL for the webhook client
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {WebhookClientData} data The data of the webhook
|
|
|
|
* @param {ClientOptions} [options] Options for the client
|
|
|
|
*/
|
|
|
|
constructor(data, options) {
|
|
|
|
super(options);
|
|
|
|
Object.defineProperty(this, 'client', { value: this });
|
|
|
|
let { id, token } = data;
|
|
|
|
|
|
|
|
if ('url' in data) {
|
|
|
|
const url = data.url.match(
|
|
|
|
// eslint-disable-next-line no-useless-escape
|
2022-03-24 10:55:32 +00:00
|
|
|
/^https?:\/\/(?:canary|ptb)?\.?discord\.com\/api\/webhooks(?:\/v[0-9]\d*)?\/([^\/]+)\/([^\/]+)/i,
|
2022-03-19 10:37:45 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
if (!url || url.length <= 1) throw new Error('WEBHOOK_URL_INVALID');
|
|
|
|
|
|
|
|
[, id, token] = url;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.id = id;
|
|
|
|
Object.defineProperty(this, 'token', { value: token, writable: true, configurable: true });
|
|
|
|
}
|
|
|
|
|
|
|
|
// These are here only for documentation purposes - they are implemented by Webhook
|
|
|
|
/* eslint-disable no-empty-function */
|
|
|
|
send() {}
|
|
|
|
sendSlackMessage() {}
|
|
|
|
fetchMessage() {}
|
|
|
|
edit() {}
|
|
|
|
editMessage() {}
|
|
|
|
delete() {}
|
|
|
|
deleteMessage() {}
|
|
|
|
get createdTimestamp() {}
|
|
|
|
get createdAt() {}
|
|
|
|
get url() {}
|
|
|
|
}
|
|
|
|
|
|
|
|
Webhook.applyToClass(WebhookClient);
|
|
|
|
|
|
|
|
module.exports = WebhookClient;
|