Artivain/artibot

View on GitHub
src/types.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Collection, Snowflake } from "discord.js";
import { Button, Command, MessageContextMenuOption, SlashCommand, TriggerGroup, UserContextMenuOption, Global, Module } from "./modules.js";
import Artibot from "./index.js";

/** Any module part type */
export type ModulePartResolvable = Command | SlashCommand | Button | MessageContextMenuOption | UserContextMenuOption | TriggerGroup | Global;

/** Used to detect messages containing a string or matching a RegEx */
export type Trigger = string | RegExp;

/** Collection of modules */
export type Modules = Collection<string, Module>;

/** Module, or a function that returns a module */
export type ModuleGenerator = Module | ((artibot: Artibot, config: any) => Module);

export type RegisterModuleConfigType<T> = T extends (artibot: Artibot, config: infer P) => Module ? P : never;

/** Function that registers a module */
export type RegisterModuleOverload = {
    <T extends (artibot: Artibot, config: any) => Module>(module: T, config: RegisterModuleConfigType<T>): void;
    (module: (artibot: Artibot) => Module): void;
    (module: Module, config?: any): void;
}

/** Informations about a contibutor */
export interface Contributor {
    /** Contributor's name */
    name: string,
    /** Contributor's GitHub username */
    github: string,
    /** Contributor's Discord ID */
    discordId?: Snowflake,
    /** Contributor's Discord tag */
    discordTag?: string
}

/** List of all Artibot contributors */
export interface ContributorList {
    /** List of developpers */
    devs: Contributor[],
    /** List of donators */
    donators: Contributor[]
}