UNPKG

darkcord

Version:

A NodeJS Package to interact with Discord API

313 lines 11.8 kB
/// <reference types="node" /> import { Cache } from "../cache/Cache"; import { Channel, StageChannel, TextBasedChannel, ThreadChannel, VoiceChannel } from "../resources/Channel"; import { Emoji, Reaction } from "../resources/Emoji"; import { Guild, ScheduledEvent } from "../resources/Guild"; import { Interaction } from "../resources/Interaction"; import { Invite } from "../resources/Invite"; import { Member, ThreadMember } from "../resources/Member"; import { Message } from "../resources/Message"; import { Role } from "../resources/Role"; import { User } from "../resources/User"; import { VoiceState } from "../resources/VoiceState"; import { APIAuditLogChange, APIAuditLogEntry, APIChannel, APIGuild, APIGuildMember, APIStageInstance, GatewayGuildMembersChunkDispatchData, GatewayIntentBits, GatewayReceivePayload, GatewaySendPayload, MessageFlags, RESTPatchAPIChannelJSONBody, RESTPostAPIGuildChannelJSONBody, UserAvatarFormat, UserBannerFormat } from "discord-api-types/v10"; import { Client, InteractionClient } from "../client/Client"; import { Integration } from "../resources/Integration"; import { Sticker } from "../resources/Sticker"; import type { PluginFn } from "../utils/PluginManager"; import { DataCache } from "../manager/DataManager"; export type { MessageAttachment, MessagePostData } from "@darkcord/utils"; export interface ImageSize { size?: number; } export interface DisplayUserAvatarOptions extends ImageSize { format?: UserAvatarFormat; } export interface DisplayUserBannerOptions extends ImageSize { format?: UserBannerFormat; } export type GuildDataModel<T> = T & { guild: Guild; }; export interface BaseClientOptions { } export interface InteractionClientOptions extends BaseClientOptions { webserver: WebServerOptions; rest?: { token?: string; }; cache?: { adapter?: CacheAdapter<any>; guilds?: CacheOption; channels?: CacheOption; roles?: CacheOption; messageCacheLimitPerChannel?: number; }; /** * Resolves partial values and converts them into resolved instances, which may be slower due to requests made in the API, but is functional. * @default false */ resolvePartialData?: boolean; } export type CacheOption = number | BaseCacheOptions<any>; export interface ClientOptions extends BaseClientOptions { gateway: { intents: GatewayIntentBits | GatewayIntentBits[]; encoding?: "json" | "etf"; compress?: boolean; concurrency?: number; properties?: { browser: string; device: string; }; totalShards?: number; disabledEvents?: (keyof ClientEvents)[]; }; cache?: { adapter?: CacheAdapter<any>; guilds?: CacheOption; users?: CacheOption; channels?: CacheOption; emojis?: CacheOption; stickers?: CacheOption; threads?: CacheOption; members?: CacheOption; roles?: CacheOption; messageCacheLimitPerChannel?: number; }; plugins?: PluginFn[]; } export interface WebServerOptions { hostname?: string; port: number; route?: string; } export type InteractionFlags = MessageFlags.Ephemeral | MessageFlags.SuppressEmbeds; export interface GatewayShardOptions { /** * The encoding of received gateway packets */ encoding?: "json" | "etf"; /** * Recommended to compress gateway packets * */ compress?: boolean; /** * The id of this gateway shard */ shardId: string; } export interface GatewayShardEvents { connect: []; reconnecting: []; close: [code: number, reason: string]; resume: []; reconnectRequired: []; ping: [ping: number]; hello: []; debug: [message: string]; ready: []; preReady: []; error: [error: any]; dispatch: [event: string, data: any]; } export type GuildMembersChunkData = Omit<KeysToCamelCase<GatewayGuildMembersChunkDispatchData>, "presences" | "members"> & { members: (APIGuildMember | Member)[]; guild: Guild; }; export interface InteractionClientEvents { interactionCreate: [interaction: Interaction]; connect: []; warn: [message: string]; } export interface AuditLogEntry extends Omit<KeysToCamelCase<APIAuditLogEntry>, "changes" | "options"> { options?: KeysToCamelCase<APIAuditLogEntry["options"]>; changes?: KeysToCamelCase<APIAuditLogChange>[]; } export interface VoiceServer { host: string; guild: Guild; token: string; } export interface ClientEvents { packet: [payload: GatewayReceivePayload | GatewaySendPayload]; ready: []; shardConnect: [id: string]; reconnecting: []; shardClose: [code: number, reason: string, id: string]; shardResume: [id: string]; shardReconnectRequired: [id: string]; shardPing: [ping: number, id: string]; shardHello: [id: string]; shardDebug: [message: string, id: string]; shardReady: [id: string]; shardPreReady: [id: string]; shardError: [error: any, id: string]; shardDispatch: [event: string, data: any]; connect: []; messageCreate: [message: Message]; messageUpdate: [old: Message, updated: Message]; messageDelete: [message: Message]; messageDeleteBulk: [messagesDeleted: Map<string, Message>]; messageReactionAdd: [reaction: Reaction, user: User, message: Message]; messageSuperReactionAdd: [reaction: Reaction, user: User, message: Message]; messageReactionRemove: [reaction: Reaction, user: User, message: Message]; messageSuperReactionRemove: [ reaction: Reaction, user: User, message: Message ]; messageReactionRemoveAll: [message: Message, removed: Cache<Reaction>]; messageReactionRemoveEmoji: [message: Message, removed: Reaction]; typingStart: [typing: Typing]; interactionCreate: [interaction: Interaction]; guildMembersChunk: [data: GuildMembersChunkData]; guildMembersChunked: [guild: Guild, chunkCount: number]; guildCreate: [guild: Guild]; guildUpdate: [old: Guild, updated: Guild]; guildDelete: [deleted: Guild]; guildAuditLogEntryCreate: [log: AuditLogEntry]; guildBanAdd: [guild: Guild, userBanned: User]; guildBanRemove: [guild: Guild, userUnbanned: User]; guildEmojisUpdate: [ old: DataCache<Emoji>, updated: DataCache<Emoji>, guild: Guild ]; guildEmojiCreate: [emoji: Emoji]; guildEmojiDelete: [emoji: Emoji]; guildEmojiUpdate: [oldEmoji: Emoji, updatedEmoji: Emoji]; guildStickersUpdate: [ old: DataCache<Sticker>, updated: DataCache<Sticker>, guild: Guild ]; guildStickerCreate: [sticker: Sticker]; guildStickerDelete: [sticker: Sticker]; guildStickerUpdate: [oldSticker: Sticker, updatedSticker: Sticker]; guildMemberAdd: [newMember: Member, guild: Guild]; guildMemberRemove: [user: User, guild: Guild]; guildMemberUpdate: [old: Member, updated: Member]; guildIntegrationsUpdate: [guild: Guild]; guildRoleCreate: [role: Role, guild: Guild]; guildRoleUpdate: [old: Role, updated: Role, guild: Guild]; guildRoleDelete: [deleted: Role, guild: Guild]; guildScheduledEventCreate: [event: ScheduledEvent]; guildScheduledEventUpdate: [old: ScheduledEvent, updated: ScheduledEvent]; guildScheduledEventDelete: [deleted: ScheduledEvent]; guildScheduledEventUserAdd: [event: ScheduledEvent, user: User]; guildScheduledEventUserRemove: [event: ScheduledEvent, user: User]; threadCreate: [thread: ThreadChannel]; threadMemberUpdate: [member: ThreadMember]; threadMembersUpdate: [added: ThreadMember[], removed: string[]]; threadDelete: [thread: ThreadChannel]; threadListSync: [threads: Cache<ThreadChannel>, guild: Guild]; stageInstanceCreate: [instance: APIStageInstance]; stageInstanceDelete: [instance: APIStageInstance]; stageInstanceUpdate: [old: APIStageInstance, updated: APIStageInstance]; channelCreate: [channel: Channel]; channelDelete: [channel: Channel]; channelUpdate: [old: Channel, updated: Channel]; channelPinsAdd: [ oldLastPinTimestamp: number, lastPinTimestamp: number, channel: TextBasedChannel ]; channelPinsRemove: [ oldLastPinTimestamp: number, lastPinTimestamp: number, channel: TextBasedChannel ]; channelPinsUpdate: [channel: TextBasedChannel]; userUpdate: [old: User, updated: User]; voiceChannelSwitch: [ member: Member, oldChannel: VoiceChannel | StageChannel, newChannel: VoiceChannel | StageChannel ]; voiceChannelJoin: [member: Member, channel: VoiceChannel | StageChannel]; voiceChannelLeave: [member: Member, channel: VoiceChannel | StageChannel]; voiceStateUpdate: [member: Member, channel: VoiceState]; voiceServerUpdate: [server: VoiceServer]; warn: [message: string]; debug: [message: string]; integrationCreate: [integration: Integration]; inviteCreate: [invite: Invite]; inviteDelete: [invite: Invite]; } export type ValueOf<I> = I[keyof I]; export interface BaseCacheSweeper<T> { lifetime?: number; filter?: (value: T) => boolean; keepFilter?: (value: T) => boolean; } export interface BaseCacheOptions<T = unknown> { maxSize: number; sweeper?: BaseCacheSweeper<T>; } export type Awaitable<T> = T | Promise<T>; export interface CacheAdapter<T> { set(key: string, value: T): CacheAdapter<T>; get(key: string): T | undefined; delete(key: string): boolean; clear(): void; entries(): IterableIterator<[string, T]>; values(): IterableIterator<T>; keys(): IterableIterator<string>; has(key: string): boolean; size: number; } export type AnyClient = InteractionClient | Client; export type DataWithClient<T = Record<string, any>> = T & { client: AnyClient; }; export type CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}` : Lowercase<S>; export type KeysToCamelCase<T> = { [K in keyof T as CamelCase<string & K>]: T[K] extends Record<string, K> ? KeysToCamelCase<T[K]> : T[K]; }; export type APIGuildWithShard = APIGuild & { shard_id: string; }; export interface Typing { channelId: string; channel?: TextBasedChannel | APIChannel; startedTimestamp: number; guild?: Guild; member?: Member; guildId?: string; userId: string; } export type Base64File = `data:${string};base64,${string}`; export interface ClientAvatar { contentType?: "gif" | "jpg" | "png"; data: Buffer | Base64File; } export interface JSONClientUserPatch { username?: string; avatar?: ClientAvatar; } export interface CreateEmojiOptions { /** * The 128x128 emoji image buffer or base64 */ data: Buffer | Base64File; /** * The name of the emoji */ name: string; /** * Roles allowed to use this emoji */ roles?: string[]; } export type MessageTimestampStyle = "t" | "T" | "d" | "D" | "f" | "F" | "R"; export type CreateChannelOptions = KeysToCamelCase<RESTPostAPIGuildChannelJSONBody> & KeysToCamelCase<RESTPatchAPIChannelJSONBody>; export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>; type OmitNever<T> = { [K in keyof T as T[K] extends never ? never : K]: T[K]; }; type json<T> = { [K in keyof T]: [T[K]] extends [Function] ? never : [T[K]] extends [bigint] ? string : [T[K]] extends [number] ? number : [K] extends [`_${string}`] ? never : [T[K]] extends [any[]] ? T[K] : [T[K]] extends [Map<any, infer I1>] ? I1[] : [T[K]] extends [Cache<infer I2>] ? I2[] : T[K]; }; export type JSONFY<T> = OmitNever<json<T>>; //# sourceMappingURL=index.d.ts.map