Skip to content

Commit 07ef2b0

Browse files
committed
style: rename gets to getters
1 parent 7a624e8 commit 07ef2b0

File tree

1 file changed

+226
-0
lines changed

1 file changed

+226
-0
lines changed

src/getters.ts

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
import {
2+
ButtonBuilder,
3+
ButtonStyle,
4+
ChannelSelectMenuBuilder,
5+
MentionableSelectMenuBuilder,
6+
ModalBuilder,
7+
RoleSelectMenuBuilder,
8+
StringSelectMenuBuilder,
9+
StringSelectMenuOptionBuilder,
10+
TextInputBuilder,
11+
TextInputStyle,
12+
UserSelectMenuBuilder
13+
} from 'discord.js'
14+
import { createError, useHarmonix } from './harmonix'
15+
import { useActionRow } from './uses'
16+
import type {
17+
ChannelSelectMenuConfig,
18+
MentionableSelectMenuConfig,
19+
RoleSelectMenuConfig,
20+
StringSelectMenuConfig,
21+
UserSelectMenuConfig
22+
} from './types'
23+
24+
export const getButton = (id: string) => {
25+
const harmonix = useHarmonix()
26+
const button = harmonix.buttons.get(id)
27+
28+
if (!button) return null
29+
const builder = new ButtonBuilder()
30+
.setCustomId(button.config.id!)
31+
.setLabel(button.config.label)
32+
.setStyle(
33+
button.config.style
34+
? ButtonStyle[button.config.style]
35+
: ButtonStyle.Primary
36+
)
37+
38+
if (button.config.emoji) {
39+
builder.setEmoji(button.config.emoji)
40+
}
41+
if (button.config.url) {
42+
builder.setURL(button.config.url)
43+
}
44+
if (button.config.disabled) {
45+
builder.setDisabled(button.config.disabled)
46+
}
47+
48+
return builder
49+
}
50+
51+
export const getModal = (id: string) => {
52+
const harmonix = useHarmonix()
53+
const modal = harmonix.modals.get(id)
54+
55+
if (!modal) return null
56+
const builder = new ModalBuilder()
57+
.setCustomId(modal.config.id!)
58+
.setTitle(modal.config.title)
59+
60+
if (modal.config.inputs) {
61+
for (const id in modal.config.inputs) {
62+
const input = modal.config.inputs[id]
63+
const inputBuilder = new TextInputBuilder()
64+
.setCustomId(id)
65+
.setLabel(input.label)
66+
.setStyle(
67+
input.style ? TextInputStyle[input.style] : TextInputStyle.Short
68+
)
69+
70+
if (input.minLength) {
71+
inputBuilder.setMinLength(input.minLength)
72+
}
73+
if (input.maxLength) {
74+
inputBuilder.setMaxLength(input.maxLength)
75+
}
76+
if (input.placeholder) {
77+
inputBuilder.setPlaceholder(input.placeholder)
78+
}
79+
if (input.value) {
80+
inputBuilder.setValue(input.value)
81+
}
82+
if (input.required) {
83+
inputBuilder.setRequired(input.required)
84+
}
85+
builder.addComponents(useActionRow(inputBuilder))
86+
}
87+
}
88+
89+
return builder
90+
}
91+
92+
export const getSelectMenu = (id: string) => {
93+
const harmonix = useHarmonix()
94+
const selectMenu = harmonix.selectMenus.get(id)
95+
96+
if (!selectMenu) return null
97+
const { placeholder, type, disabled, minValues, maxValues } =
98+
selectMenu.config
99+
100+
switch (type) {
101+
case 'String': {
102+
const config = selectMenu.config as StringSelectMenuConfig
103+
const builder = new StringSelectMenuBuilder()
104+
.setCustomId(selectMenu.config.id!)
105+
.setPlaceholder(placeholder)
106+
107+
if (disabled) {
108+
builder.setDisabled(disabled)
109+
}
110+
if (minValues) {
111+
builder.setMinValues(minValues)
112+
}
113+
if (maxValues) {
114+
builder.setMaxValues(maxValues)
115+
}
116+
config.options.forEach((option) => {
117+
const optionBuilder = new StringSelectMenuOptionBuilder()
118+
.setLabel(option.label)
119+
.setValue(option.value)
120+
121+
if (option.description) {
122+
optionBuilder.setDescription(option.description)
123+
}
124+
if (option.emoji) {
125+
optionBuilder.setEmoji(option.emoji)
126+
}
127+
if (option.default) {
128+
optionBuilder.setDefault(true)
129+
}
130+
131+
builder.addOptions(optionBuilder)
132+
})
133+
134+
return builder
135+
}
136+
case 'User': {
137+
const config = selectMenu.config as UserSelectMenuConfig
138+
const builder = new UserSelectMenuBuilder()
139+
.setCustomId(id)
140+
.setPlaceholder(placeholder)
141+
142+
if (disabled) {
143+
builder.setDisabled(disabled)
144+
}
145+
if (minValues) {
146+
builder.setMinValues(minValues)
147+
}
148+
if (maxValues) {
149+
builder.setMaxValues(maxValues)
150+
}
151+
if (config.defaultUsers) {
152+
builder.setDefaultUsers(config.defaultUsers)
153+
}
154+
155+
return builder
156+
}
157+
case 'Channel': {
158+
const config = selectMenu.config as ChannelSelectMenuConfig
159+
const builder = new ChannelSelectMenuBuilder()
160+
.setCustomId(id)
161+
.setPlaceholder(placeholder)
162+
163+
if (disabled) {
164+
builder.setDisabled(disabled)
165+
}
166+
if (minValues) {
167+
builder.setMinValues(minValues)
168+
}
169+
if (maxValues) {
170+
builder.setMaxValues(maxValues)
171+
}
172+
if (config.channelTypes) {
173+
builder.addChannelTypes(...config.channelTypes)
174+
}
175+
if (config.defaultChannels) {
176+
builder.setDefaultChannels(config.defaultChannels)
177+
}
178+
179+
return builder
180+
}
181+
case 'Role': {
182+
const config = selectMenu.config as RoleSelectMenuConfig
183+
const builder = new RoleSelectMenuBuilder()
184+
.setCustomId(id)
185+
.setPlaceholder(placeholder)
186+
187+
if (disabled) {
188+
builder.setDisabled(disabled)
189+
}
190+
if (minValues) {
191+
builder.setMinValues(minValues)
192+
}
193+
if (maxValues) {
194+
builder.setMaxValues(maxValues)
195+
}
196+
if (config.defaultRoles) {
197+
builder.setDefaultRoles(config.defaultRoles)
198+
}
199+
200+
return builder
201+
}
202+
case 'Mentionable': {
203+
const config = selectMenu.config as MentionableSelectMenuConfig
204+
const builder = new MentionableSelectMenuBuilder()
205+
.setCustomId(id)
206+
.setPlaceholder(placeholder)
207+
208+
if (disabled) {
209+
builder.setDisabled(disabled)
210+
}
211+
if (minValues) {
212+
builder.setMinValues(minValues)
213+
}
214+
if (maxValues) {
215+
builder.setMaxValues(maxValues)
216+
}
217+
if (config.defaultValues) {
218+
builder.setDefaultValues(config.defaultValues)
219+
}
220+
221+
return builder
222+
}
223+
default:
224+
throw createError('Invalid select menu type')
225+
}
226+
}

0 commit comments

Comments
 (0)