Skip to content

Commit 2f5480e

Browse files
committed
refactor: use instead of define for discord rich builder
1 parent d5c57dd commit 2f5480e

File tree

4 files changed

+52
-52
lines changed

4 files changed

+52
-52
lines changed

src/define.ts

+1-50
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
1-
import {
2-
ActionRowBuilder,
3-
EmbedBuilder,
4-
AttachmentBuilder,
5-
type BufferResolvable,
6-
type AnyComponentBuilder,
7-
type RestOrArray,
8-
ClientEvents
9-
} from 'discord.js'
10-
import type { Stream } from 'node:stream'
1+
import { ClientEvents } from 'discord.js'
112
import type {
123
CommandConfig,
134
CommandExecute,
@@ -22,8 +13,6 @@ import type {
2213
DefinePrecondition,
2314
DefinePreconditionWithName,
2415
DefineSelectMenu,
25-
EmbedOptions,
26-
EmbedSetters,
2716
EventCallback,
2817
EventOptions,
2918
HarmonixCommand,
@@ -135,41 +124,3 @@ export const definePrecondition: DefinePrecondition &
135124

136125
return { name, callback }
137126
}
138-
139-
export const defineActionRow = <
140-
T extends AnyComponentBuilder = AnyComponentBuilder
141-
>(
142-
...components: RestOrArray<T>
143-
): ActionRowBuilder<T> => {
144-
const builder = new ActionRowBuilder<T>().addComponents(...components)
145-
146-
return builder
147-
}
148-
149-
export const defineEmbed = (options: EmbedOptions) => {
150-
const builder = new EmbedBuilder()
151-
const setters: EmbedSetters = {
152-
color: (value) => builder.setColor(value ?? null),
153-
title: (value) => builder.setTitle(value ?? null),
154-
url: (value) => builder.setURL(value ?? null),
155-
author: (value) => builder.setAuthor(value ?? null),
156-
description: (value) => builder.setDescription(value ?? null),
157-
thumbnail: (value) => builder.setThumbnail(value ?? null),
158-
image: (value) => builder.setImage(value ?? null),
159-
timestamp: () => builder.setTimestamp(),
160-
footer: (value) => builder.setFooter(value ?? null),
161-
fields: (value) => builder.addFields(...(value ?? []))
162-
}
163-
164-
Object.entries(options).forEach(([key, value]) => {
165-
const _key = key as keyof EmbedOptions
166-
167-
setters[_key]!(value)
168-
})
169-
170-
return builder
171-
}
172-
173-
export const defineAttachment = (args: BufferResolvable | Stream) => {
174-
return new AttachmentBuilder(args)
175-
}

src/gets.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
UserSelectMenuBuilder
1313
} from 'discord.js'
1414
import { createError, useHarmonix } from './harmonix'
15-
import { defineActionRow } from './define'
15+
import { useActionRow } from './uses'
1616
import type {
1717
ChannelSelectMenuConfig,
1818
MentionableSelectMenuConfig,
@@ -81,7 +81,7 @@ export const getModal = (id: string) => {
8181
if (input.required) {
8282
inputBuilder.setRequired(input.required)
8383
}
84-
builder.addComponents(defineActionRow(inputBuilder))
84+
builder.addComponents(useActionRow(inputBuilder))
8585
}
8686
}
8787

src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from './define'
22
export * from './gets'
3+
export * from './uses'
34
export { createHarmonix, createError, useHarmonix } from './harmonix'

src/uses.ts

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import {
2+
ActionRowBuilder,
3+
type AnyComponentBuilder,
4+
AttachmentBuilder,
5+
type BufferResolvable,
6+
EmbedBuilder,
7+
type RestOrArray
8+
} from 'discord.js'
9+
import { Stream } from 'node:stream'
10+
import { EmbedOptions, EmbedSetters } from './types'
11+
12+
export const useActionRow = <
13+
T extends AnyComponentBuilder = AnyComponentBuilder
14+
>(
15+
...components: RestOrArray<T>
16+
): ActionRowBuilder<T> => {
17+
const builder = new ActionRowBuilder<T>().addComponents(...components)
18+
19+
return builder
20+
}
21+
22+
export const useEmbed = (options: EmbedOptions) => {
23+
const builder = new EmbedBuilder()
24+
const setters: EmbedSetters = {
25+
color: (value) => builder.setColor(value ?? null),
26+
title: (value) => builder.setTitle(value ?? null),
27+
url: (value) => builder.setURL(value ?? null),
28+
author: (value) => builder.setAuthor(value ?? null),
29+
description: (value) => builder.setDescription(value ?? null),
30+
thumbnail: (value) => builder.setThumbnail(value ?? null),
31+
image: (value) => builder.setImage(value ?? null),
32+
timestamp: () => builder.setTimestamp(),
33+
footer: (value) => builder.setFooter(value ?? null),
34+
fields: (value) => builder.addFields(...(value ?? []))
35+
}
36+
37+
Object.entries(options).forEach(([key, value]) => {
38+
const _key = key as keyof EmbedOptions
39+
40+
setters[_key]!(value)
41+
})
42+
43+
return builder
44+
}
45+
46+
export const useAttachment = (args: BufferResolvable | Stream) => {
47+
return new AttachmentBuilder(args)
48+
}

0 commit comments

Comments
 (0)