@@ -2,8 +2,12 @@ import {
22 ActionRowBuilder ,
33 type ModalActionRowComponentBuilder ,
44 ModalBuilder ,
5- TextInputBuilder
5+ TextInputBuilder ,
6+ EmbedBuilder ,
7+ AttachmentBuilder ,
8+ type BufferResolvable
69} from 'discord.js'
10+ import type { Stream } from 'node:stream'
711import type {
812 ArgsDef ,
913 CommandExecute ,
@@ -15,6 +19,8 @@ import type {
1519 DefineEvent ,
1620 DefineEventWithOptions ,
1721 DefinePrecondition ,
22+ EmbedOptions ,
23+ EmbedSetters ,
1824 EventCallback ,
1925 EventOptions ,
2026 HarmonixCommand ,
@@ -98,6 +104,12 @@ export const defineContextMenu: DefineContextMenu &
98104 }
99105}
100106
107+ export const definePrecondition : DefinePrecondition = (
108+ callback : PreconditionCallback
109+ ) => {
110+ return { options : { } , callback }
111+ }
112+
101113export const defineModal = ( options : ModalOptions ) : ModalBuilder => {
102114 const builder = new ModalBuilder ( )
103115 . setCustomId ( options . id )
@@ -137,8 +149,30 @@ export const defineModal = (options: ModalOptions): ModalBuilder => {
137149 return builder
138150}
139151
140- export const definePrecondition : DefinePrecondition = (
141- callback : PreconditionCallback
142- ) => {
143- return { options : { } , callback }
152+ export const defineEmbed = ( options : EmbedOptions ) => {
153+ const builder = new EmbedBuilder ( )
154+ const setters : EmbedSetters = {
155+ color : ( value ) => builder . setColor ( value ?? null ) ,
156+ title : ( value ) => builder . setTitle ( value ?? null ) ,
157+ url : ( value ) => builder . setURL ( value ?? null ) ,
158+ author : ( value ) => builder . setAuthor ( value ?? null ) ,
159+ description : ( value ) => builder . setDescription ( value ?? null ) ,
160+ thumbnail : ( value ) => builder . setThumbnail ( value ?? null ) ,
161+ image : ( value ) => builder . setImage ( value ?? null ) ,
162+ timestamp : ( ) => builder . setTimestamp ( ) ,
163+ footer : ( value ) => builder . setFooter ( value ?? null ) ,
164+ fields : ( value ) => builder . addFields ( ...( value ?? [ ] ) )
165+ }
166+
167+ Object . entries ( options ) . forEach ( ( [ key , value ] ) => {
168+ const _key = key as keyof EmbedOptions
169+
170+ setters [ _key ] ! ( value )
171+ } )
172+
173+ return builder
174+ }
175+
176+ export const defineAttachment = ( args : BufferResolvable | Stream ) => {
177+ return new AttachmentBuilder ( args )
144178}
0 commit comments