【问题标题】:Voice channel doesn't get deleted after timeout. Discord.JS 12超时后语音通道不会被删除。不和谐.JS 12
【发布时间】:2021-02-08 02:56:51
【问题描述】:

所以我目前正在进行最终更改,以便将我的机器人从 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 指南和/或论坛上寻求帮助,但找不到任何帮助,所以我真的很想寻求任何可能的帮助!谢谢。

【问题讨论】:

  • 尝试将您的参数更改为(oldMember.voiceChannel, 5000) 并让函数接收(voiceChannel, delayMS)
  • 遗憾的是,没有改变任何东西:/ 频道离开后仍然存在。

标签: javascript discord discord.js voice


【解决方案1】:

在 DiscordJS V12 中,voiceStateUpdate 事件发生了变化。它现在不是传递参数oldMembernewMember,而是传递oldStatenewState,它们是VoiceState 的实例。要获得触发voiceStateUpdate 的频道,您不再调用member.voiceChannel,而是现在调用VoiceState.channel

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

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

【讨论】:

  • 老实说我没有想到这个,菜鸟的错误哈。非常感谢您的帮助!
猜你喜欢
  • 2021-01-18
  • 2021-11-17
  • 2021-09-27
  • 2021-02-27
  • 2023-04-07
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多