Skip to content

Commit

Permalink
fix(bots/discord): fix freeze on prod builds
Browse files Browse the repository at this point in the history
  • Loading branch information
PalmDevs committed Oct 17, 2024
1 parent 79fea8b commit 8efb549
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 32 deletions.
28 changes: 28 additions & 0 deletions bots/discord/src/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { dirname, join } from 'path'
import _firstConfig from '../config.js'

let currentConfig = _firstConfig

// Other parts of the code will access properties of this proxy, they don't care what the target looks like
export const config = new Proxy(
{
INSPECTION_WARNING: 'Run `context.__getConfig()` to inspect the latest config.',
} as unknown as typeof currentConfig,
{
get(_, p, receiver) {
if (p === 'invalidate')
return async () => {
const path = join(dirname(Bun.main), '..', 'config.js')
Loader.registry.delete(path)
currentConfig = (await import(path)).default
}

return Reflect.get(currentConfig, p, receiver)
},
set(_, p, newValue, receiver) {
return Reflect.set(currentConfig, p, newValue, receiver)
},
},
) as typeof _firstConfig & { invalidate(): void }

export const __getConfig = () => currentConfig
39 changes: 7 additions & 32 deletions bots/discord/src/context.ts
Original file line number Diff line number Diff line change
@@ -1,49 +1,24 @@
import { Database } from 'bun:sqlite'
import { existsSync, readFileSync, readdirSync } from 'fs'
import { dirname, join } from 'path'
import { join } from 'path'
import { Client as APIClient } from '@revanced/bot-api'
import { createLogger } from '@revanced/bot-shared'
import { Client as DiscordClient, type Message, Partials } from 'discord.js'
import { drizzle } from 'drizzle-orm/bun-sqlite'
import type { default as Command, CommandOptionsOptions, CommandType } from './classes/Command'
import * as schemas from './database/schemas'

// Export some things first, as commands require them
import _firstConfig from '../config.js'

let currentConfig = _firstConfig

// Other parts of the code will access properties of this proxy, they don't care what the target looks like
export const config = new Proxy(
{
INSPECTION_WARNING: 'Run `context.__getConfig()` to inspect the latest config.',
} as unknown as typeof currentConfig,
{
get(_, p, receiver) {
if (p === 'invalidate')
return async () => {
const path = join(dirname(Bun.main), '..', 'config.js')
Loader.registry.delete(path)
currentConfig = (await import(path)).default
logger.debug('New config set')
}
import * as schemas from './database/schemas'

return Reflect.get(currentConfig, p, receiver)
},
set(_, p, newValue, receiver) {
return Reflect.set(currentConfig, p, newValue, receiver)
},
},
) as typeof _firstConfig & { invalidate(): void }
import type { default as Command, CommandOptionsOptions, CommandType } from './classes/Command'

export const __getConfig = () => currentConfig
import { __getConfig, config } from './config'
export { config, __getConfig }

export const logger = createLogger({
level: config.logLevel === 'none' ? Number.MAX_SAFE_INTEGER : config.logLevel,
})

// Importing later because config needs to be exported before
const commands = await import('./commands')
// Export a few things before we initialize commands
import * as commands from './commands'

export const api = {
client: new APIClient({
Expand Down

0 comments on commit 8efb549

Please sign in to comment.