因此,在不一致的情况下,我创建了一个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文档,但我仍然感到困惑。因此,如果有任何方法可以做到这一点,而不添加另一个侦听器,您可以帮助我,这将是非常感谢。如果不是,我会把它吸收起来,然后添加一个。谢谢。
爱马仕
发布于 2020-06-06 10:23:48
在检查if语句中的条件之前,您将VoiceChannel定义为字符串,从而导致VoiceChannels.members属性未定义。
使用Client类的实例正确定义包含语音通道的varible有望解决这个问题:
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)https://stackoverflow.com/questions/62226389
复制相似问题