You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js v13中createStream()方法的等价实现方式是什么

Discord.js v13 实现语音接收与本地存储方案

Discord.js v13 对语音模块做了架构拆分,原主包内置的语音能力被独立为@discordjs/voice包,v12版本的connection.receiver.createStream()方法被移除,对应功能通过订阅用户音频轨道的方式实现,输出的音频格式和v12完全一致,为16位小端序(s16le)48kHz 双声道PCM原始流。

前置准备

首先安装独立的语音依赖包:

npm install @discordjs/voice

fs为Node.js内置模块,无需额外安装。

实现代码

确保机器人已经成功加入目标语音频道、拿到有效语音连接后,即可通过以下代码录制指定用户的音频并存到本地:

const fs = require('fs');
const { getVoiceConnection, EndBehaviorType } = require('@discordjs/voice');

// 传入对应 guild(服务器)ID,获取当前已建立的语音连接
const voiceConnection = getVoiceConnection('你的目标服务器ID');
// 填入要录制的目标用户ID
const recordUserId = '待录制用户的ID';

// 获取语音接收器,订阅目标用户的音频轨道
const receiver = voiceConnection.receiver;
const audioSubscription = receiver.subscribe(recordUserId, {
  end: {
    // 配置静音判定规则:用户静音超过100毫秒则标记当前音频段结束
    behavior: EndBehaviorType.AfterSilence,
    duration: 100
  }
});

// 订阅成功后即可拿到音频可读流,直接管道写入本地文件
if (audioSubscription) {
  const pcmReadStream = audioSubscription.stream;
  const fileWriteStream = fs.createWriteStream('./user_audio.pcm');
  
  pcmReadStream.pipe(fileWriteStream);

  // 监听写入完成事件
  fileWriteStream.on('finish', () => {
    console.log('音频录制完成,已保存到本地文件');
  });

  // 如需主动停止录制,调用unsubscribe方法即可
  // 例:15秒后自动停止录制
  // setTimeout(() => audioSubscription.unsubscribe(), 15000);
}

注意事项

  • 上述代码输出的是无封装头的原始PCM音频,无法直接用普通影音播放器打开,如需输出wav、mp3等通用格式,可以在管道中间接入ffmpeg做转码处理后再写入文件
  • 机器人需要拥有目标语音频道的连接、说话权限,否则无法正常接收音频流
  • 录制用户语音前请确认已获得用户明确授权,遵守Discord平台规则与当地隐私相关法规

内容的提问来源于stack exchange,提问作者DefaultLP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:45:47