discord.js-selfbot-v13
Version:
A unofficial discord.js fork for creating selfbots [Based on discord.js v13]
1,285 lines (1,187 loc) • 312 kB
TypeScript
import {
blockQuote,
bold,
channelMention,
codeBlock,
ContextMenuCommandBuilder,
formatEmoji,
hideLinkEmbed,
hyperlink,
inlineCode,
italic,
quote,
roleMention,
SlashCommandBuilder,
spoiler,
strikethrough,
time,
TimestampStyles,
TimestampStylesString,
underscore,
userMention,
} from '@discordjs/builders';
import { Collection } from '@discordjs/collection';
import {
APIActionRowComponent,
APIApplicationCommandInteractionData,
APIApplicationCommandOption,
APIApplicationCommandPermission,
APIAuditLogChange,
APIButtonComponent,
APIEmbed,
APIEmoji,
APIInteractionDataResolvedChannel,
APIInteractionDataResolvedGuildMember,
APIInteractionGuildMember,
APIMessage,
APIMessageActionRowComponent,
APIMessageComponent,
APIModalActionRowComponent,
APIOverwrite,
APIPartialChannel,
APIPartialEmoji,
APIPartialGuild,
APIRole,
APISelectMenuComponent,
APITemplateSerializedSourceGuild,
APIUser,
GatewayVoiceServerUpdateDispatchData,
GatewayVoiceStateUpdateDispatchData,
MessageActivityType,
RESTPostAPIApplicationCommandsJSONBody,
Snowflake,
LocalizationMap,
LocaleString,
APIGuildMember,
APIChannel,
TeamMemberRole,
APIPoll,
APIPollAnswer,
GuildScheduledEventRecurrenceRuleWeekday,
GuildScheduledEventRecurrenceRuleMonth,
GuildScheduledEventRecurrenceRuleFrequency,
APIChatInputApplicationCommandInteractionData,
APIContextMenuInteractionData,
ReactionType,
VoiceChannelEffectSendAnimationType,
GatewayVoiceChannelEffectSendDispatchData,
} from 'discord-api-types/v10';
import { ChildProcess, ChildProcessWithoutNullStreams } from 'node:child_process';
import { EventEmitter } from 'node:events';
import { AgentOptions } from 'node:https';
import { Response, ProxyAgent } from 'undici';
import { Readable, Writable, Stream } from 'node:stream';
import { MessagePort, Worker } from 'node:worker_threads';
import { authenticator } from 'otplib';
import { CookieJar } from 'tough-cookie';
import { RtpPacket } from 'werift-rtp';
import * as WebSocket from 'ws';
import {
ActivityTypes,
ApplicationCommandOptionTypes,
ApplicationCommandPermissionTypes,
ApplicationCommandTypes,
AutoModerationActionTypes,
AutoModerationRuleEventTypes,
AutoModerationRuleKeywordPresetTypes,
AutoModerationRuleTriggerTypes,
ChannelTypes,
DefaultMessageNotificationLevels,
ExplicitContentFilterLevels,
InteractionResponseTypes,
InteractionTypes,
InviteTargetTypes,
MembershipStates,
MessageButtonStyles,
MessageComponentTypes,
MessageComponentInteractables,
MessageTypes,
MFALevels,
NSFWLevels,
OverwriteTypes,
PremiumTiers,
PrivacyLevels,
StickerFormatTypes,
StickerTypes,
TextInputStyles,
VerificationLevels,
WebhookTypes,
GuildScheduledEventEntityTypes,
GuildScheduledEventStatuses,
GuildScheduledEventPrivacyLevels,
VideoQualityModes,
SortOrderTypes,
ForumLayoutTypes,
ApplicationRoleConnectionMetadataTypes,
RelationshipTypes,
SelectMenuComponentTypes,
InviteTypes,
PollLayoutTypes,
ReactionTypes,
MessageReferenceTypes,
SeparatorSpacingSizes,
ApplicationType,
} from './enums';
import {
APIApplicationRoleConnectionMetadata,
APIAutoModerationRule,
GatewayAutoModerationActionExecutionDispatchData,
RawActivityData,
RawAnonymousGuildData,
RawApplicationCommandData,
RawApplicationData,
RawBaseGuildData,
RawChannelData,
RawDMChannelData,
RawEmojiData,
RawGuildAuditLogData,
RawGuildAuditLogEntryData,
RawGuildBanData,
RawGuildChannelData,
RawGuildData,
RawGuildEmojiData,
RawGuildMemberData,
RawGuildPreviewData,
RawGuildScheduledEventData,
RawGuildTemplateData,
RawIntegrationApplicationData,
RawIntegrationData,
RawInteractionData,
RawInviteData,
RawInviteGuildData,
RawInviteStageInstance,
RawMessageAttachmentData,
RawMessageButtonInteractionData,
RawMessageComponentInteractionData,
RawMessageData,
RawMessagePayloadData,
RawMessageReactionData,
RawMessageSelectMenuInteractionData,
RawModalSubmitInteractionData,
RawOAuth2GuildData,
RawPartialGroupDMChannelData,
RawPartialMessageData,
RawPermissionOverwriteData,
RawPresenceData,
RawReactionEmojiData,
RawRichPresenceAssets,
RawRoleData,
RawStageInstanceData,
RawStickerData,
RawStickerPackData,
RawTeamData,
RawTeamMemberData,
RawTextInputComponentData,
RawThreadChannelData,
RawThreadMemberData,
RawTypingData,
RawUserData,
RawVoiceRegionData,
RawVoiceStateData,
RawWebhookData,
RawWelcomeChannelData,
RawWelcomeScreenData,
RawWidgetData,
RawWidgetMemberData,
APIUnfurledMediaItem,
APIContainerComponent,
APIFileComponent,
APISectionComponent,
APISeparatorComponent,
APIThumbnailComponent,
APITextDisplayComponent,
APIMediaGalleryComponent,
APIMediaGalleryItem,
} from './rawDataTypes';
import { Socket } from 'node:dgram';
//#region Classes
// RPC by aiko-chan-ai
export interface RichButton {
name: string;
url: string;
}
export class RichPresence extends Activity {
public constructor(client: Client, data?: object);
public metadata: RichPresenceMetadata;
public setAssetsLargeImage(image?: string): this;
public setAssetsLargeText(text?: string): this;
public setAssetsSmallImage(image?: string): this;
public setAssetsSmallText(text?: string): this;
public setName(name?: string): this;
public setURL(url?: string): this;
public setType(type?: ActivityType): this;
public setApplicationId(id?: Snowflake): this;
public setDetails(details?: string): this;
public setState(state?: string): this;
public setParty(party?: { max: number; current: number; id?: string }): this;
public setStartTimestamp(timestamp: Date | number | null): this;
public setEndTimestamp(timestamp: Date | number | null): this;
public setButtons(...button: RichButton[]): this;
public addButton(name: string, url: string): this;
public setJoinSecret(join?: string): this;
public setPlatform(platform?: ActivityPlatform): this;
public static getExternal(client: Client, applicationId: Snowflake, ...images: string[]): Promise<ExternalAssets[]>;
}
export class DiscordAuthWebsocket extends EventEmitter {
constructor();
public token: string;
public readonly user: {
id: Snowflake;
username: string;
discriminator: number;
avatar: string;
};
public readonly exprire: Date;
public readonly AuthURL: string;
public connect(client?: Client): Promise<void>;
public destroy(): void;
public generateQR(): void;
public on(event: 'ready', listener: (client: this) => void): this;
public on(event: 'finish', listener: (token: string) => void): this;
public on(event: 'cancel' | 'pending', listener: (user: RawUserData) => void): this;
public on(event: 'closed', listener: () => void): this;
public on(event: string, listener: (...args: any[]) => Awaitable<void>): this;
}
export interface ExternalAssets {
url: string;
external_asset_path: string;
}
export interface RichPresenceMetadata {
album_id?: string;
artist_ids?: string[];
context_uri?: string;
button_urls?: string[];
}
export class SpotifyRPC extends RichPresence {
public constructor(client: Client, data?: object);
public setSongId(id: string): this;
public addArtistId(id: string): this;
public setArtistIds(...ids: string[]): this;
public setAlbumId(id: string): this;
}
export class CustomStatus extends Activity {
public constructor(client: Client, data?: object);
public setEmoji(emoji?: EmojiIdentifierResolvable): this;
public setState(state: string): this;
}
export class Activity {
public constructor(presence: Presence, data?: RawActivityData);
public readonly presence: Presence;
public applicationId: Snowflake | null;
public assets: RichPresenceAssets;
public buttons: string[];
public readonly createdAt: Date;
public createdTimestamp: number;
public details: string | null;
public emoji: EmojiIdentifierResolvable | null;
public flags: Readonly<ActivityFlags>;
public id: string;
public name: string;
public party: {
id: string | null;
size: [number, number];
} | null;
public platform: ActivityPlatform | null;
public sessionId: string | null;
public state: string | null;
public syncId: string | null;
public timestamps: {
start: number | null;
end: number | null;
} | null;
public type: ActivityType;
public url: string | null;
public equals(activity: Activity): boolean;
public toJSON(): ActivityOptions;
public toString(): string;
}
export class ActivityFlags extends BitField<ActivityFlagsString> {
public static FLAGS: Record<ActivityFlagsString, number>;
public static resolve(bit?: BitFieldResolvable<ActivityFlagsString, number>): number;
}
export class PurchasedFlags extends BitField<PurchasedFlagsString> {
public static FLAGS: Record<PurchasedFlagsString, number>;
public static resolve(bit?: BitFieldResolvable<PurchasedFlagsString, number>): number;
}
export class PremiumUsageFlags extends BitField<PremiumUsageFlagsString> {
public static FLAGS: Record<PremiumUsageFlagsString, number>;
public static resolve(bit?: BitFieldResolvable<PremiumUsageFlagsString, number>): number;
}
export class InviteFlags extends BitField<InviteFlagsString> {
public static FLAGS: Record<InviteFlagsString, number>;
public static resolve(bit?: BitFieldResolvable<InviteFlagsString, number>): number;
}
export abstract class AnonymousGuild extends BaseGuild {
protected constructor(client: Client, data: RawAnonymousGuildData, immediatePatch?: boolean);
public banner: string | null;
public description: string | null;
public nsfwLevel: NSFWLevel;
public premiumSubscriptionCount: number | null;
public splash: string | null;
public vanityURLCode: string | null;
public verificationLevel: VerificationLevel;
public bannerURL(options?: StaticImageURLOptions): string | null;
public splashURL(options?: StaticImageURLOptions): string | null;
}
export abstract class Application extends Base {
protected constructor(client: Client, data: RawApplicationData);
public readonly createdAt: Date;
public readonly createdTimestamp: number;
public description: string | null;
public icon: string | null;
public id: Snowflake;
public name: string | null;
public termsOfServiceURL: string | null;
public privacyPolicyURL: string | null;
public verifyKey: string | null;
public roleConnectionsVerificationURL: string | null;
public approximateGuildCount: number | null;
/** @deprecated */
public botPublic: boolean | null;
/** @deprecated */
public botRequireCodeGrant: boolean | null;
public commands: ApplicationCommandManager;
public cover: string | null;
public flags: Readonly<ApplicationFlags>;
public guildId: Snowflake | null;
public readonly guild: Guild | null;
public tags: string[];
public installParams: ClientApplicationInstallParams | null;
public customInstallURL: string | null;
public owner: User | Team | null;
public readonly partial: boolean;
public rpcOrigins: string[];
public splash: string | null;
public type: ApplicationType | null;
public primarySkuId: Snowflake | null;
public eulaId: Snowflake | null;
public slug: string | null;
public aliases: string[];
public executables: { os: string; name: string; is_launcher: boolean }[] | null;
public thirdPartySkus: { id: Snowflake | null; sku: string | null; distributor: string }[] | null;
public hook: boolean | null;
public overlay: boolean | null;
public overlayMethods: number | null;
public overlayWarn: boolean | null;
public overlayCompatibilityHook: boolean | null;
public bot: PartialUser | null;
public developers: { id: Snowflake; name: string }[] | null;
public publishers: { id: Snowflake; name: string }[] | null;
public redirectUris: string[] | null;
public deeplinkUri: string | null;
public integrationPublic: boolean | null;
public integrationRequireCodeGrant: boolean | null;
public botDisabled: boolean | null;
public botQuarantined: boolean | null;
public approximateUserInstallCount: number | null;
public approximateUserAuthorizationCount: number | null;
public internalGuildRestriction: number | null;
public interactionsEndpointUrl: string | null;
public interactionsVersion: number | null;
public interactionsEventTypes: string[] | null;
public eventWebhooksStatus: number | null;
public eventWebhooksUrl: string | null;
public eventWebhooksTypes: string[] | null;
public explicitContentFilter: number | null;
public integrationTypesConfig: Record<
number,
{ oauth2_install_params: ClientApplicationInstallParams | null }
> | null;
public isVerified: boolean | null;
public verificationState: number | null;
public storeApplicationState: number | null;
public rpcApplicationState: number | null;
public creatorMonetizationState: number | null;
public isDiscoverable: boolean | null;
public discoverabilityState: number | null;
public discoveryEligibilityFlags: number | null;
public isMonetized: boolean | null;
public storefrontAvailable: boolean | null;
public monetizationState: number | null;
public monetizationEligibilityFlags: number | null;
public maxParticipants: number | null;
public fetch(): Promise<Application>;
public fetchRoleConnectionMetadataRecords(): Promise<ApplicationRoleConnectionMetadata[]>;
public coverURL(options?: StaticImageURLOptions): string | null;
/** @deprecated This method is deprecated as it is unsupported and will be removed in the next major version. */
public fetchAssets(): Promise<ApplicationAsset[]>;
public iconURL(options?: StaticImageURLOptions): string | null;
public toJSON(): unknown;
public toString(): string | null;
}
export class ApplicationCommand<PermissionsFetchType = {}> extends Base {
private constructor(client: Client, data: RawApplicationCommandData, guild?: Guild, guildId?: Snowflake);
public applicationId: Snowflake;
public readonly createdAt: Date;
public readonly createdTimestamp: number;
/** @deprecated Use {@link defaultMemberPermissions} and {@link dmPermission} instead. */
public defaultPermission: boolean;
public defaultMemberPermissions: Readonly<Permissions> | null;
public description: string;
public descriptionLocalizations: LocalizationMap | null;
public descriptionLocalized: string | null;
public dmPermission: boolean | null;
public guild: Guild | null;
public guildId: Snowflake | null;
public readonly manager: ApplicationCommandManager;
public id: Snowflake;
public name: string;
public nameLocalizations: LocalizationMap | null;
public nameLocalized: string | null;
public options: (ApplicationCommandOption & { nameLocalized?: string; descriptionLocalized?: string })[];
public permissions: ApplicationCommandPermissionsManager<
PermissionsFetchType,
PermissionsFetchType,
PermissionsFetchType,
Guild | null,
Snowflake
>;
public type: ApplicationCommandType;
public version: Snowflake;
public delete(): Promise<ApplicationCommand<PermissionsFetchType>>;
public edit(data: Partial<ApplicationCommandData>): Promise<ApplicationCommand<PermissionsFetchType>>;
public setName(name: string): Promise<ApplicationCommand<PermissionsFetchType>>;
public setNameLocalizations(nameLocalizations: LocalizationMap): Promise<ApplicationCommand<PermissionsFetchType>>;
public setDescription(description: string): Promise<ApplicationCommand<PermissionsFetchType>>;
public setDescriptionLocalizations(
descriptionLocalizations: LocalizationMap,
): Promise<ApplicationCommand<PermissionsFetchType>>;
/** @deprecated Use {@link setDefaultMemberPermissions} and {@link setDMPermission} instead. */
public setDefaultPermission(defaultPermission?: boolean): Promise<ApplicationCommand<PermissionsFetchType>>;
public setDefaultMemberPermissions(
defaultMemberPermissions: PermissionResolvable | null,
): Promise<ApplicationCommand<PermissionsFetchType>>;
public setDMPermission(dmPermission?: boolean): Promise<ApplicationCommand<PermissionsFetchType>>;
public setOptions(options: ApplicationCommandOptionData[]): Promise<ApplicationCommand<PermissionsFetchType>>;
public equals(
command: ApplicationCommand | ApplicationCommandData | RawApplicationCommandData,
enforceOptionorder?: boolean,
): boolean;
public static optionsEqual(
existing: ApplicationCommandOption[],
options: ApplicationCommandOption[] | ApplicationCommandOptionData[] | APIApplicationCommandOption[],
enforceOptionorder?: boolean,
): boolean;
private static _optionEquals(
existing: ApplicationCommandOption,
options: ApplicationCommandOption | ApplicationCommandOptionData | APIApplicationCommandOption,
enforceOptionorder?: boolean,
): boolean;
private static transformOption(option: ApplicationCommandOptionData, received?: boolean): unknown;
private static transformCommand(command: ApplicationCommandData): RESTPostAPIApplicationCommandsJSONBody;
private static isAPICommandData(command: object): command is RESTPostAPIApplicationCommandsJSONBody;
}
export class ApplicationRoleConnectionMetadata {
private constructor(data: APIApplicationRoleConnectionMetadata);
public name: string;
public nameLocalizations: LocalizationMap | null;
public description: string;
public descriptionLocalizations: LocalizationMap | null;
public key: string;
public type: ApplicationRoleConnectionMetadataTypes;
}
export type ApplicationResolvable = Application | Activity | Snowflake;
export type AutoModerationRuleResolvable = AutoModerationRule | Snowflake;
export class ApplicationFlags extends BitField<ApplicationFlagsString> {
public static FLAGS: Record<ApplicationFlagsString, number>;
public static resolve(bit?: BitFieldResolvable<ApplicationFlagsString, number>): number;
}
export abstract class Base {
public constructor(client: Client);
public readonly client: Client;
public toJSON(...props: Record<string, boolean | string>[]): unknown;
public valueOf(): string;
}
export class RESTManager {
private constructor(client: Client);
public readonly client: Client;
public handlers: Collection<string, unknown>;
public versioned: true;
public cookieJar: CookieJar;
public fetch: typeof globalThis.fetch;
public getAuth(): string;
public readonly api: unknown;
public readonly cdn: unknown;
}
export class BaseClient extends EventEmitter {
public constructor(options?: ClientOptions | WebhookClientOptions);
public readonly api: RESTManager['api'];
public rest: RESTManager;
private decrementMaxListeners(): void;
private incrementMaxListeners(): void;
public on<K extends keyof BaseClientEvents>(
event: K,
listener: (...args: BaseClientEvents[K]) => Awaitable<void>,
): this;
public on<S extends string | symbol>(
event: Exclude<S, keyof BaseClientEvents>,
listener: (...args: any[]) => Awaitable<void>,
): this;
public once<K extends keyof BaseClientEvents>(
event: K,
listener: (...args: BaseClientEvents[K]) => Awaitable<void>,
): this;
public once<S extends string | symbol>(
event: Exclude<S, keyof BaseClientEvents>,
listener: (...args: any[]) => Awaitable<void>,
): this;
public emit<K extends keyof BaseClientEvents>(event: K, ...args: BaseClientEvents[K]): boolean;
public emit<S extends string | symbol>(event: Exclude<S, keyof BaseClientEvents>, ...args: unknown[]): boolean;
public off<K extends keyof BaseClientEvents>(
event: K,
listener: (...args: BaseClientEvents[K]) => Awaitable<void>,
): this;
public off<S extends string | symbol>(
event: Exclude<S, keyof BaseClientEvents>,
listener: (...args: any[]) => Awaitable<void>,
): this;
public removeAllListeners<K extends keyof BaseClientEvents>(event?: K): this;
public removeAllListeners<S extends string | symbol>(event?: Exclude<S, keyof BaseClientEvents>): this;
public options: ClientOptions | WebhookClientOptions;
public destroy(): void;
public toJSON(...props: Record<string, boolean | string>[]): unknown;
}
export type GuildCacheMessage<Cached extends CacheType> = CacheTypeReducer<
Cached,
Message<true>,
APIMessage,
Message | APIMessage,
Message | APIMessage
>;
export interface InteractionResponseFields<Cached extends CacheType = CacheType> {
deferred: boolean;
ephemeral: boolean | null;
replied: boolean;
webhook: InteractionWebhook;
reply(options: InteractionReplyOptions & { fetchReply: true }): Promise<GuildCacheMessage<Cached>>;
reply(options: string | MessagePayload | InteractionReplyOptions): Promise<void>;
deleteReply(message?: MessageResolvable | '@original'): Promise<void>;
editReply(options: string | MessagePayload | InteractionEditReplyOptions): Promise<GuildCacheMessage<Cached>>;
deferReply(options: InteractionDeferReplyOptions & { fetchReply: true }): Promise<GuildCacheMessage<Cached>>;
deferReply(options?: InteractionDeferReplyOptions): Promise<void>;
fetchReply(message?: MessageResolvable | '@original'): Promise<GuildCacheMessage<Cached>>;
followUp(options: string | MessagePayload | InteractionReplyOptions): Promise<GuildCacheMessage<Cached>>;
}
export abstract class BaseCommandInteraction<Cached extends CacheType = CacheType> extends Interaction<Cached> {
public readonly command: ApplicationCommand | ApplicationCommand<{ guild: GuildResolvable }> | null;
public options: Omit<
CommandInteractionOptionResolver<Cached>,
| 'getMessage'
| 'getFocused'
| 'getMentionable'
| 'getRole'
| 'getNumber'
| 'getInteger'
| 'getString'
| 'getChannel'
| 'getBoolean'
| 'getSubcommandGroup'
| 'getSubcommand'
| 'getAttachment'
>;
public channelId: Snowflake;
public commandId: Snowflake;
public commandName: string;
public deferred: boolean;
public ephemeral: boolean | null;
public replied: boolean;
public webhook: InteractionWebhook;
public awaitModalSubmit(
options: AwaitModalSubmitOptions<ModalSubmitInteraction>,
): Promise<ModalSubmitInteraction<Cached>>;
public inGuild(): this is BaseCommandInteraction<'raw' | 'cached'>;
public inCachedGuild(): this is BaseCommandInteraction<'cached'>;
public inRawGuild(): this is BaseCommandInteraction<'raw'>;
public deferReply(options: InteractionDeferReplyOptions & { fetchReply: true }): Promise<GuildCacheMessage<Cached>>;
public deferReply(options?: InteractionDeferReplyOptions): Promise<void>;
public deleteReply(message?: MessageResolvable | '@original'): Promise<void>;
public editReply(options: string | MessagePayload | InteractionEditReplyOptions): Promise<GuildCacheMessage<Cached>>;
public fetchReply(message?: MessageResolvable | '@original'): Promise<GuildCacheMessage<Cached>>;
public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise<GuildCacheMessage<Cached>>;
public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise<GuildCacheMessage<Cached>>;
public reply(options: string | MessagePayload | InteractionReplyOptions): Promise<void>;
public showModal(modal: Modal | ModalOptions): Promise<void>;
private transformOption(
option: APIApplicationCommandOption,
resolved: Extract<
APIApplicationCommandInteractionData,
APIChatInputApplicationCommandInteractionData | APIContextMenuInteractionData
>['resolved'],
): CommandInteractionOption<Cached>;
private transformResolved(
resolved: Extract<
APIApplicationCommandInteractionData,
APIChatInputApplicationCommandInteractionData | APIContextMenuInteractionData
>['resolved'],
): CommandInteractionResolvedData<Cached>;
}
export abstract class BaseGuild extends Base {
protected constructor(client: Client, data: RawBaseGuildData);
public readonly createdAt: Date;
public readonly createdTimestamp: number;
public features: GuildFeatures[];
public icon: string | null;
public id: Snowflake;
public name: string;
public readonly nameAcronym: string;
public readonly partnered: boolean;
public readonly verified: boolean;
public fetch(): Promise<Guild>;
public iconURL(options?: ImageURLOptions): string | null;
public toString(): string;
}
export class BaseGuildEmoji extends Emoji {
protected constructor(client: Client, data: RawGuildEmojiData, guild: Guild | GuildPreview);
public available: boolean | null;
public readonly createdAt: Date;
public readonly createdTimestamp: number;
public guild: Guild | GuildPreview;
public id: Snowflake;
public managed: boolean | null;
public requiresColons: boolean | null;
}
export class BaseGuildTextChannel extends TextBasedChannelMixin(GuildChannel) {
protected constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean);
public defaultAutoArchiveDuration?: ThreadAutoArchiveDuration;
public defaultThreadRateLimitPerUser: number | null;
public rateLimitPerUser: number | null;
public nsfw: boolean;
public threads: GuildTextThreadManager<AllowedThreadTypeForTextChannel | AllowedThreadTypeForNewsChannel>;
public topic: string | null;
public createInvite(options?: CreateInviteOptions): Promise<Invite>;
public fetchInvites(cache?: boolean): Promise<Collection<string, Invite>>;
public setDefaultAutoArchiveDuration(
defaultAutoArchiveDuration: ThreadAutoArchiveDuration | 'MAX',
reason?: string,
): Promise<this>;
public setTopic(topic: string | null, reason?: string): Promise<this>;
public setType(type: Pick<typeof ChannelTypes, 'GUILD_TEXT'>, reason?: string): Promise<TextChannel>;
public setType(type: Pick<typeof ChannelTypes, 'GUILD_NEWS'>, reason?: string): Promise<NewsChannel>;
}
export class BaseGuildVoiceChannel extends TextBasedChannelMixin(GuildChannel, ['lastPinTimestamp', 'lastPinAt']) {
public constructor(guild: Guild, data?: RawGuildChannelData);
public readonly members: Collection<Snowflake, GuildMember>;
public readonly full: boolean;
public readonly joinable: boolean;
public bitrate: number;
public nsfw: boolean;
public rtcRegion: string | null;
public rateLimitPerUser: number | null;
public userLimit: number;
public videoQualityMode: VideoQualityMode | null;
public status?: string;
public createInvite(options?: CreateInviteOptions): Promise<Invite>;
public setRTCRegion(rtcRegion: string | null, reason?: string): Promise<this>;
public fetchInvites(cache?: boolean): Promise<Collection<string, Invite>>;
public setBitrate(bitrate: number, reason?: string): Promise<VoiceChannel>;
public setUserLimit(userLimit: number, reason?: string): Promise<VoiceChannel>;
public setVideoQualityMode(videoQualityMode: VideoQualityMode | number, reason?: string): Promise<VoiceChannel>;
}
export class BaseMessageComponent {
protected constructor(data?: BaseMessageComponent | BaseMessageComponentOptions);
public type: MessageComponentType | null;
public readonly id: number;
public data: MessageComponentOptions;
private static create(data: MessageComponentOptions, client?: Client | WebhookClient): MessageComponent | undefined;
private static resolveType(type: MessageComponentTypeResolvable): MessageComponentType;
}
export class BitField<S extends string, N extends number | bigint = number> {
public constructor(bits?: BitFieldResolvable<S, N>);
public bitfield: N;
public add(...bits: BitFieldResolvable<S, N>[]): BitField<S, N>;
public any(bit: BitFieldResolvable<S, N>): boolean;
public equals(bit: BitFieldResolvable<S, N>): boolean;
public freeze(): Readonly<BitField<S, N>>;
public has(bit: BitFieldResolvable<S, N>): boolean;
public missing(bits: BitFieldResolvable<S, N>, ...hasParams: readonly unknown[]): S[];
public remove(...bits: BitFieldResolvable<S, N>[]): BitField<S, N>;
public serialize(...hasParams: readonly unknown[]): Record<S, boolean>;
public toArray(...hasParams: readonly unknown[]): S[];
public toJSON(): N extends number ? number : string;
public valueOf(): N;
public [Symbol.iterator](): IterableIterator<S>;
public static FLAGS: Record<string, number | bigint>;
public static resolve(bit?: BitFieldResolvable<string, number | bigint>): number | bigint;
}
export class ButtonInteraction<Cached extends CacheType = CacheType> extends MessageComponentInteraction<Cached> {
private constructor(client: Client, data: RawMessageButtonInteractionData);
public readonly component: CacheTypeReducer<
Cached,
MessageButton,
APIButtonComponent,
MessageButton | APIButtonComponent,
MessageButton | APIButtonComponent
>;
public componentType: 'BUTTON';
public inGuild(): this is ButtonInteraction<'raw' | 'cached'>;
public inCachedGuild(): this is ButtonInteraction<'cached'>;
public inRawGuild(): this is ButtonInteraction<'raw'>;
}
export type KeyedEnum<K, T> = {
[Key in keyof K]: T | string;
};
export type EnumValueMapped<E extends KeyedEnum<T, number>, T extends Partial<Record<keyof E, unknown>>> = T & {
[Key in keyof T as E[Key]]: T[Key];
};
export type MappedChannelCategoryTypes = EnumValueMapped<
typeof ChannelTypes,
{
GUILD_NEWS: NewsChannel;
GUILD_VOICE: VoiceChannel;
GUILD_TEXT: TextChannel;
GUILD_STORE: StoreChannel;
GUILD_STAGE_VOICE: StageChannel;
GUILD_FORUM: ForumChannel;
GUILD_MEDIA: MediaChannel;
}
>;
export type CategoryChannelTypes = ExcludeEnum<
typeof ChannelTypes,
| 'DM'
| 'GROUP_DM'
| 'UNKNOWN'
| 'GUILD_PUBLIC_THREAD'
| 'GUILD_NEWS_THREAD'
| 'GUILD_PRIVATE_THREAD'
| 'GUILD_CATEGORY'
| 'GUILD_DIRECTORY'
>;
export class CategoryChannel extends GuildChannel {
public readonly children: Collection<Snowflake, Exclude<NonThreadGuildBasedChannel, CategoryChannel>>;
public static parent: null;
public parentId: null;
public type: 'GUILD_CATEGORY';
public createChannel<T extends Exclude<CategoryChannelTypes, 'GUILD_STORE' | ChannelTypes.GUILD_STORE>>(
name: string,
options: CategoryCreateChannelOptions & { type: T },
): Promise<MappedChannelCategoryTypes[T]>;
/** @deprecated See [Self-serve Game Selling Deprecation](https://support-dev.discord.com/hc/en-us/articles/6309018858647) for more information */
public createChannel(
name: string,
options: CategoryCreateChannelOptions & { type: 'GUILD_STORE' | ChannelTypes.GUILD_STORE },
): Promise<StoreChannel>;
public createChannel(name: string, options?: CategoryCreateChannelOptions): Promise<TextChannel>;
}
export type CategoryChannelResolvable = Snowflake | CategoryChannel;
export abstract class Channel extends Base {
public constructor(client: Client, data?: RawChannelData, immediatePatch?: boolean);
public readonly createdAt: Date | null;
public readonly createdTimestamp: number | null;
/** @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091 */
public deleted: boolean;
public id: Snowflake;
public readonly partial: false;
public type: keyof typeof ChannelTypes;
public flags: Readonly<ChannelFlags> | null;
public delete(): Promise<this>;
public fetch(force?: boolean): Promise<this>;
public isText(): this is TextBasedChannel;
public isVoice(): this is BaseGuildVoiceChannel;
public isThread(): this is ThreadChannel;
public isDirectory(): this is DirectoryChannel;
public isThreadOnly(): this is ThreadOnlyChannel;
public toString(): ChannelMention;
}
export type If<T extends boolean, A, B = null> = T extends true ? A : T extends false ? B : A | B;
export class Client<Ready extends boolean = boolean> extends BaseClient {
public constructor(options?: ClientOptions);
private actions: unknown;
public authenticator: typeof authenticator;
private presence: ClientPresence;
private _eval(script: string): unknown;
private _validateOptions(options: ClientOptions): void;
public channels: ChannelManager;
public readonly emojis: BaseGuildEmojiManager;
public guilds: GuildManager;
public options: ClientOptions;
public readyAt: If<Ready, Date>;
public readonly readyTimestamp: If<Ready, number>;
public sweepers: Sweepers;
public shard: ShardClientUtil | null;
public token: If<Ready, string, string | null>;
public uptime: If<Ready, number>;
public user: If<Ready, ClientUser>;
public users: UserManager;
public voice: ClientVoiceManager;
public ws: WebSocketManager;
public notes: UserNoteManager;
public relationships: RelationshipManager;
public voiceStates: VoiceStateManager;
public sessions: SessionManager;
public presences: PresenceManager;
public billing: BillingManager;
public settings: ClientUserSettingManager;
public readonly sessionId: If<Ready, string, undefined>;
public destroy(): void;
public fetchGuildPreview(guild: GuildResolvable): Promise<GuildPreview>;
public fetchInvite(invite: InviteResolvable, options?: ClientFetchInviteOptions): Promise<Invite>;
public fetchGuildTemplate(template: GuildTemplateResolvable): Promise<GuildTemplate>;
public fetchVoiceRegions(): Promise<Collection<string, VoiceRegion>>;
public fetchSticker(id: Snowflake): Promise<Sticker>;
public fetchPremiumStickerPacks(): Promise<Collection<Snowflake, StickerPack>>;
public fetchWebhook(id: Snowflake, token?: string): Promise<Webhook>;
public fetchGuildWidget(guild: GuildResolvable): Promise<Widget>;
public refreshAttachmentURL(...urls: string[]): Promise<{ original: string; refreshed: string }[]>;
public sleep(timeout: number): Promise<void>;
public login(token?: string): Promise<string>;
/** @deprecated This method will not be updated until I find the most convenient way to implement MFA. */
public passLogin(email: string, password: string): Promise<string | null>;
public QRLogin(): Promise<void>;
public logout(): Promise<void>;
public isReady(): this is Client<true>;
/** @deprecated Use {@link Sweepers#sweepMessages} instead */
public sweepMessages(lifetime?: number): number;
public toJSON(): unknown;
public acceptInvite(
invite: InviteResolvable,
options?: AcceptInviteOptions,
): Promise<Guild | DMChannel | GroupDMChannel>;
public redeemNitro(nitro: string, channel?: TextChannelResolvable, paymentSourceId?: Snowflake): Promise<any>;
public authorizeURL(urlOAuth2: string, options?: OAuth2AuthorizeOptions): Promise<{ location: string }>;
public installUserApps(applicationId: Snowflake): Promise<void>;
public deauthorize(id: Snowflake, type?: 'application' | 'token'): Promise<void>;
public authorizedApplications(): Promise<
Collection<
Snowflake,
{
application: Application;
scopes: string[];
authorizedApplicationId: Snowflake;
deauthorize: () => Promise<void>;
}
>
>;
public on<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => Awaitable<void>): this;
public on<S extends string | symbol>(
event: Exclude<S, keyof ClientEvents>,
listener: (...args: any[]) => Awaitable<void>,
): this;
public once<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => Awaitable<void>): this;
public once<S extends string | symbol>(
event: Exclude<S, keyof ClientEvents>,
listener: (...args: any[]) => Awaitable<void>,
): this;
public emit<K extends keyof ClientEvents>(event: K, ...args: ClientEvents[K]): boolean;
public emit<S extends string | symbol>(event: Exclude<S, keyof ClientEvents>, ...args: unknown[]): boolean;
public off<K extends keyof ClientEvents>(event: K, listener: (...args: ClientEvents[K]) => Awaitable<void>): this;
public off<S extends string | symbol>(
event: Exclude<S, keyof ClientEvents>,
listener: (...args: any[]) => Awaitable<void>,
): this;
public removeAllListeners<K extends keyof ClientEvents>(event?: K): this;
public removeAllListeners<S extends string | symbol>(event?: Exclude<S, keyof ClientEvents>): this;
}
export interface AcceptInviteOptions {
bypassOnboarding: boolean;
bypassVerify: boolean;
}
export type OAuth2AuthorizeOptions = {
guild_id?: Snowflake;
permissions?: string;
authorize?: boolean;
code?: string;
webhook_channel_id?: Snowflake;
} & Record<string, unknown>;
export class ClientPresence extends Presence {
private constructor(client: Client, data: RawPresenceData);
private _parse(data: PresenceData): RawPresenceData;
public set(presence: PresenceData): ClientPresence;
}
export class ClientUser extends User {
public mfaEnabled: boolean;
public readonly presence: ClientPresence;
public verified: boolean;
public edit(data: ClientUserEditData): Promise<this>;
public setActivity(options?: ActivityOptions | RichPresence | SpotifyRPC | CustomStatus): ClientPresence;
public setActivity(name: string, options?: Omit<ActivityOptions, 'name'>): ClientPresence;
public setAFK(afk?: boolean, shardId?: number | number[]): ClientPresence;
public setAvatar(avatar: BufferResolvable | Base64Resolvable | null): Promise<this>;
public setPresence(data: PresenceData): ClientPresence;
public setStatus(status: PresenceStatusData, shardId?: number | number[]): ClientPresence;
public setUsername(username: string, password: string): Promise<this>;
public purchasedFlags: Readonly<PurchasedFlags>;
public premiumUsageFlags: Readonly<PremiumUsageFlags>;
public phone: string | null;
public nsfwAllowed?: boolean;
public email: string | null;
public bio?: string;
public pronouns?: string;
public premiumType: number;
public setBanner(banner: BufferResolvable | Base64Resolvable | null): Promise<this>;
public setHypeSquad(
hypesquad: 0 | 1 | 2 | 3 | 'LEAVE' | 'HOUSE_BRAVERY' | 'HOUSE_BRILLIANCE' | 'HOUSE_BALANCE',
): Promise<void>;
public setAccentColor(color: ColorResolvable): Promise<this>;
public setAboutMe(bio: string | null): Promise<this>;
public createFriendInvite(): Promise<Invite>;
public getAllFriendInvites(): Promise<Collection<string, Invite>>;
public revokeAllFriendInvites(): Promise<void>;
public setSamsungActivity(packageName: string, type: 'START' | 'UPDATE' | 'STOP'): Promise<this>;
public stopRinging(channel: ChannelResolvable): Promise<void>;
public fetchBurstCredit(): Promise<number>;
public setPronouns(pronouns?: string | null): Promise<this>;
public setGlobalName(globalName?: string | null): Promise<this>;
}
export class Options extends null {
private constructor();
public static defaultMakeCacheSettings: CacheWithLimitsOptions;
public static defaultSweeperSettings: SweeperOptions;
public static createDefault(): ClientOptions;
public static cacheWithLimits(settings?: CacheWithLimitsOptions): CacheFactory;
public static cacheEverything(): CacheFactory;
}
export class ClientVoiceManager {
private constructor(client: Client);
public readonly client: Client;
public adapters: Map<Snowflake, InternalDiscordGatewayAdapterLibraryMethods>;
public connection: VoiceConnection | null;
public joinChannel(
channel: VoiceBasedChannel | DMChannel | GroupDMChannel | Snowflake,
config?: JoinChannelConfig,
): Promise<VoiceConnection>;
}
export interface JoinChannelConfig {
selfMute?: boolean;
selfDeaf?: boolean;
selfVideo?: boolean;
videoCodec?: VideoCodec;
}
export type VideoCodec = 'VP8' | 'H264';
export class VolumeInterface extends EventEmitter {
constructor(options?: { volume?: number });
public readonly volume: number;
public readonly volumeDecibels: number;
public readonly volumeEditable: boolean;
public readonly volumeLogarithmic: number;
public setVolume(volume: number): void;
public setVolumeDecibels(db: number): void;
public setVolumeLogarithmic(value: number): void;
public on(event: 'volumeChange', listener: (oldVolume: number, newVolume: number) => void): this;
public once(event: 'volumeChange', listener: (oldVolume: number, newVolume: number) => void): this;
}
export function VolumeMixin<T>(base: Constructable<T>): Constructable<T & VolumeInterface>;
export type StreamType = 'unknown' | 'converted' | 'opus' | 'ogg/opus' | 'webm/opus';
export interface StreamOptions {
type?: StreamType;
seek?: number;
volume?: number | boolean;
plp?: number;
fec?: boolean;
bitrate?: number | 'auto';
highWaterMark?: number;
}
export interface VideoOptions {
seek?: number;
highWaterMark?: number;
fps?: number;
hwAccel?: boolean;
presetH26x?: 'ultrafast' | 'superfast' | 'veryfast' | 'faster' | 'fast' | 'medium' | 'slow' | 'slower' | 'veryslow';
inputFFmpegArgs?: string[];
outputFFmpegArgs?: string[];
bitrate?: number | 'auto';
}
export class BaseDispatcher extends Writable {
constructor(
player: object,
highWaterMark?: number,
payloadType?: number,
extensionEnabled?: boolean,
streams?: object,
);
public readonly paused: boolean;
public pausedSince: number | null;
public readonly pausedTime: number;
public player: object;
public readonly streamTime: number;
public readonly totalStreamTime: number;
public count: number;
public sequence: number;
public timestamp: number;
public payloadType: number;
public extensionEnabled: boolean;
public pause(silence?: boolean): void;
public resume(): void;
public on(event: 'close' | 'drain' | 'finish' | 'start', listener: () => void): this;
public on(event: 'debug', listener: (info: string) => void): this;
public on(event: 'error', listener: (err: Error) => void): this;
public on(event: 'pipe' | 'unpipe', listener: (src: Readable) => void): this;
public on(event: 'speaking', listener: (speaking: boolean) => void): this;
public on(event: string, listener: (...args: any[]) => void): this;
public once(event: 'close' | 'drain' | 'finish' | 'start', listener: () => void): this;
public once(event: 'debug', listener: (info: string) => void): this;
public once(event: 'error', listener: (err: Error) => void): this;
public once(event: 'pipe' | 'unpipe', listener: (src: Readable) => void): this;
public once(event: 'speaking', listener: (speaking: boolean) => void): this;
public once(event: string, listener: (...args: any[]) => void): this;
}
export class AudioDispatcher extends VolumeMixin(BaseDispatcher) {
constructor(player: object, options?: StreamOptions, streams?: object);
public readonly bitrateEditable: boolean;
public getTypeDispatcher(): 'audio';
public setBitrate(value: number | 'auto'): boolean;
public setFEC(enabled: boolean): boolean;
public setPLP(value: number): boolean;
public setSyncVideoDispatcher(otherDispatcher: VideoDispatcher): void;
public on(event: 'volumeChange', listener: (oldVolume: number, newVolume: number) => void): this;
public on(event: string, listener: (...args: any[]) => void): this;
public once(event: 'volumeChange', listener: (oldVolume: number, newVolume: number) => void): this;
public once(event: string, listener: (...args: any[]) => void): this;
}
export class VideoDispatcher extends BaseDispatcher {
constructor(player: object, options?: StreamOptions, streams?: object, fps?: number);
public mtu: number;
public fps: number;
public getTypeDispatcher(): 'video';
public setFPSSource(value: number): void;
}
export class VoiceConnection extends EventEmitter {
constructor(voiceManager: ClientVoiceManager, channel: VoiceChannel);
private authentication: object;
private sockets: object;
private ssrcMap: Map<number, boolean>;
private _speaking: Map<Snowflake, Readonly<Speaking>>;
private _disconnect(): void;
private authenticate(): void;
private authenticateFailed(reason: string): void;
private checkAuthenticated(): void;
private cleanup(): void;
private connect(): void;
private onReady(data: object): void;
private onSessionDescription(mode: string, secret: string): void;
private onSpeaking(data: object): void;
private reconnect(token: string, endpoint: string): void;
public sendVoiceStateUpdate(options: {
self_video?: boolean;
self_deaf?: boolean;
self_mute?: boolean;
guild_id?: Snowflake | null;
channel_id?: Snowflake | null;
}): Promise<Shard>;
private setSessionId(sessionId: string): void;
private setTokenAndEndpoint(token: string, endpoint: string): void;
private updateChannel(channel: VoiceChannel): void;
public channel: VoiceChannel;
public readonly client: Client;
public readonly dispatcher: AudioDispatcher;
public readonly videoDispatcher?: VideoDispatcher;
public player: object;
public receiver: VoiceReceiver;
public speaking: Readonly<Speaking>;
public videoStatus: boolean;
public status: VoiceStatus;
public readonly voice: VoiceState | null;
public voiceManager: ClientVoiceManager;
public videoCodec: VideoCodec;
public streamConnection: StreamConnection | null;
public streamWatchConnection: Collection<Snowflake, StreamConnectionReadonly>;
public disconnect(): void;
public playAudio(input: Readable | string, options?: StreamOptions): AudioDispatcher;
public playVideo(input: Readable | string, options?: VideoOptions): VideoDispatcher;
public setSpeaking(value: BitFieldResolvable<SpeakingString, number>): void;
public setVideoStatus(value: boolean): void;
public setVideoCodec(value: VideoCodec): this;
public on(event: 'authenticated' | 'closing' | 'newSession' | 'ready' | 'reconnecting', listener: () => void): this;
public on(event: 'debug', listener: (message: string) => void): this;
public on(event: 'error' | 'failed' | 'disconnect', listener: (error: Error) => void): this;
public on(event: 'speaking', listener: (user: User, speaking: Readonly<Speaking>) => void): this;
public on(event: 'warn', listener: (warning: string | Error) => void): this;
public on(event: 'streamUpdate', listener: (oldState: StreamState, newState: StreamState) => void): this;
public on(event: string, listener: (...args: any[]) => void): this;
public once(event: 'authenticated' | 'closing' | 'newSession' | 'ready' | 'reconnecting', listener: () => void): this;
public once(event: 'debug', listener: (message: string) => void): this;
public once(event: 'error' | 'failed' | 'disconnect', listener: (error: Error) => void): this;
public once(event: 'speaking', listener: (user: User, speaking: Readonly<Speaking>) => void): this;
public once(event: 'warn', listener: (warning: string | Error) => void): this;
public once(event: 'streamUpdate', listener: (oldState: StreamState, newState: StreamState) => void): this;
public once(event: string, listener: (...args: any[]) => void): this;
public createStreamConnection(): Promise<StreamConnection>;
public joinStreamConnection(user: UserResolvable): Promise<StreamConnectionReadonly>;
}
export interface StreamState {
isPaused: boolean;
region: string | null;
viewerIds: Snowflake[];
}
export class StreamConnection extends VoiceConnection {
public createStreamConnection(): Promise<this>;
public readonly voiceConnection: VoiceConnection;
public serverId: Snowflake;
public isPaused: boolean;
public region: string | null;
public streamConnection: this;
public viewerIds: Snowflake[];
public sendSignalScreenshare(): void;
public sendScreenshareState(isPause: boolean): void;
private sendStopScreenshare(): void;
public readonly streamKey: string;
}
export class StreamConnectionReadonly extends VoiceConnection {
public joinStreamConnection(): Promise<this>;
public readonly voiceConnection: VoiceConnection;
public serverId: Snowflake;
public isPaused: boolean;
public region: string | null;
public userId: Snowflake;
public streamConnection: null;
public viewerIds: Snowflake[];
public sendSignalScreenshare(): void;
private sendStopScreenshare(): void;
public readonly streamKey: string;
/** @deprecated removed */
public override playAudio(): AudioDispatcher;
/** @deprecated removed */
public override playVideo(): VideoDispatcher;
}
export class Recorder<Ready extends boolean = boolean, T = any> extends EventEmitter {
constructor(receiver: T, options: { ffmpegArgs: string[]; channels: number; frameDuration: number });
private promise: Promise<void>;
public readonly receiver: T;
public portUdpH264: number;
public portUdpOpus: number;
public ready: Ready;
public stream: If<Ready, ChildProcessWithoutNullStreams>;
public socket: Socket;
public output: Writable | string;
public userId: Snowflake;
public feed(payload: RtpPacket | BufferResolvable): void;
public on(event: 'ready' | 'closed', listener: (recorder: Recorder<true, T>) => void): this;
public once(event: 'ready' | 'closed', listener: (recorder: Recorder<true, T>) => void): this;
public destroy(): void;
}
export class VoiceReceiver extends EventEmitter {
constructor(connection: VoiceConnection);
public createStream(
user: UserResolvable,
options?: { mode?: 'opus' | 'pcm'; end?: 'silence' | 'manual'; paddingSilence?: boolean },
): Readable;
public createVideoStream(user: UserResolvable, output: Writable | string): Recorder<false, any>;
public on(event: 'debug', listener: (error: Error | string) => void): this;
public on(
event: 'receiverData',
listener: (
ssrcData: {
userId: Snowflake;
hasVideo: boolean;
},
packet: RtpPacket,
) => void,
): this;
public on(event: string, listener: (...args: any[]) => void): this;
public once(event: 'debug', listener: (error: Error | string) => void): this;
public once(
event: 'receiverData',
listener: (
ssrcData: {
userId: Snowflake;
hasVideo: boolean;
},
packet: RtpPacket,
) => void,
): this;
public once(event: string, listener: (...args: any[]) => void): this;
}
export { Collection } from '@discordjs/collection';
export interface CollectorEventTypes<K, V, F extends unknown[] = []> {
collect: [V, ...F];
dispose: [V, ...F];
end: [collected: Collection<K, V>, reason: strin