TypeError:this.inputMedia.pipe不是函数

时间:2019-03-17 03:33:13

标签: javascript typeerror discord discord.js

我有一个Discord机器人。我希望这样,当我说几个短语中的一个时,它将与发送消息的语音通道的用户一起加入,播放随机声音,然后离开。它使用discord.jspick-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)

1 个答案:

答案 0 :(得分:0)

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

playUrl(message.member.voiceChannel, soundUrl);

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