mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 00:23:30 +01:00
feat(*): use enums for consistency and speed (#5843)
Co-authored-by: Antonio Román <kyradiscord@gmail.com>
This commit is contained in:
@@ -13,7 +13,7 @@ const {
|
||||
ChannelTypes,
|
||||
Events,
|
||||
VerificationLevels,
|
||||
DefaultMessageNotifications,
|
||||
DefaultMessageNotificationLevels,
|
||||
ExplicitContentFilterLevels,
|
||||
} = require('../util/Constants');
|
||||
const DataResolver = require('../util/DataResolver');
|
||||
@@ -168,14 +168,14 @@ class GuildManager extends BaseManager {
|
||||
} = {},
|
||||
) {
|
||||
icon = await DataResolver.resolveImage(icon);
|
||||
if (typeof verificationLevel !== 'undefined' && typeof verificationLevel !== 'number') {
|
||||
verificationLevel = VerificationLevels.indexOf(verificationLevel);
|
||||
if (typeof verificationLevel === 'string') {
|
||||
verificationLevel = VerificationLevels[verificationLevel];
|
||||
}
|
||||
if (typeof defaultMessageNotifications !== 'undefined' && typeof defaultMessageNotifications !== 'number') {
|
||||
defaultMessageNotifications = DefaultMessageNotifications.indexOf(defaultMessageNotifications);
|
||||
if (typeof defaultMessageNotifications === 'string') {
|
||||
defaultMessageNotifications = DefaultMessageNotificationLevels[defaultMessageNotifications];
|
||||
}
|
||||
if (typeof explicitContentFilter !== 'undefined' && typeof explicitContentFilter !== 'number') {
|
||||
explicitContentFilter = ExplicitContentFilterLevels.indexOf(explicitContentFilter);
|
||||
if (typeof explicitContentFilter === 'string') {
|
||||
explicitContentFilter = ExplicitContentFilterLevels[explicitContentFilter];
|
||||
}
|
||||
for (const channel of channels) {
|
||||
if (channel.type) channel.type = ChannelTypes[channel.type.toUpperCase()];
|
||||
|
||||
@@ -41,7 +41,7 @@ class ClientPresence extends Presence {
|
||||
if (!activity.type) activity.type = 0;
|
||||
|
||||
data.activities.push({
|
||||
type: typeof activity.type === 'number' ? activity.type : ActivityTypes.indexOf(activity.type),
|
||||
type: typeof activity.type === 'number' ? activity.type : ActivityTypes[activity.type],
|
||||
name: activity.name,
|
||||
url: activity.url,
|
||||
});
|
||||
@@ -50,7 +50,7 @@ class ClientPresence extends Presence {
|
||||
data.activities.push(
|
||||
...this.activities.map(a => ({
|
||||
name: a.name,
|
||||
type: ActivityTypes.indexOf(a.type),
|
||||
type: ActivityTypes[a.type],
|
||||
url: a.url ?? undefined,
|
||||
})),
|
||||
);
|
||||
|
||||
@@ -20,7 +20,7 @@ const VoiceStateManager = require('../managers/VoiceStateManager');
|
||||
const Collection = require('../util/Collection');
|
||||
const {
|
||||
ChannelTypes,
|
||||
DefaultMessageNotifications,
|
||||
DefaultMessageNotificationLevels,
|
||||
PartialTypes,
|
||||
VerificationLevels,
|
||||
ExplicitContentFilterLevels,
|
||||
@@ -280,11 +280,10 @@ class Guild extends BaseGuild {
|
||||
this.joinedTimestamp = data.joined_at ? new Date(data.joined_at).getTime() : this.joinedTimestamp;
|
||||
|
||||
/**
|
||||
* The value set for the guild's default message notifications
|
||||
* @type {DefaultMessageNotifications|number}
|
||||
* The default message notification level of the guild
|
||||
* @type {DefaultMessageNotificationLevel}
|
||||
*/
|
||||
this.defaultMessageNotifications =
|
||||
DefaultMessageNotifications[data.default_message_notifications] || data.default_message_notifications;
|
||||
this.defaultMessageNotifications = DefaultMessageNotificationLevels[data.default_message_notifications];
|
||||
|
||||
/**
|
||||
* The value set for the guild's system channel flags
|
||||
@@ -831,7 +830,8 @@ class Guild extends BaseGuild {
|
||||
* @property {Base64Resolvable} [splash] The invite splash image of the guild
|
||||
* @property {Base64Resolvable} [discoverySplash] The discovery splash image of the guild
|
||||
* @property {Base64Resolvable} [banner] The banner of the guild
|
||||
* @property {DefaultMessageNotifications|number} [defaultMessageNotifications] The default message notifications
|
||||
* @property {DefaultMessageNotificationLevel|number} [defaultMessageNotifications] The default message notification
|
||||
* level of the guild
|
||||
* @property {SystemChannelFlagsResolvable} [systemChannelFlags] The system channel flags of the guild
|
||||
* @property {ChannelResolvable} [rulesChannel] The rules channel of the guild
|
||||
* @property {ChannelResolvable} [publicUpdatesChannel] The community updates channel of the guild
|
||||
@@ -859,8 +859,8 @@ class Guild extends BaseGuild {
|
||||
if (typeof data.verificationLevel !== 'undefined') {
|
||||
_data.verification_level =
|
||||
typeof data.verificationLevel === 'number'
|
||||
? Number(data.verificationLevel)
|
||||
: VerificationLevels.indexOf(data.verificationLevel);
|
||||
? data.verificationLevel
|
||||
: VerificationLevels[data.verificationLevel];
|
||||
}
|
||||
if (typeof data.afkChannel !== 'undefined') {
|
||||
_data.afk_channel_id = this.client.channels.resolveID(data.afkChannel);
|
||||
@@ -878,13 +878,13 @@ class Guild extends BaseGuild {
|
||||
_data.explicit_content_filter =
|
||||
typeof data.explicitContentFilter === 'number'
|
||||
? data.explicitContentFilter
|
||||
: ExplicitContentFilterLevels.indexOf(data.explicitContentFilter);
|
||||
: ExplicitContentFilterLevels[data.explicitContentFilter];
|
||||
}
|
||||
if (typeof data.defaultMessageNotifications !== 'undefined') {
|
||||
_data.default_message_notifications =
|
||||
typeof data.defaultMessageNotifications === 'string'
|
||||
? DefaultMessageNotifications.indexOf(data.defaultMessageNotifications)
|
||||
: data.defaultMessageNotifications;
|
||||
typeof data.defaultMessageNotifications === 'number'
|
||||
? data.defaultMessageNotifications
|
||||
: DefaultMessageNotificationLevels[data.defaultMessageNotifications];
|
||||
}
|
||||
if (typeof data.systemChannelFlags !== 'undefined') {
|
||||
_data.system_channel_flags = SystemChannelFlags.resolve(data.systemChannelFlags);
|
||||
@@ -921,7 +921,7 @@ class Guild extends BaseGuild {
|
||||
/* eslint-disable max-len */
|
||||
/**
|
||||
* Edits the setting of the default message notifications of the guild.
|
||||
* @param {DefaultMessageNotifications|number} defaultMessageNotifications The new setting for the default message notifications
|
||||
* @param {DefaultMessageNotificationLevel|number} defaultMessageNotifications The new default message notification level of the guild
|
||||
* @param {string} [reason] Reason for changing the setting of the default message notifications
|
||||
* @returns {Promise<Guild>}
|
||||
*/
|
||||
|
||||
@@ -169,7 +169,7 @@ class Activity {
|
||||
* The type of the activity status
|
||||
* @type {ActivityType}
|
||||
*/
|
||||
this.type = ActivityTypes[data.type] || ActivityTypes[ActivityTypes.indexOf(data.type)];
|
||||
this.type = typeof data.type === 'number' ? ActivityTypes[data.type] : data.type;
|
||||
|
||||
/**
|
||||
* If the activity is being streamed, a link to the stream
|
||||
|
||||
@@ -31,7 +31,7 @@ class Sticker extends Base {
|
||||
|
||||
/**
|
||||
* The format of the sticker
|
||||
* @type {StickerFormatTypes}
|
||||
* @type {StickerFormatType}
|
||||
*/
|
||||
this.format = StickerFormatTypes[sticker.format_type];
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ class TeamMember extends Base {
|
||||
|
||||
/**
|
||||
* The permissions this Team Member has with regard to the team
|
||||
* @type {MembershipStates}
|
||||
* @type {MembershipState}
|
||||
*/
|
||||
this.membershipState = MembershipStates[data.membership_state];
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ class Webhook {
|
||||
|
||||
/**
|
||||
* The type of the webhook
|
||||
* @type {WebhookTypes}
|
||||
* @type {WebhookType}
|
||||
*/
|
||||
this.type = WebhookTypes[data.type];
|
||||
|
||||
|
||||
@@ -488,17 +488,17 @@ exports.SystemMessageTypes = exports.MessageTypes.filter(
|
||||
);
|
||||
|
||||
/**
|
||||
* <info>Bots cannot set a `CUSTOM_STATUS`, it is only for custom statuses received from users</info>
|
||||
* <info>Bots cannot set a `CUSTOM` activity type, it is only for custom statuses received from users</info>
|
||||
* The type of an activity of a users presence, e.g. `PLAYING`. Here are the available types:
|
||||
* * PLAYING
|
||||
* * STREAMING
|
||||
* * LISTENING
|
||||
* * WATCHING
|
||||
* * CUSTOM_STATUS
|
||||
* * CUSTOM
|
||||
* * COMPETING
|
||||
* @typedef {string} ActivityType
|
||||
*/
|
||||
exports.ActivityTypes = ['PLAYING', 'STREAMING', 'LISTENING', 'WATCHING', 'CUSTOM_STATUS', 'COMPETING'];
|
||||
exports.ActivityTypes = createEnum(['PLAYING', 'STREAMING', 'LISTENING', 'WATCHING', 'CUSTOM', 'COMPETING']);
|
||||
|
||||
exports.ChannelTypes = createEnum([
|
||||
'TEXT',
|
||||
@@ -559,7 +559,7 @@ exports.Colors = {
|
||||
* * ALL_MEMBERS
|
||||
* @typedef {string} ExplicitContentFilterLevel
|
||||
*/
|
||||
exports.ExplicitContentFilterLevels = ['DISABLED', 'MEMBERS_WITHOUT_ROLES', 'ALL_MEMBERS'];
|
||||
exports.ExplicitContentFilterLevels = createEnum(['DISABLED', 'MEMBERS_WITHOUT_ROLES', 'ALL_MEMBERS']);
|
||||
|
||||
/**
|
||||
* The value set for the verification levels for a guild:
|
||||
@@ -570,7 +570,7 @@ exports.ExplicitContentFilterLevels = ['DISABLED', 'MEMBERS_WITHOUT_ROLES', 'ALL
|
||||
* * VERY_HIGH
|
||||
* @typedef {string} VerificationLevel
|
||||
*/
|
||||
exports.VerificationLevels = ['NONE', 'LOW', 'MEDIUM', 'HIGH', 'VERY_HIGH'];
|
||||
exports.VerificationLevels = createEnum(['NONE', 'LOW', 'MEDIUM', 'HIGH', 'VERY_HIGH']);
|
||||
|
||||
/**
|
||||
* An error encountered while performing an API request. Here are the potential errors:
|
||||
@@ -717,45 +717,35 @@ exports.APIErrors = {
|
||||
};
|
||||
|
||||
/**
|
||||
* The value set for a guild's default message notifications, e.g. `ALL`. Here are the available types:
|
||||
* * ALL
|
||||
* * MENTIONS
|
||||
* @typedef {string} DefaultMessageNotifications
|
||||
* The value set for a guild's default message notifications, e.g. `ALL_MESSAGES`. Here are the available types:
|
||||
* * ALL_MESSAGES
|
||||
* * ONLY_MENTIONS
|
||||
* @typedef {string} DefaultMessageNotificationLevel
|
||||
*/
|
||||
exports.DefaultMessageNotifications = ['ALL', 'MENTIONS'];
|
||||
exports.DefaultMessageNotificationLevels = createEnum(['ALL_MESSAGES', 'ONLY_MENTIONS']);
|
||||
|
||||
/**
|
||||
* The value set for a team members's membership state:
|
||||
* * INVITED
|
||||
* * ACCEPTED
|
||||
* @typedef {string} MembershipStates
|
||||
* @typedef {string} MembershipState
|
||||
*/
|
||||
exports.MembershipStates = [
|
||||
// They start at 1
|
||||
null,
|
||||
'INVITED',
|
||||
'ACCEPTED',
|
||||
];
|
||||
exports.MembershipStates = createEnum([null, 'INVITED', 'ACCEPTED']);
|
||||
|
||||
/**
|
||||
* The value set for a webhook's type:
|
||||
* * Incoming
|
||||
* * Channel Follower
|
||||
* @typedef {string} WebhookTypes
|
||||
* @typedef {string} WebhookType
|
||||
*/
|
||||
exports.WebhookTypes = [
|
||||
// They start at 1
|
||||
null,
|
||||
'Incoming',
|
||||
'Channel Follower',
|
||||
];
|
||||
exports.WebhookTypes = createEnum([null, 'Incoming', 'Channel Follower']);
|
||||
|
||||
/**
|
||||
* The value set for a sticker's type:
|
||||
* * PNG
|
||||
* * APNG
|
||||
* * LOTTIE
|
||||
* @typedef {string} StickerFormatTypes
|
||||
* @typedef {string} StickerFormatType
|
||||
*/
|
||||
exports.StickerFormatTypes = createEnum([null, 'PNG', 'APNG', 'LOTTIE']);
|
||||
|
||||
|
||||
77
typings/index.d.ts
vendored
77
typings/index.d.ts
vendored
@@ -1,3 +1,12 @@
|
||||
declare enum ActivityTypes {
|
||||
PLAYING = 0,
|
||||
STREAMING = 1,
|
||||
LISTENING = 2,
|
||||
WATCHING = 3,
|
||||
CUSTOM = 4,
|
||||
COMPETING = 5,
|
||||
}
|
||||
|
||||
declare enum ChannelType {
|
||||
text = 0,
|
||||
dm = 1,
|
||||
@@ -21,6 +30,17 @@ declare enum ChannelTypes {
|
||||
STAGE = 13,
|
||||
}
|
||||
|
||||
declare enum DefaultMessageNotificationLevels {
|
||||
ALL_MESSAGES = 0,
|
||||
ONLY_MENTIONS = 1,
|
||||
}
|
||||
|
||||
declare enum ExplicitContentFilterLevels {
|
||||
DISABLED = 0,
|
||||
MEMBERS_WITHOUT_ROLES = 1,
|
||||
ALL_MEMBERS = 2,
|
||||
}
|
||||
|
||||
declare enum InteractionResponseTypes {
|
||||
PONG = 1,
|
||||
CHANNEL_MESSAGE_WITH_SOURCE = 4,
|
||||
@@ -40,6 +60,11 @@ declare enum InviteTargetType {
|
||||
EMBEDDED_APPLICATION = 2,
|
||||
}
|
||||
|
||||
declare enum MembershipStates {
|
||||
INVITED = 1,
|
||||
ACCEPTED = 2,
|
||||
}
|
||||
|
||||
declare enum MessageButtonStyles {
|
||||
PRIMARY = 1,
|
||||
SECONDARY = 2,
|
||||
@@ -81,6 +106,19 @@ declare enum StickerFormatTypes {
|
||||
LOTTIE = 3,
|
||||
}
|
||||
|
||||
declare enum VerificationLevels {
|
||||
NONE = 0,
|
||||
LOW = 1,
|
||||
MEDIUM = 2,
|
||||
HIGH = 3,
|
||||
VERY_HIGH = 4,
|
||||
}
|
||||
|
||||
declare enum WebhookTypes {
|
||||
Incoming = 1,
|
||||
'Channel Follower' = 2,
|
||||
}
|
||||
|
||||
type Awaited<T> = T | Promise<T>;
|
||||
|
||||
declare module 'discord.js' {
|
||||
@@ -662,13 +700,13 @@ declare module 'discord.js' {
|
||||
InviteScopes: InviteScope[];
|
||||
MessageTypes: MessageType[];
|
||||
SystemMessageTypes: SystemMessageType[];
|
||||
ActivityTypes: ActivityType[];
|
||||
ActivityTypes: typeof ActivityTypes;
|
||||
StickerFormatTypes: typeof StickerFormatTypes;
|
||||
OverwriteTypes: typeof OverwriteTypes;
|
||||
ExplicitContentFilterLevels: ExplicitContentFilterLevel[];
|
||||
DefaultMessageNotifications: DefaultMessageNotifications[];
|
||||
VerificationLevels: VerificationLevel[];
|
||||
MembershipStates: 'INVITED' | 'ACCEPTED';
|
||||
ExplicitContentFilterLevels: typeof ExplicitContentFilterLevels;
|
||||
DefaultMessageNotificationLevels: typeof DefaultMessageNotificationLevels;
|
||||
VerificationLevels: typeof VerificationLevels;
|
||||
MembershipStates: typeof MembershipStates;
|
||||
ApplicationCommandOptionTypes: typeof ApplicationCommandOptionTypes;
|
||||
ApplicationCommandPermissionTypes: typeof ApplicationCommandPermissionTypes;
|
||||
InteractionTypes: typeof InteractionTypes;
|
||||
@@ -678,6 +716,7 @@ declare module 'discord.js' {
|
||||
MFALevels: typeof MFALevels;
|
||||
NSFWLevels: typeof NSFWLevels;
|
||||
PrivacyLevels: typeof PrivacyLevels;
|
||||
WebhookTypes: typeof WebhookTypes;
|
||||
};
|
||||
|
||||
export class DataResolver {
|
||||
@@ -740,7 +779,7 @@ declare module 'discord.js' {
|
||||
public bans: GuildBanManager;
|
||||
public channels: GuildChannelManager;
|
||||
public commands: GuildApplicationCommandManager;
|
||||
public defaultMessageNotifications: DefaultMessageNotifications | number;
|
||||
public defaultMessageNotifications: DefaultMessageNotificationLevel | number;
|
||||
public deleted: boolean;
|
||||
public description: string | null;
|
||||
public discoverySplash: string | null;
|
||||
@@ -805,7 +844,7 @@ declare module 'discord.js' {
|
||||
public setBanner(banner: Base64Resolvable | null, reason?: string): Promise<Guild>;
|
||||
public setChannelPositions(channelPositions: readonly ChannelPosition[]): Promise<Guild>;
|
||||
public setDefaultMessageNotifications(
|
||||
defaultMessageNotifications: DefaultMessageNotifications | number,
|
||||
defaultMessageNotifications: DefaultMessageNotificationLevel | number,
|
||||
reason?: string,
|
||||
): Promise<Guild>;
|
||||
public setDiscoverySplash(discoverySplash: Base64Resolvable | null, reason?: string): Promise<Guild>;
|
||||
@@ -1762,7 +1801,7 @@ declare module 'discord.js' {
|
||||
public team: Team;
|
||||
public readonly id: Snowflake;
|
||||
public permissions: string[];
|
||||
public membershipState: MembershipStates;
|
||||
public membershipState: MembershipState;
|
||||
public user: User;
|
||||
|
||||
public toString(): string;
|
||||
@@ -1931,7 +1970,7 @@ declare module 'discord.js' {
|
||||
public sourceGuild: Guild | unknown | null;
|
||||
public sourceChannel: Channel | unknown | null;
|
||||
public token: string | null;
|
||||
public type: WebhookTypes;
|
||||
public type: WebhookType;
|
||||
}
|
||||
|
||||
export class WebhookClient extends WebhookMixin(BaseClient) {
|
||||
@@ -2437,7 +2476,7 @@ declare module 'discord.js' {
|
||||
|
||||
type ActivityPlatform = 'desktop' | 'samsung' | 'xbox';
|
||||
|
||||
type ActivityType = 'PLAYING' | 'STREAMING' | 'LISTENING' | 'WATCHING' | 'CUSTOM_STATUS' | 'COMPETING';
|
||||
type ActivityType = keyof typeof ActivityTypes;
|
||||
|
||||
interface AddGuildMemberOptions {
|
||||
accessToken: string;
|
||||
@@ -2852,7 +2891,7 @@ declare module 'discord.js' {
|
||||
binary: string;
|
||||
}
|
||||
|
||||
type DefaultMessageNotifications = 'ALL' | 'MENTIONS';
|
||||
type DefaultMessageNotificationLevel = keyof typeof DefaultMessageNotificationLevels;
|
||||
|
||||
interface EditGuildTemplateOptions {
|
||||
name?: string;
|
||||
@@ -2894,7 +2933,7 @@ declare module 'discord.js' {
|
||||
codeBlockContent?: boolean;
|
||||
}
|
||||
|
||||
type ExplicitContentFilterLevel = 'DISABLED' | 'MEMBERS_WITHOUT_ROLES' | 'ALL_MEMBERS';
|
||||
type ExplicitContentFilterLevel = keyof typeof ExplicitContentFilterLevels;
|
||||
|
||||
interface Extendable {
|
||||
GuildEmoji: typeof GuildEmoji;
|
||||
@@ -3072,7 +3111,7 @@ declare module 'discord.js' {
|
||||
afkChannelID?: Snowflake | number;
|
||||
afkTimeout?: number;
|
||||
channels?: PartialChannelData[];
|
||||
defaultMessageNotifications?: DefaultMessageNotifications | number;
|
||||
defaultMessageNotifications?: DefaultMessageNotificationLevel | number;
|
||||
explicitContentFilter?: ExplicitContentFilterLevel | number;
|
||||
icon?: BufferResolvable | Base64Resolvable | null;
|
||||
roles?: PartialRoleData[];
|
||||
@@ -3090,7 +3129,7 @@ declare module 'discord.js' {
|
||||
name?: string;
|
||||
verificationLevel?: VerificationLevel | number;
|
||||
explicitContentFilter?: ExplicitContentFilterLevel | number;
|
||||
defaultMessageNotifications?: DefaultMessageNotifications | number;
|
||||
defaultMessageNotifications?: DefaultMessageNotificationLevel | number;
|
||||
afkChannel?: ChannelResolvable;
|
||||
systemChannel?: ChannelResolvable;
|
||||
systemChannelFlags?: SystemChannelFlagsResolvable;
|
||||
@@ -3281,7 +3320,7 @@ declare module 'discord.js' {
|
||||
stack: string;
|
||||
}
|
||||
|
||||
type MembershipStates = 'INVITED' | 'ACCEPTED';
|
||||
type MembershipState = keyof typeof MembershipStates;
|
||||
|
||||
type MessageActionRowComponent = MessageButton;
|
||||
|
||||
@@ -3805,7 +3844,7 @@ declare module 'discord.js' {
|
||||
public readonly createdTimestamp: number;
|
||||
public readonly createdAt: Date;
|
||||
public description: string;
|
||||
public format: StickerFormatTypes;
|
||||
public format: StickerFormatType;
|
||||
public id: Snowflake;
|
||||
public name: string;
|
||||
public packID: Snowflake;
|
||||
@@ -3813,6 +3852,8 @@ declare module 'discord.js' {
|
||||
public readonly url: string;
|
||||
}
|
||||
|
||||
type StickerFormatType = keyof typeof StickerFormatTypes;
|
||||
|
||||
type SystemChannelFlagsString =
|
||||
| 'SUPPRESS_JOIN_NOTIFICATIONS'
|
||||
| 'SUPPRESS_PREMIUM_SUBSCRIPTIONS'
|
||||
@@ -3857,7 +3898,7 @@ declare module 'discord.js' {
|
||||
uses: number | null;
|
||||
}
|
||||
|
||||
type VerificationLevel = 'NONE' | 'LOW' | 'MEDIUM' | 'HIGH' | 'VERY_HIGH';
|
||||
type VerificationLevel = keyof typeof VerificationLevels;
|
||||
|
||||
type WebhookClientOptions = Pick<
|
||||
ClientOptions,
|
||||
@@ -3880,7 +3921,7 @@ declare module 'discord.js' {
|
||||
avatarURL?: string;
|
||||
}
|
||||
|
||||
type WebhookTypes = 'Incoming' | 'Channel Follower';
|
||||
type WebhookType = keyof typeof WebhookTypes;
|
||||
|
||||
interface WebSocketOptions {
|
||||
large_threshold?: number;
|
||||
|
||||
Reference in New Issue
Block a user