@ayanaware/bentocord
Version:
Bentocord is a Bento plugin designed to rapidly build fully functional Discord Bots.
152 lines (151 loc) • 6.08 kB
TypeScript
import { Component, ComponentAPI } from '@ayanaware/bento';
import { CommandInteraction, Message } from 'eris';
import { PossiblyTranslatable } from '../interfaces/Translatable';
import { AnyCommandContext } from './CommandContext';
import { OptionType } from './constants/OptionType';
import { SuppressorType } from './constants/SuppressorType';
import type { Command } from './interfaces/Command';
import { CommandDefinition, CommandPermissionDefaults } from './interfaces/CommandDefinition';
import type { AnyCommandOption, AnyValueCommandOption, CommandOptionSubCommand, CommandOptionSubCommandGroup } from './interfaces/CommandOption';
import type { Resolver } from './interfaces/Resolver';
import type { Suppressor } from './interfaces/Suppressor';
import type { CommandEntity } from './interfaces/entity/CommandEntity';
import type { ResolverEntity } from './interfaces/entity/ResolverEntity';
import type { SuppressorEntity } from './interfaces/entity/SuppressorEntity';
export interface CommandDetails {
/** The command */
command: Command;
/** Command Definition */
definition: CommandDefinition;
/** Command category */
category?: string;
/** Command permissions */
permissions: Array<CommandPermissionDetails>;
}
export interface CommandPermissionDetails {
/** The permission name */
permission: string;
/** Default state of this permission */
defaults: CommandPermissionDefaults;
/** Is this a hidden permission */
hidden: boolean;
/** Subcommand path for this permission */
path?: Array<string>;
}
export declare class CommandManager implements Component {
name: string;
api: ComponentAPI;
defaultPrefix: string;
ignoreMode: string;
private readonly interface;
private readonly discord;
private readonly commands;
private readonly aliases;
private readonly resolvers;
private readonly suppressors;
onLoad(): Promise<void>;
onChildLoad(entity: CommandEntity | ResolverEntity | SuppressorEntity): Promise<void>;
onChildUnload(entity: CommandEntity | ResolverEntity | SuppressorEntity): Promise<void>;
/**
* Add Resolver
* @param resolver OptionResolver
*/
addResolver(resolver: Resolver<unknown>): void;
/**
* Remove Resolver
* @param type OptionType or string
*/
removeResolver(type: OptionType | string): void;
getResolvers(): Map<OptionType | string, Resolver<unknown>>;
findResolver(type: OptionType | string): Resolver<unknown>;
private executeResolver;
/**
* Add Suppressor
* @param suppressor Suppressor
*/
addSuppressor(suppressor: Suppressor): void;
/**
* Remove Suppressors
* @param type SuppressorType or string
*/
removeSuppressor(type: SuppressorType | string): void;
private executeSuppressors;
/**
* Get prefix for a guild
* @param snowflake guildId
* @returns prefix
*/
getPrefix(snowflake?: string): Promise<string>;
/**
* Set prefix for a guild
* @param snowflake guildId
* @param prefix new prefix
*/
setPrefix(snowflake: string, prefix: string): Promise<void>;
/**
* Get primary name of command alias or option name
* @param name string or array of string and translatables. First element is always a string
* @returns string
*/
getPrimaryName(name: string | [string, ...Array<PossiblyTranslatable>]): string;
/**
* Get all translations for a possibly translatable
* @param item Array<PossiblyTranslatable>
* @returns Array of Tuple [string, Array<{ lang: string }>]
*/
getItemTranslations(items: PossiblyTranslatable | Array<PossiblyTranslatable>, normalize?: boolean): Promise<Array<[string, Record<string, string>]>>;
/**
* Get all commands and their details
*/
getCommands(): Map<string, CommandDetails>;
getCategorizedCommands(): Map<string, Map<string, CommandDetails>>;
isSubCommand(option: AnyCommandOption): option is CommandOptionSubCommand;
isSubCommandGroup(option: AnyCommandOption): option is CommandOptionSubCommandGroup;
isAnySubCommand(option: AnyCommandOption): option is CommandOptionSubCommand | CommandOptionSubCommandGroup;
/**
* Add command
* @param command Command
*/
addCommand(command: Command): Promise<void>;
/**
* Remove Command
* @param command Command
*/
removeCommand(command: Command | string): void;
/**
* Find Command by alias
* @param alias Alias
* @returns Command
*/
findCommand(alias: string): Command;
/**
* Get all valid command related permissions, include all and categories
* @returns Map of permission => CommandPermissionDetails
*/
getPermissions(): Map<string, CommandPermissionDetails & {
command?: Command;
type: 'GROUP' | 'COMMAND';
}>;
/**
* Runs pre-flight checks such as perms & suppressors before executing command
* @param command Command
* @param ctx CommandContext
* @returns boolean, if false you should not execute the command
*/
prepareCommand(command: Command, ctx: AnyCommandContext): Promise<boolean>;
executeCommand(command: Command, ctx: AnyCommandContext, options: Record<string, unknown>): Promise<unknown>;
getPermissionDetails(command: Command): Array<CommandPermissionDetails>;
getTypePreview(option: AnyValueCommandOption): string;
fufillInteractionOptions(ctx: AnyCommandContext, definition: CommandDefinition, data: CommandInteraction['data']): Promise<Record<string, unknown>>;
private processInteractionOptions;
/**
* Matches up input text with options
* @param options Array of CommandOption
* @param input User input
*/
fufillTextOptions(ctx: AnyCommandContext, definition: CommandDefinition, input: string): Promise<Record<string, unknown>>;
private processTextOptions;
private resolveOption;
private handleInteractionCreate;
handleMessageCreate(message: Message): Promise<any>;
}