Youtube 视频搜索出错(总常量不匹配)
Youtube video search went wrong (total constant mismatch)
首先,我对这一切还不是很熟悉,但我还是决定试一试,所以请耐心等待。
我在这里使用的包是 discord.js Commando 和 discord-youtube-api。在我添加播放功能之前,我决定看看我是否可以正确使用搜索功能。但每次我试图搜索某些东西时,结果都是一派胡言(甚至与我试图搜索的视频没有任何关系),而且它只给我一个结果(watch?v=-yDd2D5OHyc),除此之外什么都没有。
class SearchCommand extends Commando.Command {
constructor(client){
super(client,{
name: 'search',
group:'music',
memberName:'search',
description: 'Search a Youtube video',
args: [
{
key: 'text',
prompt: 'Input the video name?',
type: 'string'
}
]
});
}
async run (message, args, {text})
{
message.channel.send(args)
message.channel.send(text)
var video = await youtube.searchVideos(args.toString().replace(/,/g,' '));
message.channel.send(video.url);
message.channel.send(video.thumbnail);
message.channel.send(video.length);
}
}
module.exports = SearchCommand;
...it[']s only giving me one result...
根据 package's page.
,这是 searchVideos()
方法的预期行为
[T]he result is a total nonsense...
Array.toString()
将用逗号连接数组的元素。这可能会导致您意想不到的结果。
您可以将 args
数组与 Array.join()
连接在一起,并使用 space 作为分隔符而不是逗号。考虑这个例子...
const text = 'baby shark 10 hours';
const args = text.split(/ +/g);
console.log(args.toString()); // Your current search query
console.log(args.join(' ')); // The expected search query
感谢懒惰回答我的问题。
虽然您的解决方案对于所质疑的问题是正确的,但出现了另一个错误
(node:14492) UnhandledPromiseRejectionWarning: TypeError: Parameter "url" must be a string, not object
但是,给出的解决方案并没有错。这只是不完整的。
幸运的是,我已经找到了新错误的解决方案,结合你的解决方案,我可以这样工作
async run(message, {text})
{
const args = text.split(/ +/g);
const video = await youtube.searchVideos(args);
console.log(args.toString());
console.log(args.join(' '));
console.log(video.url)
const streamOptions = { seek: 0, volume: 1 };
if (message.member.voiceChannel){
message.member.voiceChannel.join()
.then(
connection => {
const stream = yt(video.url, { filter : 'audioandvideo', quality : 'highestaudio', lang : 'en'});
const dispatcher = connection.playStream(stream, streamOptions);
})
}
else {
message.channel.send("Please join a voice channel before I can play it for you !")
}
首先,我对这一切还不是很熟悉,但我还是决定试一试,所以请耐心等待。
我在这里使用的包是 discord.js Commando 和 discord-youtube-api。在我添加播放功能之前,我决定看看我是否可以正确使用搜索功能。但每次我试图搜索某些东西时,结果都是一派胡言(甚至与我试图搜索的视频没有任何关系),而且它只给我一个结果(watch?v=-yDd2D5OHyc),除此之外什么都没有。
class SearchCommand extends Commando.Command {
constructor(client){
super(client,{
name: 'search',
group:'music',
memberName:'search',
description: 'Search a Youtube video',
args: [
{
key: 'text',
prompt: 'Input the video name?',
type: 'string'
}
]
});
}
async run (message, args, {text})
{
message.channel.send(args)
message.channel.send(text)
var video = await youtube.searchVideos(args.toString().replace(/,/g,' '));
message.channel.send(video.url);
message.channel.send(video.thumbnail);
message.channel.send(video.length);
}
}
module.exports = SearchCommand;
...it[']s only giving me one result...
根据 package's page.
,这是searchVideos()
方法的预期行为
[T]he result is a total nonsense...
Array.toString()
将用逗号连接数组的元素。这可能会导致您意想不到的结果。
您可以将 args
数组与 Array.join()
连接在一起,并使用 space 作为分隔符而不是逗号。考虑这个例子...
const text = 'baby shark 10 hours';
const args = text.split(/ +/g);
console.log(args.toString()); // Your current search query
console.log(args.join(' ')); // The expected search query
感谢懒惰回答我的问题。 虽然您的解决方案对于所质疑的问题是正确的,但出现了另一个错误
(node:14492) UnhandledPromiseRejectionWarning: TypeError: Parameter "url" must be a string, not object
但是,给出的解决方案并没有错。这只是不完整的。 幸运的是,我已经找到了新错误的解决方案,结合你的解决方案,我可以这样工作
async run(message, {text})
{
const args = text.split(/ +/g);
const video = await youtube.searchVideos(args);
console.log(args.toString());
console.log(args.join(' '));
console.log(video.url)
const streamOptions = { seek: 0, volume: 1 };
if (message.member.voiceChannel){
message.member.voiceChannel.join()
.then(
connection => {
const stream = yt(video.url, { filter : 'audioandvideo', quality : 'highestaudio', lang : 'en'});
const dispatcher = connection.playStream(stream, streamOptions);
})
}
else {
message.channel.send("Please join a voice channel before I can play it for you !")
}