我正在尝试为 discord bot (js) 制作离开/断开 VC 命令,我遇到了下面讨论的一些问题

Posted

技术标签:

【中文标题】我正在尝试为 discord bot (js) 制作离开/断开 VC 命令,我遇到了下面讨论的一些问题【英文标题】:I'm trying to make leave/disconnect VC command for discord bot (js), I'm facing some issues discussed bellow 【发布时间】:2021-06-26 03:48:35 【问题描述】:

代码不能完美运行,我发现了几个问题:

    当我连接到 VC 并尝试一次尝试命令 bot leaves the VCtriggers two functions 时,即 General leave function 并且 author 不在同一频道。 当我发出命令 being outside the VC(连接到 VC 的机器人)时,机器人会响应函数 我们不在同一个频道功能中。,我希望 it to respond你'没有连接到 VC 当我在being outside VCbot not connected to VC 发出命令时,它没有任何反应,at console 我得到错误:

(node:37) UnhandledPromiseRejectionWarning: TypeError: cannot read property "id" of undefined

代码:

client.on('message', async (message) => 
  const args = message.content.slice(prefix.length).trim().split(/ +/);
  const command = args.shift().toLowerCase();
  if (command === 'leave') 
    let authorVoice = message.member.voice;

   
    const embed1 = new discord.MessageEmbed()
      .setTitle('????`You are not in a Voice Channel!`')
      .setColor('RED')
      .setTimestamp();
    if (!authorVoice.channel) return message.channel.send(embed1);

    const embed2 = new discord.MessageEmbed()
      .setTitle('⛔`We are not in a same Voice Channel`')
      .setColor('YELLOW')
      .setTimestamp();
    if (authorVoice.channel.id !== client.voice.channel.id)
      return message.channel.send(embed2);
   const embed = new discord.MessageEmbed()
      .setTitle('`Successfully left the Voice Channel`✔')
      .setColor('RED')
      .setTimestamp();
    authorVoice.channel.leave()
    message.channel.send(embed);
  
);

有人可以帮我解决吗?

【问题讨论】:

【参考方案1】:

client.voice 没有 channel 属性。这意味着client.voice.channel 未定义。当您尝试读取其中的id 时,您会收到错误消息:“无法读取未定义的属性“id””

您可能想要connections,它是VoiceConnections 的集合。连接确实具有 channel 属性,但由于 client.voice.connections 是一个集合,您需要先找到您需要的那个。

由于您只想检查是否存在具有相同ID的频道,您可以使用.some()方法。在其回调函数中,您检查是否有任何连接具有与消息作者的频道 ID 相同的频道 ID。因此,您可以创建一个返回布尔值的变量,而不是 if(authorVoice.channel.id !== client.voice.channel.id)。如果机器人在同一频道,则返回true,否则返回false

const botIsInSameChannel = client.voice.connections.some(
  (c) => c.channel.id === authorVoice.channel.id,
);

// bot is not in the same channel
if (!botIsInSameChannel)
  return message.channel.send(embed2);

【讨论】:

【参考方案2】:

如果有人关注,这里是更新的代码:

client.on('message', async message => 
    const args = message.content.slice(prefix.length).trim().split(/ +/);
    const command = args.shift().toLowerCase();
    if (command === 'leave') 
             let authorVoice = message.member.voice; 
        const botIsInSameChannel = client.voice.connections.some(
  (c) => c.channel.id === authorVoice.channel.id,
); 
     const embed1 = new discord.MessageEmbed()
      .setTitle(':no_entry_sign: You are not in a Voice Channel!')
      .setColor('RED')
      .setTimestamp();
        if(!authorVoice.channel) return message.channel.send(embed1);
        
    const embed2 = new discord.MessageEmbed()
      .setTitle(':no_entry: We are not in a same Voice Channel')
      .setColor('YELLOW')
      .setTimestamp();
        if (!botIsInSameChannel) return message.channel.send(embed2)      
        
        const embed = new discord.MessageEmbed()
      .setTitle('Successfully left the Voice Channel✔')
      .setColor('RED')
      .setTimestamp();
        authorVoice.channel.leave();
        message.channel.send(embed);
      
    );

【讨论】:

以上是关于我正在尝试为 discord bot (js) 制作离开/断开 VC 命令,我遇到了下面讨论的一些问题的主要内容,如果未能解决你的问题,请参考以下文章

从数组中获取项目并将其删除,直到 Discord JS bot 的数组为空

Discord.js Bot 赠品命令:.array() 不是函数

Discord bot 在尝试播放链接后崩溃(Node.js)

discord js在运行bot.guilds.cache.array()时返回空数组

无法在heroku上托管discord bot(js)

Discord.JS Bot 通过 Heroku 托管抛出 500 错误