From 437de69630bc66e1881c3ce6ecc59887ab65b8a5 Mon Sep 17 00:00:00 2001 From: PinkGoosik Date: Fri, 31 Jan 2025 08:11:17 +0500 Subject: [PATCH] fix empty voice channel removal --- .../kitsun/feature/AutoChannelsManager.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/src/main/java/ru/pinkgoosik/kitsun/feature/AutoChannelsManager.java b/src/main/java/ru/pinkgoosik/kitsun/feature/AutoChannelsManager.java index 6296928..4f63d9f 100644 --- a/src/main/java/ru/pinkgoosik/kitsun/feature/AutoChannelsManager.java +++ b/src/main/java/ru/pinkgoosik/kitsun/feature/AutoChannelsManager.java @@ -3,6 +3,7 @@ import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel; +import net.dv8tion.jda.api.entities.channel.unions.AudioChannelUnion; import net.dv8tion.jda.api.events.guild.voice.GuildVoiceUpdateEvent; import ru.pinkgoosik.kitsun.DiscordApp; import ru.pinkgoosik.kitsun.cache.ServerData; @@ -46,34 +47,41 @@ public void onGuildVoiceUpdate(GuildVoiceUpdateEvent event) { var joinedChannel = event.getChannelJoined(); var leftChannel = event.getChannelLeft(); - if(joinedChannel != null) { + if(joinedChannel != null && leftChannel == null) { // First ever channel join if(joinedChannel.getId().equals(this.parentChannel)) { - this.onParentChannelJoin(member); - return; + this.createSession(member); } - getSession(joinedChannel.getId()).ifPresent(session -> { - if(!(leftChannel != null && leftChannel.getId().equals(parentChannel))) { - session.updateHistory("<@" + member.getId() + ">" + " joined"); - } - }); + else this.onChannelJoin(member, joinedChannel); } - - if(leftChannel != null) { - getSession(leftChannel.getId()).ifPresent(session -> { - session.updateHistory("<@" + member.getId() + ">" + " left"); - - if(session.owner.equals(member.getId()) && leftChannel.getMembers().isEmpty()) { - leftChannel.delete().queue(); + else if(joinedChannel != null) { // Moved from channel to channel + if(joinedChannel.getId().equals(this.parentChannel)) { + if(!this.hasEmptySession(member)) { + this.createSession(member); + this.onChannelLeft(member, leftChannel); } - }); + } + else if(!leftChannel.getId().equals(this.parentChannel)) this.onChannelJoin(member, joinedChannel); + } + else if(leftChannel != null) { // Completely left channel + this.onChannelLeft(member, leftChannel); } ServerData.get(server).autoChannels.save(); } - public void onParentChannelJoin(Member member) { - if(!this.hasEmptySession(member)) { - this.createSession(member); - } + void onChannelJoin(Member member, AudioChannelUnion channel) { + getSession(channel.getId()).ifPresent(session -> { + session.updateHistory("<@" + member.getId() + ">" + " joined"); + }); + } + + void onChannelLeft(Member member, AudioChannelUnion channel) { + getSession(channel.getId()).ifPresent(session -> { + session.updateHistory("<@" + member.getId() + ">" + " left"); + + if(channel.getMembers().isEmpty()) { + channel.delete().queue(); + } + }); } private boolean hasEmptySession(Member member) {