因此,在不和谐的情况下,我创建了一个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文档,但仍然感到困惑。因此,如果有任何方法可以在不添加其他监听器的情况下进行操作,那么您将对我有所帮助,将不胜感激。如果没有的话,我会把它吸起来并加一个。谢谢。
爱马仕
答案 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)