fix: correct voice adapter debug wrapper method direction

Previous wrapper intercepted wrong methods (library→adapter vs adapter→library).
Now correctly wraps:
- sendPayload (adapter→gateway): logs op code and return value
- onVoiceServerUpdate/onVoiceStateUpdate (gateway→library): logs incoming events

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Daniel 2026-03-06 01:41:34 +01:00
parent cc5e21fe1c
commit a13765d5b6

View file

@ -294,27 +294,32 @@ function attachVoiceLifecycle(state: GuildAudioState, guild: any) {
} }
// ── Debug adapter wrapper ── // ── Debug adapter wrapper ──
// voiceAdapterCreator(libraryMethods) → { sendPayload, destroy }
// libraryMethods = { onVoiceServerUpdate, onVoiceStateUpdate, destroy }
// returned adapter = { sendPayload(payload) → boolean, destroy() }
function debugAdapterCreator(guild: any): any { function debugAdapterCreator(guild: any): any {
const original = guild.voiceAdapterCreator; const original = guild.voiceAdapterCreator;
return (methods: any) => { return (libraryMethods: any) => {
const wrappedMethods = { // Wrap library methods to log when Discord gateway events arrive
...methods, const wrappedLibraryMethods = {
sendPayload(payload: any) { ...libraryMethods,
const result = methods.sendPayload(payload); onVoiceServerUpdate(data: any) {
console.log(`${SB} adapter.sendPayload op=${payload?.op ?? '?'} d.channel_id=${payload?.d?.channel_id ?? '?'}${result}`); console.log(`${SB} ← onVoiceServerUpdate: token=${data?.token ? 'yes' : 'no'} endpoint=${data?.endpoint ?? 'none'}`);
return result; return libraryMethods.onVoiceServerUpdate(data);
},
onVoiceStateUpdate(data: any) {
console.log(`${SB} ← onVoiceStateUpdate: session_id=${data?.session_id ? 'yes' : 'no'} channel_id=${data?.channel_id ?? 'none'}`);
return libraryMethods.onVoiceStateUpdate(data);
}, },
}; };
const adapter = original(wrappedMethods); // Call original adapter creator with our wrapped library methods
const origVSU = adapter.onVoiceServerUpdate; const adapter = original(wrappedLibraryMethods);
const origVStU = adapter.onVoiceStateUpdate; // Wrap the adapter's sendPayload to log outgoing gateway commands
adapter.onVoiceServerUpdate = (data: any) => { const origSend = adapter.sendPayload.bind(adapter);
console.log(`${SB} adapter.onVoiceServerUpdate: token=${data?.token ? 'yes' : 'no'} endpoint=${data?.endpoint ?? 'none'}`); adapter.sendPayload = (payload: any) => {
return origVSU(data); const result = origSend(payload);
}; console.log(`${SB} → sendPayload op=${payload?.op ?? '?'} guild=${payload?.d?.guild_id ?? '?'} channel=${payload?.d?.channel_id ?? '?'}${result}`);
adapter.onVoiceStateUpdate = (data: any) => { return result;
console.log(`${SB} adapter.onVoiceStateUpdate: session_id=${data?.session_id ? 'yes' : 'no'} channel_id=${data?.channel_id ?? 'none'}`);
return origVStU(data);
}; };
return adapter; return adapter;
}; };