diff --git a/src/Player.ts b/src/Player.ts index 1ea3b09..282e931 100644 --- a/src/Player.ts +++ b/src/Player.ts @@ -76,9 +76,18 @@ class Player extends EventEmitter { const queue = this.getQueue(oldState.guild.id); if (!queue) return; - if (oldState.channelId && newState.channelId && oldState.channelId !== newState.channelId && newState.member.id === newState.guild.me.id) { - if (queue?.connection) queue.connection.channel = newState.channel; - } + if (oldState.channelId && newState.channelId && oldState.channelId !== newState.channelId) { + if (queue?.connection && newState.member.id === newState.guild.me.id) queue.connection.channel = newState.channel; + if (newState.member.id === newState.guild.me.id || newState.member.id !== newState.guild.me.id && oldState.channelId === queue.connection.channel.id) { + if (!Util.isVoiceEmpty(queue.connection.channel)) return; + const timeout = setTimeout(() => { + if (!Util.isVoiceEmpty(queue.connection.channel)) return; + if (!this.queues.has(queue.guild.id)) return; + if (queue.options.leaveOnEmpty) queue.destroy(); + this.emit("channelEmpty", queue); + }, queue.options.leaveOnEmptyCooldown || 0).unref(); + queue._cooldownsTimeout.set(`empty_${oldState.guild.id}`, timeout); + } if (!oldState.channelId && newState.channelId && newState.member.id === newState.guild.me.id) { if (newState.serverMute || !newState.serverMute) { @@ -109,19 +118,23 @@ class Player extends EventEmitter { const emptyTimeout = queue._cooldownsTimeout.get(`empty_${oldState.guild.id}`); const channelEmpty = Util.isVoiceEmpty(queue.connection.channel); - if (!channelEmpty && emptyTimeout) { - clearTimeout(emptyTimeout); - queue._cooldownsTimeout.delete(`empty_${oldState.guild.id}`); + if (newState.channelId === queue.connection.channel.id) { + if (!channelEmpty && emptyTimeout) { + clearTimeout(emptyTimeout); + queue._cooldownsTimeout.delete(`empty_${oldState.guild.id}`); + } } } else { - if (!Util.isVoiceEmpty(queue.connection.channel)) return; - const timeout = setTimeout(() => { + if (oldState.channelId === queue.connection.channel.id) { if (!Util.isVoiceEmpty(queue.connection.channel)) return; - if (!this.queues.has(queue.guild.id)) return; - if (queue.options.leaveOnEmpty) queue.destroy(); - this.emit("channelEmpty", queue); - }, queue.options.leaveOnEmptyCooldown || 0).unref(); - queue._cooldownsTimeout.set(`empty_${oldState.guild.id}`, timeout); + const timeout = setTimeout(() => { + if (!Util.isVoiceEmpty(queue.connection.channel)) return; + if (!this.queues.has(queue.guild.id)) return; + if (queue.options.leaveOnEmpty) queue.destroy(); + this.emit("channelEmpty", queue); + }, queue.options.leaveOnEmptyCooldown || 0).unref(); + queue._cooldownsTimeout.set(`empty_${oldState.guild.id}`, timeout); + } } }