11import type { LoadConfigOptions } from 'c12'
22import consola from 'consola'
3+ import { colors } from 'consola/utils'
34import { loadOptions } from './options'
4- import { scanCommands , scanContextMenus , scanEvents } from './scan'
5+ import {
6+ scanCommands ,
7+ scanContextMenus ,
8+ scanEvents ,
9+ scanPreconditions
10+ } from './scan'
511import { resolveHarmonixCommand } from './commands'
612import { resolveHarmonixEvent } from './events'
713import { resolveHarmonixContextMenu } from './contextMenus'
14+ import { resolveHarmonixPrecondition } from './preconditions'
815import {
916 initCient ,
1017 refreshApplicationCommands ,
1118 registerCommands ,
1219 registerContextMenu ,
1320 registerEvents ,
21+ registerPreconditions ,
1422 registerSlashCommands
1523} from './discord'
1624import type { Harmonix , HarmonixConfig , HarmonixOptions } from './types'
25+ import { version } from '../package.json'
1726
1827export 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
0 commit comments