3.1.1 • Published 1 year ago
@easy-ds-bot/framework v3.1.1
Features
- Intuitive and does not complicate the development process
- Contains type declarations (.d.ts)
- Fully configurable
- Built-in
/helpcommand - Lazy constructors (
createSlashCommand(),createComponent()and more) - Smart Fetches: get from cache or fetch in compliance with the rate limit (
sfMember(context, context.interaction.user.id)and more)
Requirements
- NodeJS
v18or newer
Setup
- Install
easy-ds-botvia npm:
npm i @easy-ds-bot/framework- Create
tsconfig.jsonfile:
{
"extends": "./node_modules/@easy-ds-bot/framework/tsconfig.base.json",
"exclude": [
"node_modules/",
"logs/",
"vault.json",
"dist/",
"assets/"
],
"compilerOptions": {
"rootDit": "src",
"outDir": "dist"
}
}- Create your first bot using
easy-ds-bot:
// src/index.ts
//'runtime' is a 'global' object equivalent
import { eds, djs } from "@easy-ds-bot/framework";
const { token } = require("../vault.json");
const config: eds.ConfigExemplar = {
token,
intents: "all",
commandsPath: "./commands/",
slashOnly: true, //default value
includeBuiltinCommands: {
help: true, //default value
},
colors: {
default: 0xffffff, //'0x' + HEX color without '#'
info: 0x00FFEA,
},
};
const bot = eds.createBot(config);
eds.createSlashCommand({
name: "cake",
description: "Give me a cake!",
nsfw: false,
type: djs.ApplicationCommandType.ChatInput,
defaultMemberPermissions: null,
dmPermission: false,
});
eds.startBot();
export default bot;- Create your first
/cakecommand:
// src/commands/cake.ts
import { eds, djs } from "@easy-ds-bot/framework";
//eds components are resistant to bot restarts
eds.createButton({
custom_id: "get cake"
}, async context => { //"get cake" button code
await context.reply(
true, //epemeral?
undefined, //title
"# :cake:" //description
);
})
export = {
async run(context)
{
await context.reply(
true, //ephemeral?
"aloha hawaii", //embed title (optional if has desc)
`<@${context.interaction.user.id}>, do you want a cake?`, //embed desc (optional if has title)
"info", //?embed color name (set in config)
[{ //?djs components
type: djs.ComponentType.ActionRow,
components: [{
type: djs.ComponentType.Button,
style: djs.ButtonStyle.Secondary, //gray
custom_id: "get cake",
label: "Get cake"
}]
}]
);
},
//command options
info: {
name: "cake",
type: "slash",
//for auto-help:
desc: "Give me a cake!",
category: "General",
usage: '',
hidden: true,
}
} satisfies eds.CommandFile<"slash">;- A) Create
start.batfile (WINDOWS ONLY) for easily compile & launch your bot:
rem start.bat
@npx tsc
@node dist/index.js
@pause
rem "@pause" keeps window open after bot crash- B) Create
start.shfile for easily compile & launch your bot:
# start.sh
npx tsc
node dist/index.js
read -p "" #keeps window open after bot crash- Execute (open)
start.batorstart.shfile. Voila! It's alive!
API
- module
@easy-ds-bot/utils - module
@easy-ds-bot/timeparser createBot (config: ConfigExemplar): KnownRuntimeProperties(lazyConstructor)createButton (options: ButtonOptions, code: ButtonCode): void(lazyConstructor)- runtime:
componentManager
- runtime:
createMenu (options: MenuOptions, code: MenuUserCode | MenuStringCode): void(lazyConstructor)- runtime:
componentManager
- runtime:
createModal (options: ModalOptions, code: ModalCode): void(lazyConstructor)- runtime:
componentManager
- runtime:
createSlashCommand (options: SpplicationCommandData): void(lazyConstructor)- runtime:
slashCommandsManager
- runtime:
- async
sfUser (mng_or_ctx: AnyContext | UserManager | undefined, id: Snowflake | undefined): Promise<User | undefined> - async
sfMember (mng_or_ctx: AnyContext | GuildMemberManager | undefined, id: Snowflake | undefined): Promise<GuildMember | undefined> - async
sfChannel (mng_or_ctx: AnyContext | GuildChannelManager | undefined, id: Snowflake | undefined): Promise<GuildBasedChannel | undefined> - async
sfGuild (mng_or_ctx: AnyContext | GuildManager | undefined, id: Snowflake | undefined): Promise<Guild | undefined> - async
sfRole (mng_or_ctx: AnyContext | RoleManager | undefined, id: Snowflake | undefined): Promise<Role | undefined> - async
sfMessage (mng_or_ctx: AnyContext | MessageManager | undefined, id: Snowflake | undefined): Promise<Message | undefined> - async
startBot (): Promise<void>- runtime:
slashCommandsManager, client, config
- runtime:
- anonimous class
runtimeStorage(runtime)[key: string]: anygetAll <T>(...keys: (keyof T)): Tget <V>(key: string): VsetAll <T>(values: T): Tset <K, V>(key: K, value: V): { [X in K]: V }
- class
Clientextends djs.Client- constructor
new (options: Options) - async
init (): Promise<void>
- constructor
- class
ComponentsManager- constructor
new (){} clearMaps (): voidcreateButton (options: ButtonOptions, code: ButtonCode): voidcreateMenu (options: MenuOptions, code: MenuUserCode | MenuStringCode): voidcreateModal (options: ModalOptions, code: ModalCode): void- iternal get
getButtonsMap: Map<string, MapVal<...>> - iternal get
getMenusMap: Map<string, MapVal<...>> - iternal get
getModalsMap: Map<string, MapVal<...>>
- constructor
- class
Database <V>- field
Map: Map<string, Value<...>> - constructor
new (path: string, autosave?: boolean | number, dump_path?: string) save (): Promise<void>set (key: string, value: V, tags?: TagsValues, save?: boolean): voidget (key: string): V | undefinedgetKey (value: V, single?: boolean): string[]getFull (key: string): Value<V> | undefinedhas (key: string): booleanhasValue (value: V): booleandel (key: string): void- iternal get
MapJSON: string
- field
- class
Handler- runtime:
config, loader, client, contextFactory - constructor
new ()
- runtime:
- class
Loader- field
commandHelp: AutoCommandHelp - constructor
new (path: string, noLog?: boolean, ignorePrefixes?: string[], builtinCommands?: ConfigExemplar.includeBuiltinCommands) clearMaps (): void- async
load (): Promise<void> - iternal async
loadBuiltin (): Promise<void> - iternal get
getCallMap: Map<string[], string> - iternal get
getSlashCallMap: Map<string, string> - iternal get
getAlwaysCallMap: string[] - iternal get
getHelpInfoMap: Map<string[], CommandHelpInfo>
- field
- class
SlashCommandsManager- runtime:
client create (options: djs.ApplicationCommandData): voidsave (): void
- runtime:
- type
SupportedInteractions - type
CommandContext <type> - type
AnyContext - type
InteractionContext <SupportedInteractions> - type
SlashCommandContext - type
TextCommandContext - type
CommandFile - type
CommandHelpInfo - type
CommandInfo - type
ConfigExemplar - type
KnownRuntimeProperties - iternal async
expandDirs (path: string): Promise<string[]> - iternal async
templateEmbedReply (...params): Promise<void> - iternal async
templateEmbedEditReply (...params): Promise<void> - iternal class
AutoCommandHelp- runtime:
config - field
pages: Map<string, string> - field
commandTypes: Map<string, "slash" | "text" | "nonPrefixed"> - field
descriptions: Map<string, string> - field
templates: {...} - field
_fullCommandList: string - constructor
new () getCommandList (roles: string[]): stringgetCommandNames (roles: string[]): string[]getBakedCommandNames (roles: string[]): string[]clear (): void- iternal
reg (file: CommandFile<boolean> as const): void - iternal field
_publicCommands: string - iternal field
_fullCommandList: string
- runtime:
- iternal class
ContextFactory- runtime:
config - constructor
new () createTextContext (message: djs.Message): CommandContext<false>createSlashContext (interaction: djs.ChatInputCommandInteraction): CommandContext<true>
- runtime:
Source (git)
Issues (git)
3.0.2
1 year ago
3.0.1
1 year ago
3.0.0
1 year ago
3.1.1
1 year ago
3.1.0
1 year ago
2.1.2
1 year ago
2.1.1
1 year ago
2.1.0
2 years ago
2.0.2
2 years ago
2.0.1
2 years ago
2.0.0
2 years ago
1.7.3
2 years ago
1.7.2
2 years ago
1.7.1
2 years ago
1.7.0
2 years ago
1.6.4
2 years ago
1.6.3
2 years ago
1.6.5
2 years ago
1.6.2
2 years ago
1.6.1
2 years ago
1.6.0
2 years ago
1.5.9
2 years ago
1.5.5
2 years ago
1.5.4
2 years ago
1.5.3
2 years ago
1.5.8
2 years ago
1.5.7
2 years ago
1.5.6
2 years ago
1.5.2
2 years ago
1.5.1
2 years ago
1.5.0
2 years ago
1.4.12
2 years ago
1.4.11
2 years ago
1.4.10
2 years ago
1.4.9
2 years ago
1.4.8
2 years ago
1.4.7
2 years ago
1.4.6
2 years ago
1.4.5
2 years ago
1.4.4
2 years ago
1.4.3
2 years ago
1.4.2
2 years ago
1.4.1
2 years ago
1.4.0
2 years ago
1.3.4
2 years ago
1.3.3
2 years ago
1.3.2
2 years ago
1.3.1
2 years ago
1.3.0
2 years ago
1.2.1
2 years ago
1.2.0
2 years ago
1.1.9
2 years ago
1.1.8
2 years ago
1.1.7
2 years ago
1.1.6
2 years ago
1.1.5
2 years ago
1.1.4
2 years ago
1.1.3
2 years ago
1.1.2
2 years ago
1.1.1
2 years ago
1.1.0
2 years ago
1.0.1
2 years ago
1.0.0
2 years ago