【问题标题】:Music Bot discord.js issue, Cannot read property 'voice' of undefinedMusic Bot discord.js 问题,无法读取未定义的属性“声音”
【发布时间】:2021-05-20 02:03:07
【问题描述】:

我正在尝试创建一个 hydra 风格的机器人 discord,其嵌入会自动获得分配的控制反应,我可以通过这些反应暂停、恢复、停止音乐等...

我有一个问题,如果我尝试启动暂停输入“*psres”的命令,一切正常,但是,如果我尝试通过反应启动暂停命令,则会出现以下错误:

(node:20172) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'voice' of undefined
    at Object.execute (C:\Users\Giuseppe\Desktop\botdiscord\commands\psres.js:9:40)
    at Client.<anonymous> (C:\Users\Giuseppe\Desktop\botdiscord\commands\setup.js:41:53)

这是我的 setup.js:

module.exports = {
    name: 'setup',
    description: "music embed with reaction",
    async execute(message, args, Discord, client){
        
        const channel = '831573587579371580';
        const playem = '⏯️';
        const stopem = '⏹️';  
        const nextem = '⏭️';
        const shuffleem = '????';
        const casualem = '????';
      
        let embed = new Discord.MessageEmbed()
       
        .setColor('#e42643')
        .setTitle('Barman')
        .setImage('https://images4.alphacoders.com/943/943845.jpg') 
        .setFooter('il prefisso del bot è: *');     
        
        console.log('message: ' + message )
        console.log('args: ' + args)
        console.log('Discord: ' + Discord)
        console.log('client: ' + client)
    
           let messageEmbed = await message.channel.send(embed);
           messageEmbed.react(playem);
           messageEmbed.react(stopem);
           messageEmbed.react(nextem); 
           messageEmbed.react(shuffleem); 
           messageEmbed.react(casualem);
           
           client.on('messageReactionAdd', async (reaction, user) =>{
               if (reaction.message.partial) await reaction.message.fetch();
               if (reaction.partial) await reaction.fetch();
               if (user.bot) return;
               if (!reaction.message.guild) return;
               if (reaction.message.channel.id == channel){
                   
                    if (reaction.emoji.name ===  playem){
                        console.log('pause/resume');                    
                       client.commands.get('psres').execute(message, client, args) //line of error
                    }
                } 
           });
           
    }
} 

这是我的暂停/恢复命令:

const { MessageEmbed } = require("discord.js")

const { COLOR } = require("../config.json");

module.exports = {
  name: "psres", 
  description: "pause/resume",
  async execute (client, message, args) {
    const { channel } = message.member.voice; /line of error
    let embed = new MessageEmbed()
.setColor(COLOR);
      
    if (!channel) {
      embed.setAuthor("Devi essere in un canale vocale!")
      return message.channel.send(embed);
    }

    const serverQueue = message.client.queue.get(message.guild.id);
    //prova
    if (!serverQueue) {
        embed.setAuthor("Non c'è nulla che possa mettere in pausa")
        return message.channel.send(embed);
      }
      
      if(serverQueue && serverQueue.playing) {
        serverQueue.playing = false;
        serverQueue.connection.dispatcher.pause(true)
        
        embed.setDescription("✅ | Canzone messa in pausa")
        embed.setThumbnail(client.user.displayAvatarURL())
        return message.channel.send(embed)
    } else if(serverQueue && !serverQueue.playing) {
      serverQueue.playing = true;
      serverQueue.connection.dispatcher.resume()
  embed.setAuthor("✅ | Riprendi")
   embed.setThumbnail(client.user.displayAvatarURL())
  return message.channel.send(embed)
 }
    embed.setDescription("Non c'è nulla che io possa riprendere")
    message.channel.send(embed)
    
  }
}

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    在您的 setup.js 文件中,命令处理程序是 client.commands.get('psres').execute(message, client, args),并带有消息、客户端和 args 作为参数。但是在暂停/恢复命令文件中,您正在执行execute (client, message, args),其中客户端、消息和参数作为参数。这些对象不是您认为的那样,因为如果您比较它们,则参数不匹配/放置错误的顺序。因此,根据设置命令参数或您在暂停/恢复命令中执行的方式匹配参数。

    【讨论】:

    • 非常感谢,现在可以了,真是个愚蠢的错误
    • 没问题。很高兴为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 2022-06-10
    • 2021-02-01
    • 2021-06-27
    • 2020-07-20
    • 1970-01-01
    • 2020-12-05
    • 2021-04-14
    相关资源
    最近更新 更多