-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
58 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
--- | ||
title: Goal | ||
description: sern's goal is to make bot development easier and more efficient | ||
sidebar: | ||
order: 2 | ||
--- | ||
|
||
This walkthrough will be written in [TypeScript](https://www.typescriptlang.org/) but will have JavaScript snippets throughout. | ||
|
||
## Make robust, modular, bots | ||
|
||
- **Modularity**: sern is built with modularity in mind. You can swap pieces and parts easily. | ||
- **Familiar**: Commands and structures are similar to classic v12 handlers and the official Discord.js command handler guide, while packing many features! | ||
- **Concise**: Too much code is a liability. With sern, write less for more. 🤯 | ||
|
||
## Why sern? | ||
|
||
import { Tabs, TabItem } from '@astrojs/starlight/components'; | ||
|
||
<Tabs> | ||
<TabItem value="sapphire" label="Using @sapphire/framework 🤢"> | ||
```ts title="commands/ping.ts" | ||
import { Command } from "@sapphire/framework"; | ||
import type { CommandInteraction } from "discord.js"; | ||
|
||
export class PingCommand extends Command { | ||
public constructor(context: Command.Context) { | ||
super(context, { | ||
description: "Pong!", | ||
chatInputCommand: { | ||
register: true, | ||
}, | ||
}); | ||
} | ||
public async chatInputRun(interaction: CommandInteraction) { | ||
await interaction.reply("Pong!"); | ||
} | ||
} | ||
``` | ||
</TabItem> | ||
<TabItem value="sern" label="Using @sern/handler 💪"> | ||
```ts title="commands/ping.ts" | ||
import { commandModule, CommandType } from "@sern/handler"; | ||
|
||
export default commandModule({ | ||
type: CommandType.Both, | ||
description: "Pong!", | ||
execute: async (ctx, args) => { | ||
await ctx.reply("Pong!"); | ||
}, | ||
}); | ||
``` | ||
</TabItem> | ||
</Tabs> | ||
|
||
Keep in mind the sern example acts as both a slash command AND a text command. The Sapphire example is only a slash command, and it's more code than sern. | ||
|
||
## Be smart. Choose sern. |