Files
handler/README.md
Jacob Nguyen 74c4b77d4b build: refactor/building (#252)
* refactor: conditional compilation of loading esm/cjs modules

* refactor: move file loading file

* refactor: add conditional compilation for building modules

* refactor: add conditional compilation for building modules

* perf: decrease build times

* test

* revert: typo and clean code

* build: smaller build

* chore:cleanscripts

* chore:refactor readme

* build:automerge lockfile

* chore: remove build and upgrade readme

* fix: dropdown

* chore: fix

* chore: more docs

---------

Co-authored-by: jacoobes <jacobnguyend@gmail.com>
2023-03-15 21:08:27 -05:00

4.4 KiB

Handlers. Redefined.

A complete, customizable, typesafe, & reactive framework for discord bots

NPM version NPM downloads License MIT docs.rs Lines of code

Why?

  • Most handlers don't support discord.js 14.7+
  • Customizable, composable commands
  • Plug and play or customize to your liking
  • Embraces reactive programming for consistent and reliable backend
  • Customizable logger, error handling, and more
  • Active development and growing community

👀 Quick Look

  • Support for discord.js v14 and all interactions
  • Hybrid commands
  • Lightweight and customizable
  • ESM, CommonJS and TypeScript support
  • A powerful CLI and awesome community-made plugins

📜 Installation

npm install @sern/handler
yarn add @sern/handler
pnpm add @sern/handler

👶 Basic Usage

ping.ts
export default commandModule({
  type: CommandType.Slash,
  //Installed plugin to publish to discord api and allow access to owners only.
  plugins: [publish(), ownerOnly()],
  description: 'A ping pong command',
  execute(ctx) {
    ctx.reply('Hello owner of the bot');
  }
});
modal.ts
export default commandModule({
    type: CommandType.Modal,
    //Installed a plugin to make sure modal fields pass a validation.
    plugins : [
        assertFields({
            fields: { 
                name: /^([^0-9]*)$/ 
            },
            failure: (errors, modal) => modal.reply('your submission did not pass the validations')
        })
    ],
    execute : (modal) => {
        modal.reply('thanks for the submission!');
    }
})
index.ts
import { Client, GatewayIntentBits } from 'discord.js';
import { Sern, single, type Dependencies } from '@sern/handler';

//client has been declared previously

interface MyDependencies extends Dependencies {
    '@sern/client': Singleton<Client>;
}
export const useContainer = Sern.makeDependencies<MyDependencies>({
    build: root => root
        .add({ '@sern/client': single(() => client)  })
});

//View docs for all options
Sern.init({
	defaultPrefix: '!', // removing defaultPrefix will shut down text commands
	commands: 'src/commands',
	// events: 'src/events' (optional),
	containerConfig : {
	    get: useContainer
	}
});

client.login("YOUR_BOT_TOKEN_HERE");

🤖 Bots Using sern

  • Community Bot, the community bot for our discord server.
  • Vinci, the bot for Mara Turing.
  • Bask, Listen your favorite artists on Discord.
  • ava, A discord bot that plays KNGI and Gensokyo Radio.
  • ALMA (WIP), Using AI to unleash the power in your server.
  • Protector (WIP), Just a simple bot to help enhance a private minecraft server.

💻 CLI

It is highly encouraged to use the command line interface for your project. Don't forget to view it.

👋 Contribute

  • Read our contribution guidelines carefully
  • Pull up on issues and report bugs
  • All kinds of contributions are welcomed.