- Written in TypeScript
- Generate Sapphire projects easily
- Generate components (commands, listeners, etc.)
- Create your own templates for components
$ npm install -g @sapphire/cli
$ sapphire COMMAND
running command...
$ sapphire (-v|--version|version)
@sapphire/cli/0.0.1 linux-x64 node-v16.9.1
$ sapphire --help [COMMAND]
USAGE
$ sapphire COMMAND
...
generate a component (command, listener, etc.)
USAGE
$ sapphire generate COMPONENT NAME
OPTIONS
-h, --help show CLI help
See code: dist/commands/generate.ts
display help for sapphire
USAGE
$ sapphire help [COMMAND]
ARGUMENTS
COMMAND command to show help for
OPTIONS
--all see all commands in CLI
See code: @oclif/plugin-help
create a new Sapphire project
USAGE
$ sapphire new [PROJECTNAME]
OPTIONS
-h, --help show CLI help
-v, --verbose
See code: dist/commands/new.ts
Default component templates are:
- command
- listener
- argument
- precondition
If you want to make your own templates, or want to override the default ones, read the next section.
In the .sapphirerc.json
file:
- Set
customFileTemplates.enabled
totrue
- Set
customFileTemplates.location
to the name of the directory you want to store your templates in.
Example:
{
"customFileTemplates": {
"enabled": true,
"location": "templates"
}
}
- Create a file like this in your custom template directory
<templateName>.<language>.sapphire
(e.gcommand.ts.sapphire
). If you make its name same as one of the default template's, your template will override the default one. - Template's have 2 parts, config and the template, separated with
---
. - We first need to type the config:
{
"category": "commands"
}
category
is the category of that template, CLI uses it to know where to create the component by finding that category's location from the locations
field in .sapphirerc.json
. You can create your own categories. Default categories are: commands
, listeners
, arguments
, preconditions
. This example uses the commands
category.
- Now we add the separator.
{
"category": "commands"
}
---
- And the last part, we add the template.
{
"category": "commands"
}
---
import { ApplyOptions } from '@sapphire/decorators';
import { MyExtendedCommand } from './somewhere';
import { Message } from 'discord.js';
@ApplyOptions<MyExtendedCommand.Options>({
description: 'A basic command'
})
export class {{name}}Command extends MyExtendedCommand {
public async run(message: Message) {
return message.channel.send('Hello world!');
}
}
If you look at the name of the class, you will see it includes {{name}}
, this is the component's name and it is replaced with that name when creating the component. For example: if we created this component with the name HelloWorld
, the name of the exported class would be HelloWorldCommand
. It is not required but if you need it, this is how it's done.
- And now you can create component with your template
sapphire generate <templateName> <componentName>
Sapphire Community is and always will be open source, even if we don't get donations. That being said, we know there are amazing people who may still want to donate just to show their appreciation. Thank you very much in advance!
We accept donations through Open Collective, Ko-fi, Paypal, Patreon and GitHub Sponsorships. You can use the buttons below to donate through your method of choice.
Donate With | Address |
---|---|
Open Collective | Click Here |
Ko-fi | Click Here |
Patreon | Click Here |
PayPal | Click Here |
Thanks goes to these wonderful people (emoji key):
Jeroen Claassens π» π π π π |
Enes GenΓ§ π» π π π€ |
This project follows the all-contributors specification. Contributions of any kind welcome!