Skip to content

Commit fe2c82d

Browse files
committed
feat: add preconditions
1 parent cb2194c commit fe2c82d

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/harmonix.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,37 @@
11
import type { LoadConfigOptions } from 'c12'
22
import consola from 'consola'
3+
import { colors } from 'consola/utils'
34
import { loadOptions } from './options'
4-
import { scanCommands, scanContextMenus, scanEvents } from './scan'
5+
import {
6+
scanCommands,
7+
scanContextMenus,
8+
scanEvents,
9+
scanPreconditions
10+
} from './scan'
511
import { resolveHarmonixCommand } from './commands'
612
import { resolveHarmonixEvent } from './events'
713
import { resolveHarmonixContextMenu } from './contextMenus'
14+
import { resolveHarmonixPrecondition } from './preconditions'
815
import {
916
initCient,
1017
refreshApplicationCommands,
1118
registerCommands,
1219
registerContextMenu,
1320
registerEvents,
21+
registerPreconditions,
1422
registerSlashCommands
1523
} from './discord'
1624
import type { Harmonix, HarmonixConfig, HarmonixOptions } from './types'
25+
import { version } from '../package.json'
1726

1827
export const createHarmonix = async (
1928
config: HarmonixConfig = {},
2029
opts: LoadConfigOptions = {}
2130
) => {
2231
const options = await loadOptions(config, opts)
2332
const harmonix: Harmonix = {
24-
options: options as HarmonixOptions
33+
options: options as HarmonixOptions,
34+
preconditions: new Map()
2535
}
2636

2737
const scannedCommands = await scanCommands(harmonix)
@@ -45,6 +55,15 @@ export const createHarmonix = async (
4555
resolveHarmonixContextMenu(ctm, harmonix.options)
4656
)
4757

58+
const scannedPreconditions = await scanPreconditions(harmonix)
59+
const _preconditions = [
60+
...(harmonix.options.preconditions || []),
61+
...scannedPreconditions
62+
]
63+
const preconditions = _preconditions.map((prc) =>
64+
resolveHarmonixPrecondition(prc, harmonix.options)
65+
)
66+
4867
if (!process.env.HARMONIX_CLIENT_TOKEN) {
4968
createError(
5069
'Client token is required. Please provide it in the environment variable HARMONIX_CLIENT_TOKEN.'
@@ -55,8 +74,10 @@ export const createHarmonix = async (
5574
'Client ID is required. You can provide it in the configuration file or in the environment variable HARMONIX_CLIENT_ID.'
5675
)
5776
}
77+
consola.log(colors.blue(`Harmonix ${colors.bold(version)}\n`))
5878
harmonix.client = initCient(harmonix.options)
5979
registerEvents(harmonix, events)
80+
registerPreconditions(harmonix, preconditions)
6081
await refreshApplicationCommands(harmonix, [
6182
...commands.filter((cmd) => cmd.options.slash),
6283
...contextMenus

src/types/harmonix.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import type {
77
import type { HarmonixCommandInput } from './commands'
88
import type { HarmonixEventInput } from './events'
99
import type { HarmonixContextMenuInput } from './contextMenus'
10+
import type {
11+
HarmonixPrecondition,
12+
HarmonixPreconditionInput
13+
} from './preconditions'
1014

1115
export interface HarmonixOptions {
1216
rootDir: string
@@ -16,10 +20,11 @@ export interface HarmonixOptions {
1620
commands: HarmonixCommandInput[]
1721
events: HarmonixEventInput[]
1822
contextMenus: HarmonixContextMenuInput[]
23+
preconditions: HarmonixPreconditionInput[]
1924
defaultPrefix: string
2025
intents: BitFieldResolvable<GatewayIntentsString, number>
2126
clientId: string
22-
ownerId: string | string[]
27+
ownerId: string[]
2328
}
2429

2530
type DeepPartial<T> =
@@ -34,4 +39,5 @@ export interface HarmonixConfig
3439
export interface Harmonix {
3540
options: HarmonixOptions
3641
client?: Client
42+
preconditions: Map<string, HarmonixPrecondition>
3743
}

0 commit comments

Comments
 (0)