@jadl/builders
Version:
Builders for JaDL
131 lines (96 loc) • 3.84 kB
Markdown
# @jadl/builders
Builders library for JaDL
# Base Builders
## Embed
Embed allows the creation of a normal Discord embed object through a builder
Create an embed
```ts
import { Embed } from '@jadl/builders'
const embed = new Embed()
.title('Hello world!')
.description('I am here')
.footer('Woah')
```
You can then render the embed to a Discord API embed object
```ts
embed.render() // APIEmbed
```
## FileBuilder
FileBuilder allows the appension of files to a MessageBuilder or through the parser
```ts
import { FileBuilder } from '@jadl/builders'
const attachments = new FileBuilder()
.add('hello.txt', Buffer.from('Hi'))
.add('image.png', imageBuffer)
```
You can then render the FIleBuilder as a form-data object ready to be sent to Discord or through parser
```ts
attachments.toFormData()
```
## MessageBuilder
MessageBuilder allows the appension of the builders and other useful objects to be sent through the parser
```ts
import { MessageBuilder } from '@jadl/builders'
const message = new MessageBuilder({ content: 'Hello world' })
.addEmbed(embed)
.addFiles(attachments)
.addComponentRow({
type: ComponentType.Button,
custom_id: 'Hello',
style: ButtonStyle.Primary,
label: 'Hello World'
})
```
You can then render these MessageBuilder's into form-data or a JSON body filled with the data added
```ts
message.render() // form-data or JSON body
```
# Parser
## `parse(input)`
`parse()` turns any readable type & the builders in this package into a valid @discordjs/rest RequestData object to be passed directly to the request. It uses the `parseMessage()` method (below) to create the type, but then adds all of the extra properties and headers necesarry for the request.
```ts
worker // instantiated worker with @discordjs/rest REST on .api
import { parse, MessageTypes } from '@jadl/builders'
function sendMessage (channelId: string, input: MessageTypes) {
worker.api.post(`/channels/${channelId}/messages`, parse(input))
}
// example list of what you can pass into parse below
```
## `parseMessage()`
`parseMessage()` turns any readable type & the builders in this package into a valid message JSON or form-data. It can take many types like strings, our builders like Embeds and FileBuilders, and of course MessageBuilders, and tries it's best to configure it into a message ready to be sent
> :warning: It is recommended to use `parse()` as not doing so might lack the necesarry headers and configuration to send it as an actual message
```ts
import { parseMessage } from '@jadl/builders'
// works on stringified types such as strings, bigints, numbers & symbols
parseMessage('hello world') => { content: 'hello world' }
// works on our builders
parseMessage(
new Embed()
.title('hello world')
) => { embeds: [ { title: 'hello world' } ] }
// anything with files involved will return a form-data
parseMessage(
new FileBuilder()
.add('hello.txt', Buffer.from('hi'))
) => FormData<[ ['hello.txt', Buffer<68 69>] ]>
// and of course, on MessageBuilders
parseMessage(
new MessageBuilder({ content: 'hello' })
.addEmbeds(
new Embed()
.title('goodbye')
)
.addComponentRow({
...
})
) => { content: 'hello', embeds: [ { title: 'goobye' }], components: [ ... ] }
// as afforementied, when a file is involed MessageBuilders will also turn into form-data
parseMessage(
new MessageBuilder({ content: 'hi' })
.addFiles(
new FileBuilder()
.add('hi.txt', Buffer.from('hi'))
)
) => FormData<[ ['hi.txt', Buffer<68 69>], [ 'payload_json', '{"content": "hi"}' ] ]>
// json payloads are attached correctly for Discord uploading
```