语音通道在超时后不会被删除 Discord.JS 12

问题描述

所以我目前正在做最后的更改,以便将我的机器人从discord.js 11.4更新到12。

但是,我在私人频道上遇到了另一个问题,经过一段时间后没有被删除。 我尝试将voiceChannel更改为voice.channel,但并没有成功。

这是我的代码

        bot.on("voiceStateUpdate",oldMember => {
            deleteEmptyChannelAfterDelay(oldMember.voiceChannel);
        });
    
        function deleteEmptyChannelAfterDelay(voiceChannel,delayMS = 5000){
            if(!voiceChannel) return; 
            if(voiceChannel.members.first()) return;
            if(!voiceChannel.health) voiceChannel.health = 0;
            voiceChannel.health += 1;
            setTimeout(function(){  //queue channel for deletion and wait
                if(!voiceChannel) return;
                if(voiceChannel.members.first()) return;
                voiceChannel.health -= 1;
                if(voiceChannel.health > 0) return;
                if(!voiceChannel.name.includes('\'s Room')) return;
                voiceChannel.delete()   //delete channel
                    .catch(error => console.log(error));
            },delayMS);
        } 

我尝试在djs指南和/或论坛上寻求帮助,但找不到任何东西,因此,我将竭诚为您服务!谢谢。

解决方法

在DiscordJS V12中,voiceStateUpdate事件已更改。现在不再传递参数oldMembernewMember,而是传递VoiceState的实例oldStatenewState。要获取触发voiceStateUpdate的频道,您不再呼叫member.voiceChannel,而是现在呼叫VoiceState.channel

因此,要使代码正常工作,必须将事件回调更改为以下内容:

bot.on("voiceStateUpdate",oldState => {
    deleteEmptyChannelAfterDelay(oldState.channel);
});