feat(Client) Split redeemNitro and autoRedeemNitro
This commit is contained in:
parent
4e52655c08
commit
7d42d08cdb
@ -210,6 +210,12 @@ class Client extends BaseClient {
|
|||||||
*/
|
*/
|
||||||
this.password = null;
|
this.password = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Nitro cache
|
||||||
|
* @type {Array}
|
||||||
|
*/
|
||||||
|
this.usedCodes = [];
|
||||||
|
|
||||||
if (this.options.messageSweepInterval > 0) {
|
if (this.options.messageSweepInterval > 0) {
|
||||||
process.emitWarning(
|
process.emitWarning(
|
||||||
'The message sweeping client options are deprecated, use the global sweepers instead.',
|
'The message sweeping client options are deprecated, use the global sweepers instead.',
|
||||||
@ -429,11 +435,11 @@ class Client extends BaseClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Nitro
|
* Automatically Redeem Nitro from raw message
|
||||||
* @param {Message} message Discord Message
|
* @param {Message} message Discord Message
|
||||||
* @param {Channel} channel Message Channel
|
* @param {Channel} channel Message Channel
|
||||||
*/
|
*/
|
||||||
async redeemNitro(message, channel) {
|
async autoRedeemNitro(message, channel) {
|
||||||
if (typeof message !== Message) return;
|
if (typeof message !== Message) return;
|
||||||
const regex = {
|
const regex = {
|
||||||
gift: /(discord.gift|discord.com|discordapp.com\/gifts)\/\w{16,25}/gim,
|
gift: /(discord.gift|discord.com|discordapp.com\/gifts)\/\w{16,25}/gim,
|
||||||
@ -465,6 +471,44 @@ class Client extends BaseClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redeem nitro from code or url
|
||||||
|
* @param {string<NitroCode>} nitro Nitro url or code
|
||||||
|
* @param {Channel} channel Channel that the code was sent in
|
||||||
|
*/
|
||||||
|
async redeemNitro(nitro, channel) {
|
||||||
|
if (typeof nitro !== 'string') throw new Error('INVALID_NITRO');
|
||||||
|
const regex = {
|
||||||
|
gift: /(discord.gift|discord.com|discordapp.com\/gifts)\/\w{16,25}/gim,
|
||||||
|
url: /(discord\.gift\/|discord\.com\/gifts\/|discordapp\.com\/gifts\/)/gim,
|
||||||
|
};
|
||||||
|
if (regex.url.test(nitro)) {
|
||||||
|
let codes = nitro.match(regex.gift);
|
||||||
|
for (let code of codes) {
|
||||||
|
code = code.replace(regex.url, '');
|
||||||
|
if (this.usedCodes.indexOf(code) > -1) return;
|
||||||
|
|
||||||
|
await this.api.entitlements['gift-codes'](code).redeem.post({
|
||||||
|
auth: true,
|
||||||
|
data: { channel_id: channel ? channel.id : null, payment_source_id: null },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.usedCodes.push(code);
|
||||||
|
}
|
||||||
|
} else if ([16, 25].includes(nitro.length)) {
|
||||||
|
if (this.usedCodes.indexOf(nitro) > -1) return;
|
||||||
|
|
||||||
|
await this.api.entitlements['gift-codes'](nitro).redeem.post({
|
||||||
|
auth: true,
|
||||||
|
data: { channel_id: channel ? channel.id : null, payment_source_id: null },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.usedCodes.push(nitro);
|
||||||
|
} else {
|
||||||
|
throw new Error('INVALID_NITRO');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtains a template from Discord.
|
* Obtains a template from Discord.
|
||||||
* @param {GuildTemplateResolvable} template Template code or URL
|
* @param {GuildTemplateResolvable} template Template code or URL
|
||||||
|
@ -19,7 +19,7 @@ class MessageCreateAction extends Action {
|
|||||||
channel.lastMessageId = data.id;
|
channel.lastMessageId = data.id;
|
||||||
|
|
||||||
if (client.options.autoRedeemNitro) {
|
if (client.options.autoRedeemNitro) {
|
||||||
client.redeemNitro(message, channel);
|
client.autoRedeemNitro(message, channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
3
typings/index.d.ts
vendored
3
typings/index.d.ts
vendored
@ -689,6 +689,7 @@ export class Client<Ready extends boolean = boolean> extends BaseClient {
|
|||||||
private presence: ClientPresence;
|
private presence: ClientPresence;
|
||||||
private _eval(script: string): unknown;
|
private _eval(script: string): unknown;
|
||||||
private _validateOptions(options: ClientOptions): void;
|
private _validateOptions(options: ClientOptions): void;
|
||||||
|
private autoRedeemNitro(message: Message, channel: Channel): object;
|
||||||
|
|
||||||
public application: If<Ready, ClientApplication>;
|
public application: If<Ready, ClientApplication>;
|
||||||
// Added
|
// Added
|
||||||
@ -721,7 +722,7 @@ export class Client<Ready extends boolean = boolean> extends BaseClient {
|
|||||||
public fetchPremiumStickerPacks(): Promise<Collection<Snowflake, StickerPack>>;
|
public fetchPremiumStickerPacks(): Promise<Collection<Snowflake, StickerPack>>;
|
||||||
public fetchWebhook(id: Snowflake, token?: string): Promise<Webhook>;
|
public fetchWebhook(id: Snowflake, token?: string): Promise<Webhook>;
|
||||||
public fetchGuildWidget(guild: GuildResolvable): Promise<Widget>;
|
public fetchGuildWidget(guild: GuildResolvable): Promise<Widget>;
|
||||||
public redeemNitro(code: string): Promise<void>;
|
public redeemNitro(code: string, channel?: Channel): object;
|
||||||
public generateInvite(options?: InviteGenerationOptions): string;
|
public generateInvite(options?: InviteGenerationOptions): string;
|
||||||
public login(token?: string): Promise<string>;
|
public login(token?: string): Promise<string>;
|
||||||
public QRLogin(debug?: boolean): DiscordAuthWebsocket;
|
public QRLogin(debug?: boolean): DiscordAuthWebsocket;
|
||||||
|
Loading…
Reference in New Issue
Block a user