From 9ac1034e5e3ddaee6b3cc99d55e4244feae06fc9 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 6 Mar 2026 01:13:46 +0100 Subject: [PATCH] fix: initialize voice encryption libs before first connection - await sodium.ready + nacl preload (same as original jukebox) - Add generateDependencyReport() for debugging - Add type declarations for libsodium-wrappers and tweetnacl Co-Authored-By: Claude Opus 4.6 --- server/src/plugins/soundboard/index.ts | 9 +++++++++ server/src/types/modules.d.ts | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 server/src/types/modules.d.ts 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";