如果在某个语音通道中,需要帮助断开成员连接

时间:2020-06-06 01:48:44

标签: javascript discord discord.js

因此,在不和谐的情况下,我创建了一个AFK语音通道并将服务器设置为如果成员是AFK 15分钟,它将其发送到AFK语音通道。但是我想做到这一点,以便我的机器人立即将它们与频道断开连接。

我已经想到了两种方法,使用间隔每秒检查一次语音通道,或者添加一个侦听器以了解VoiceStateUpdate是否是移到语音通道的成员。我试图限制主文件中的侦听器数量,因此在client.once('ready', () => { })中,我使用了一个间隔来每秒检查一次语音通道。

setInterval(function () {
      const VoiceChannel = "718634068543012924"
  if(VoiceChannel.members.length > 0) {
    const now = new Date()
    const time = (`${now.getDay()}, ${now.getDate()}/${now.getMonth()}/${now.getFullYear()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`)
      member.voice.kick("AFK");
      console.log(`AFK Member kicked.`)
  }
  else {
      console.log("No one there bud.")
  }
}, 1000)

问题出在members.length上,它带有错误

TypeError: Cannot read property 'length' of undefined
    at listOnTimeout (internal/timers.js:549:17)
    at processTimers (internal/timers.js:492:7)

我尝试了.size,但仍然无法正常工作,我真的不知道还有什么尝试或做错了什么,我检查了discord.js.org文档,但仍然感到困惑。因此,如果有任何方法可以在不添加其他监听器的情况下进行操作,那么您将对我有所帮助,将不胜感激。如果没有的话,我会把它吸起来并加一个。谢谢。

爱马仕

1 个答案:

答案 0 :(得分:1)

您正在检查if语句中的条件之前将VoiceChannel定义为字符串,从而导致VoiceChannels.members属性未定义。

使用您的Client类实例正确定义包含语音通道的变量应该可以解决此问题:

setInterval(function () {
    const voiceChannel = <Client>.channels.cache.get("718634068543012924")
    if(voiceChannel.members.length > 0) {
        const now = new Date()
        const time = (`${now.getDay()}, ${now.getDate()}/${now.getMonth()}/${now.getFullYear()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`)
        member.voice.kick("AFK");
        console.log(`AFK Member kicked.`)
    } else {
        console.log("No one there bud.")
    }
}, 1000)