framecord

A template to create a modular and extensible Discord bot.

MIT License

Downloads
155
Stars
2
Committers
2

Framecord 🤖

framecord is a modular and extensible framework for creating Discord bots, created with discord.js.

Documentation

Check out the documentation at matteopolak.com/docs/framecord.

"Hello, world!"

The setup below will do the following:

  1. Create a slash command called /helloworld that outputs the message Hello {user}!
  2. Print I just logged in as {username}! to the console when the ready event is fired

src/index.ts

import { join } from 'node:path';

import { IntentsBitField } from 'discord.js';
import { Client, Command } from '@matteopolak/framecord';

const client = new Client({
  intents: [
    IntentsBitField.Flags.Guilds
  ]
});

// Client#compileCommandDirectory takes an *absolute path* to the
// command directory, and will construct a tree of commands.
//
// Commands in nested folders will be grouped under the command by the
// same name as the folder (which *must* exist)
//
// By default, commands are added relative to the root command node,
// but you can provide the subcommand Collection of any command to start
// there instead.
await client.compileCommandDirectory(join(__dirname, 'commands'));

// Client#init must complete (i.e. await it) *before* the client is logged in.
await client.init();

client.login(process.env.TOKEN);

src/commands/helloworld.ts

import {
  Command,
  CommandOptions,
  CommandResponse,
  CommandSource,
  EventHandler
} from '@matteopolak/framecord';

// *Must* be a default export in order to work properly when
// adding an entire command directory
export default class HelloWorld extends Command {
  // *Must* be an asynchronous function
  public async run(source: CommandSource): CommandResponse {
    return `Hello, ${source.user.username}!`;
  }

  // The @EventHandler decorator is used to define when
  // a method should be treated as an event listener
  //
  // It currently only has the `once` option, which (when true)
  // will stop listening to the event after it is fired once
  @EventHandler({ once: true })
  public async ready() {
    // `client` is a reference to the Client
    console.log(`I just logged in as ${this.client.user.username}!`);
  }
}
Package Rankings
Top 16.48% on Npmjs.org
Related Projects