我有一个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)
答案 0 :(得分:0)
我意识到了这个问题; pickRandom()
函数输出包含所选对象的数组,而不只是对象本身。一种奇怪的方法,但我通过更改来解决了
playUrl(message.member.voiceChannel, soundUrl);
到
playUrl(message.member.voiceChannel, soundUrl[0]);