import { GuildMember, GuildTextBasedChannel, Message, Snowflake } from "discord.js"; import { BaseConfig } from "./config/configTypes"; import { LockManager } from "./locks/LockManager"; import { GlobalPluginBlueprint, GuildPluginBlueprint } from "./plugins/PluginBlueprint"; import { GlobalPluginData, GuildPluginData } from "./plugins/PluginData"; import { Awaitable } from "./utils"; import { BasePluginType } from "./plugins/pluginTypes"; export type GuildPluginMap = Map>>; export type GlobalPluginMap = Map>>; export type LogFn = (level: any, ...args: any[]) => void; export interface KnubOptions { /** * If enabled, plugin slash commands are automatically registered with Discord on bot start-up. * Defaults to `true`. */ autoRegisterSlashCommands?: boolean; getConfig: (id: string) => Awaitable; getEnabledGuildPlugins?: (ctx: GuildContext, plugins: GuildPluginMap) => Awaitable; canLoadGuild: (guildId: string) => Awaitable; logFn?: LogFn; [key: string]: any; } export interface KnubArgs { guildPlugins: Array>; globalPlugins: Array>; options: Partial; } export interface LoadedGuildPlugin { blueprint: GuildPluginBlueprint>; pluginData: GuildPluginData; } export interface LoadedGlobalPlugin { blueprint: GlobalPluginBlueprint>; pluginData: GlobalPluginData; } interface BaseContext { config: BaseConfig; locks: LockManager; } export interface GuildContext extends BaseContext { guildId: Snowflake; loadedPlugins: Map>; } export interface GlobalContext extends BaseContext { loadedPlugins: Map>; } export type AnyContext = GuildContext | GlobalContext; export interface GuildMessage extends Message { channel: GuildTextBasedChannel; member: GuildMember; } export {};