diff --git a/server/src/plugins/soundboard/index.ts b/server/src/plugins/soundboard/index.ts index b407166..9515f2b 100644 --- a/server/src/plugins/soundboard/index.ts +++ b/server/src/plugins/soundboard/index.ts @@ -9,8 +9,11 @@ import { joinVoiceChannel, createAudioPlayer, createAudioResource, AudioPlayerStatus, NoSubscriberBehavior, getVoiceConnection, VoiceConnectionStatus, StreamType, entersState, + generateDependencyReport, type VoiceConnection, type AudioResource, } from '@discordjs/voice'; +import sodium from 'libsodium-wrappers'; +import nacl from 'tweetnacl'; import { ChannelType, Events, type VoiceState, type Message } from 'discord.js'; import type { Plugin, PluginContext } from '../../core/plugin.js'; import { sseBroadcast } from '../../core/sse.js'; @@ -481,6 +484,12 @@ const soundboardPlugin: Plugin = { fs.mkdirSync(SOUNDS_DIR, { recursive: true }); fs.mkdirSync(NORM_CACHE_DIR, { recursive: true }); persistedState = readPersistedState(); + + // Voice encryption libs must be initialized before first voice connection + await sodium.ready; + void nacl.randomBytes(1); + console.log(generateDependencyReport()); + console.log(`[Soundboard] ${listAllSounds().length} sounds, ${persistedState.totalPlays ?? 0} total plays`); }, diff --git a/server/src/types/modules.d.ts b/server/src/types/modules.d.ts new file mode 100644 index 0000000..878d4bb --- /dev/null +++ b/server/src/types/modules.d.ts @@ -0,0 +1,2 @@ +declare module "libsodium-wrappers"; +declare module "tweetnacl";