import { AttachmentBuilder, BaseChannel, Guild, GuildEmoji, GuildForumTag, GuildMember, Invite, Message, MessageReaction, PermissionsString, Role, Sticker, User, Webhook } from "discord.js"; import { CompiledFunction } from "./CompiledFunction"; import { Context } from "./Context"; import { Return } from "./Return"; export type EnumLike = { [id: string]: T | string; [nu: number]: string; }; export type GetEnum = T extends EnumLike ? P : never; export declare enum ArgType { URL = 0, String = 1, BigInt = 2, Number = 3, User = 4, Date = 5, Guild = 6, Invite = 7, Permission = 8, Json = 9, Color = 10, Enum = 11, ForumTag = 12, GuildEmoji = 13, Boolean = 14, Attachment = 15, Reaction = 16, Message = 17, Channel = 18, Role = 19, Webhook = 20, GuildSticker = 21, Time = 22, Member = 23 } export interface IArg { name: string; description: string; type: Type; enum?: Enum; /** * Arg index to look at when a type requires a previously guild arg or depends on something. */ pointer?: number; condition?: boolean; delimiter?: string; check?: (i: GetArgType) => boolean; /** * Defaults to false */ required?: Required; /** * Whether this argument is an array of values */ rest: Rest; } export type NativeFunctionExecutor = Unwrap extends true ? (this: CompiledFunction, ctx: Context, args: UnwrapArgs) => Promise | Return : (this: CompiledFunction, ctx: Context) => Promise | Return; export interface INativeFunction { name: string; description: string; examples?: string[]; experimental?: boolean; /** * Resolves all arguments and are passed through execute params. */ unwrap: Unwrap; args?: [...T]; /** * Do not provide this. */ version?: string; /** * If undefined, function has no brackets * * If false, function can have brackets. * * If true, function must have brackets. */ brackets?: boolean; execute: NativeFunctionExecutor; } export type MarkRest = B extends true ? T[] : T; export type GetArgType = T extends ArgType.Number ? number : T extends ArgType.String ? string : T extends ArgType.User ? User : T extends ArgType.URL ? string : T extends ArgType.Json ? Record : T extends ArgType.Guild ? Guild : T extends ArgType.Color ? number : T extends ArgType.Role ? Role : T extends ArgType.Attachment ? AttachmentBuilder : T extends ArgType.BigInt ? bigint : T extends ArgType.Boolean ? boolean : T extends ArgType.Date ? Date : T extends ArgType.Enum ? GetEnum : T extends ArgType.Channel ? BaseChannel : T extends ArgType.Message ? Message : T extends ArgType.Member ? GuildMember : T extends ArgType.GuildEmoji ? GuildEmoji : T extends ArgType.GuildSticker ? Sticker : T extends ArgType.Reaction ? MessageReaction : T extends ArgType.Webhook ? Webhook : T extends ArgType.Invite ? Invite : T extends ArgType.ForumTag ? GuildForumTag : T extends ArgType.Time ? number : T extends ArgType.Permission ? PermissionsString : null; export type MarkNullable = Rest extends true ? T : Req extends true ? T : T | null; export type UnwrapArg = T extends IArg ? MarkRest, Required, Rest>, Rest> : never; export type UnwrapArgs = T extends [infer L, ...infer R] ? [UnwrapArg, ...UnwrapArgs] : []; export declare class NativeFunction { readonly data: INativeFunction; readonly async: boolean; constructor(data: INativeFunction); get name(): string; } //# sourceMappingURL=NativeFunction.d.ts.map