TypeError:this.inputMedia.pipe 不是函数

Posted

技术标签:

【中文标题】TypeError:this.inputMedia.pipe 不是函数【英文标题】:TypeError: this.inputMedia.pipe is not a function 【发布时间】:2019-08-07 18:32:58 【问题描述】:

我有一个 Discord 机器人。我想要这样,当我说出几个短语中的一个时,它会加入发送消息语音通道的用户,播放随机声音,然后离开。它使用 discord.js 和 pick-random npm 库。这是代码。请注意,在另一个文件 server.js 中,它需要此文件并执行 client.on('message', randomSound);

const pickRandom = require('pick-random');
const  playUrl  = require('./play-url');

exports.randomSound = function(message) 
  const content = message.content;
  if (content.toLowerCase() === "phrase 2" || 
      content.toLowerCase() === "phrase 1") 
    var soundUrl = pickRandom(
      ['sound url 1',
       'sound url 2',
       'sound url 3',
       'sound url 4'
      ]);
    playUrl(message.member.voiceChannel, soundUrl);
    

然后,在 play-url.js 中:

exports.playUrl = function(voiceChannel, soundUrl, options) 

    // If messange sender is in a voice channel
    if (voiceChannel) 
      voiceChannel
        // Join it
        .join()
        .then(connection => 
          // Play the sound
          const sound = connection.playArbitraryInput(soundUrl, options);
          sound.on('end', () => 
            voiceChannel.leave();
            console.log('Done playing');
          );
        )
        .catch(console.error);
    

由于某种原因,我收到此错误。

TypeError: this.inputMedia.pipe is not a function

    at FfmpegProcess.connectStream (/rbd/pnpm-volume/a60d0461-d164-4ade-92da-e09aca748da0/node_modules/.registry.npmjs.org/prism-media/0.0.3/node_modules/prism-media/src/transcoders/ffmpeg/FfmpegProcess.js:73:21)

    at new FfmpegProcess (/rbd/pnpm-volume/a60d0461-d164-4ade-92da-e09aca748da0/node_modules/.registry.npmjs.org/prism-media/0.0.3/node_modules/prism-media/src/transcoders/ffmpeg/FfmpegProcess.js:28:14)

    at FfmpegTranscoder.transcode (/rbd/pnpm-volume/a60d0461-d164-4ade-92da-e09aca748da0/node_modules/.registry.npmjs.org/prism-media/0.0.3/node_modules/prism-media/src/transcoders/ffmpeg/Ffmpeg.js:34:18)

    at MediaTranscoder.transcode (/rbd/pnpm-volume/a60d0461-d164-4ade-92da-e09aca748da0/node_modules/.registry.npmjs.org/prism-media/0.0.3/node_modules/prism-media/src/transcoders/MediaTranscoder.js:27:31)

    at Prism.transcode (/rbd/pnpm-volume/a60d0461-d164-4ade-92da-e09aca748da0/node_modules/.registry.npmjs.org/prism-media/0.0.3/node_modules/prism-media/src/Prism.js:13:28)

    at AudioPlayer.playUnknownStream (/rbd/pnpm-volume/a60d0461-d164-4ade-92da-e09aca748da0/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/voice/player/AudioPlayer.js:97:35)

    at VoiceConnection.playArbitraryInput (/rbd/pnpm-volume/a60d0461-d164-4ade-92da-e09aca748da0/node_modules/.registry.npmjs.org/discord.js/11.4.2/node_modules/discord.js/src/client/voice/VoiceConnection.js:458:24)

at voiceChannel.join.then.connection (/app/play-url.js:10:36)

    at <anonymous>

    at process._tickCallback (internal/process/next_tick.js:189:7)

【问题讨论】:

你的 discord.js 版本是什么。您可以通过 console.log(require('discord.js').version) 获得最简单的 在我的package.json 中,它是^11.4.2,在你上面的版本中,它也输出11.4.2 我想最好的解决办法是升级到 d.js master(它有一个完整的语音重写,修复了很多问题),包括重大更改 【参考方案1】:

我意识到了这个问题; pickRandom() 函数输出一个包含所选对象的数组,而不仅仅是对象本身。一种奇怪的方式来做到这一点,但我通过改变来解决它

playUrl(message.member.voiceChannel, soundUrl);

playUrl(message.member.voiceChannel, soundUrl[0]);

【讨论】:

以上是关于TypeError:this.inputMedia.pipe 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: 'float' 类型的对象没有 len() & TypeError: 'float' 对象不可迭代

TypeError:“TypeError:函数名称不是 HTMLButtonElement.onclick (/:2:54) 处的函数”

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

pyspark:TypeError:'float'对象不可迭代

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's