0

我的机器人使用 /play 命令,该命令之前提供了这个列表来选择歌曲

图片

突然给出错误“无法读取未定义的属性'长度'”,我不明白为什么它之前工作正常

在此处输入图像描述

在这里,我留下我认为发生错误的特定部分

const videos = await youtube.searchVideos(query, 5).catch(async function() {
      await message.say(
        '> There was a problem searching the video you requested >.<'
      ).then(message.react('❌'));
      return;
    });
    if (videos.length < 5 || !videos) {
      message.say(
        `> I had some trouble finding what you were looking for, please try again or be more specific`
      ).then(message.react('❌'));
      return;
    }
    const videosNameArr = [];
    for (let i = 0; i < videos.length; i++) {
      videosNameArr.push(`${i + 1}: ${videos[i].title}`);
    }
    videosNameArr.push('cancel');
    const embed = new MessageEmbed()
      .setColor('#ffffff')
      .setTitle('Choose a song/video.')
      .addField('Song 1', videosNameArr[0])
      .addField('Song 2', videosNameArr[1])
      .addField('Song 3', videosNameArr[2])
      .addField('Song 4', videosNameArr[3])
      .addField('Song 5', videosNameArr[4])
      .addField('Exit', 'Cancel');
    var songEmbed = await message.channel.send({ embed });
    message.channel
      .awaitMessages(
        function(msg) {
          return (msg.content > 0 && msg.content < 6) || msg.content === 'cancel';
        },
        {
          max: 1,
          time: 60000,
          errors: ['time']
        }
      )
      .then(function(response) {
        const videoIndex = parseInt(response.first().content);
        if (response.first().content === 'cancel') {
          songEmbed.delete().then(message.channel.send("> Song canceled"));;
          return;
        }

如果有人知道如何解决它,请帮助我,或者如果不向我询问命令的完整代码,我会传递它,谢谢。

4

1 回答 1

0

好的。const videos = await youtube.searchVideos(query, 5).catch(async function() {因此,您应该尝试而不是使用await youtube.searchVideos(query, 5).then(videos => {. 甚至将其分成两行。


在这里你得到一个错误,因为视频没有在函数中声明,而是在外面,所以它没有内容。自己查找错误的提示是用于console.log()检查变量及其内容,这对查找问题非常有帮助。如果我上面回答的问题不能解决问题,请告诉我,我会更详细地检查。

于 2020-11-14T22:17:00.900 回答