From 2a26f8635c4eef3a3e9bc30d08dbf154cbc86906 Mon Sep 17 00:00:00 2001 From: Nincodedo Date: Tue, 13 Dec 2022 19:09:24 -0600 Subject: [PATCH 1/5] Fix TempVoiceChannels not deleting when they should (#823) Closes https://github.com/Nincodedo/Ninbot/issues/822 --- .../channel/voice/ScheduledCleanup.java | 30 +++++++++++++++++++ .../channel/voice/TempVoiceChannel.java | 2 ++ .../voice/TempVoiceChannelManager.java | 26 ++++++---------- .../voice/TempVoiceChannelManagerTest.java | 8 ++--- 4 files changed, 45 insertions(+), 21 deletions(-) create mode 100644 ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/ScheduledCleanup.java diff --git a/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/ScheduledCleanup.java b/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/ScheduledCleanup.java new file mode 100644 index 00000000..6c94b1e1 --- /dev/null +++ b/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/ScheduledCleanup.java @@ -0,0 +1,30 @@ +package dev.nincodedo.ninbot.components.channel.voice; + +import net.dv8tion.jda.api.sharding.ShardManager; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +@Component +public class ScheduledCleanup { + private final TempVoiceChannelRepository tempVoiceChannelRepository; + private final ShardManager shardManager; + + public ScheduledCleanup(TempVoiceChannelRepository tempVoiceChannelRepository, ShardManager shardManager) { + this.tempVoiceChannelRepository = tempVoiceChannelRepository; + this.shardManager = shardManager; + } + + @Scheduled(fixedDelay = 12, timeUnit = TimeUnit.HOURS, initialDelay = 1) + public void deleteEmptyTempChannels() { + tempVoiceChannelRepository.findAll().forEach(tempVoiceChannel -> { + var voiceChannel = shardManager.getVoiceChannelById(tempVoiceChannel.getVoiceChannelId()); + if (voiceChannel == null) { + tempVoiceChannelRepository.delete(tempVoiceChannel); + } else if (voiceChannel.getMembers().isEmpty()) { + voiceChannel.delete().queue(success -> tempVoiceChannelRepository.delete(tempVoiceChannel)); + } + }); + } +} diff --git a/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannel.java b/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannel.java index 909981cc..aab39fa6 100644 --- a/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannel.java +++ b/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannel.java @@ -3,11 +3,13 @@ import dev.nincodedo.nincord.persistence.BaseEntity; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import jakarta.persistence.Column; import jakarta.persistence.Entity; +@EqualsAndHashCode(callSuper = true) @Data @Entity @AllArgsConstructor diff --git a/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannelManager.java b/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannelManager.java index 786f9097..cd40c3a7 100644 --- a/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannelManager.java +++ b/ninbot-app/src/main/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannelManager.java @@ -33,8 +33,7 @@ public class TempVoiceChannelManager extends StatAwareListenerAdapter { public TempVoiceChannelManager(StatManager statManager, @Qualifier("statCounterThreadPool") ExecutorService executorService, - TempVoiceChannelRepository tempVoiceChannelRepository, - ComponentService componentService) { + TempVoiceChannelRepository tempVoiceChannelRepository, ComponentService componentService) { super(statManager, executorService); this.repository = tempVoiceChannelRepository; this.componentService = componentService; @@ -54,13 +53,10 @@ private void checkIfShouldCreateTempChannel(Guild guild, Member member, AudioCha if (componentService.isDisabled(componentName, guild.getId()) || channelJoined == null) { return; } - log.trace("hasPermission: {}, channel join {} is temp creator: {}", hasManageChannelPermission(guild - ), channelJoined - .getName(), channelJoined.getName() + log.trace("hasPermission: {}, channel join {} is temp creator: {}", hasManageChannelPermission(guild), + channelJoined.getName(), channelJoined.getName() .startsWith(Emojis.PLUS)); - if (hasManageChannelPermission(guild) && channelJoined - .getName() - .startsWith(Emojis.PLUS)) { + if (hasManageChannelPermission(guild) && channelJoined.getName().startsWith(Emojis.PLUS)) { countOneStat(componentName, guild.getId()); createTemporaryChannel(channelJoined, guild, member); } @@ -70,19 +66,16 @@ private void createTemporaryChannel(AudioChannelUnion channelJoined, Guild guild var channelNameType = channelJoined.getName().substring(2); var channelName = String.format("%s's %s", member.getEffectiveName().replace(Emojis.PLUS, ""), channelNameType); log.trace("Creating temporary channel named {} for member {} in server {}", channelName, - FormatLogObject.memberInfo(member), - FormatLogObject.guildName(guild)); + FormatLogObject.memberInfo(member), FormatLogObject.guildName(guild)); if (channelJoined.getType() == ChannelType.VOICE) { var voiceChannel = channelJoined.asVoiceChannel(); - voiceChannel.createCopy() - .setName(channelName) - .queue(saveAndMove(guild, member)); + voiceChannel.createCopy().setName(channelName).queue(saveAndMove(guild, member)); } } Consumer saveAndMove(Guild guild, Member member) { return voiceChannel -> { - repository.save(new TempVoiceChannel(member.getId(), voiceChannel.getId())); + repository.save(new TempVoiceChannel(voiceChannel.getId(), member.getId())); guild.moveVoiceMember(member, voiceChannel).queue(); voiceChannel.getPermissionContainer() .getManager() @@ -109,9 +102,8 @@ private boolean isTemporaryChannel(String voiceChannelId) { private void deleteTemporaryChannel(AudioChannelUnion audioChannel) { audioChannel.delete() - .queueAfter(10, TimeUnit.SECONDS, success -> - repository.findByVoiceChannelId(audioChannel.getId()) - .ifPresent(tempVoiceChannel -> repository.delete(tempVoiceChannel))); + .queueAfter(10, TimeUnit.SECONDS, success -> repository.findByVoiceChannelId(audioChannel.getId()) + .ifPresent(repository::delete)); } private boolean hasManageChannelPermission(Guild guild) { diff --git a/ninbot-app/src/test/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannelManagerTest.java b/ninbot-app/src/test/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannelManagerTest.java index b5d786fa..31744757 100644 --- a/ninbot-app/src/test/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannelManagerTest.java +++ b/ninbot-app/src/test/java/dev/nincodedo/ninbot/components/channel/voice/TempVoiceChannelManagerTest.java @@ -68,7 +68,7 @@ void onGuildVoiceJoin() { var voiceChannel = Mockito.mock(VoiceChannel.class); when(joinEvent.getGuild()).thenReturn(guild); - when(guild.getId()).thenReturn("1"); + when(guild.getId()).thenReturn("12"); when(guild.getSelfMember()).thenReturn(selfMember); when(joinEvent.getChannelJoined()).thenReturn(voiceChannelJoined); when(voiceChannelJoined.asVoiceChannel()).thenReturn(voiceChannel); @@ -76,8 +76,8 @@ void onGuildVoiceJoin() { when(voiceChannelJoined.getName()).thenReturn(Emojis.PLUS + " wot"); when(selfMember.hasPermission(any(Permission.class))).thenReturn(true); when(member.getEffectiveName()).thenReturn("Nincodedo"); - when(member.getId()).thenReturn("1"); - when(member.getIdLong()).thenReturn(1L); + when(member.getId()).thenReturn("21"); + when(member.getIdLong()).thenReturn(21L); when(voiceChannel.createCopy()).thenReturn(restAction); when(restAction.setName(anyString())).thenReturn(lastRestAction); when(guild.moveVoiceMember(member, voiceChannel)).thenReturn(moveVoiceAction); @@ -96,6 +96,6 @@ void onGuildVoiceJoin() { Consumer consumer = lambdaCaptor.getValue(); consumer.accept(voiceChannel); - verify(tempVoiceChannelRepository).save(new TempVoiceChannel(member.getId(), voiceChannelJoined.getId())); + verify(tempVoiceChannelRepository).save(new TempVoiceChannel(voiceChannelJoined.getId(), member.getId())); } } From 59dcfbc36e467ac04a60a67462198911d5d47668 Mon Sep 17 00:00:00 2001 From: Nincodedo Date: Fri, 23 Dec 2022 21:28:37 -0600 Subject: [PATCH 2/5] Update OpenTelemetry --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 38f1647d..bdfd7a28 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM maven:3.8.6-eclipse-temurin-19 AS build -ARG open_telemetry_version=v1.20.2 +ARG open_telemetry_version=v1.22.1 COPY . ./ RUN mvn -B package -P git-commit RUN cp ninbot-app/target/ninbot-*.jar ninbot.jar From 317c56412f175b57d8984155a66dcaab0e9bc1c6 Mon Sep 17 00:00:00 2001 From: Nincodedo Date: Mon, 12 Dec 2022 16:06:39 -0600 Subject: [PATCH 3/5] Change GitHub release to depend on successful builds --- .../workflows/create-release-on-tag-push.yml | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/create-release-on-tag-push.yml b/.github/workflows/create-release-on-tag-push.yml index fc0f64fc..6fb10b5f 100644 --- a/.github/workflows/create-release-on-tag-push.yml +++ b/.github/workflows/create-release-on-tag-push.yml @@ -4,16 +4,6 @@ on: tags: - "*" jobs: - createRelease: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Release - uses: softprops/action-gh-release@v1 - with: - generate_release_notes: true - discussion_category_name: 'Releases' buildMaven: name: Build Maven runs-on: ubuntu-latest @@ -58,6 +48,18 @@ jobs: tags: | ghcr.io/nincodedo/ninbot:latest ghcr.io/nincodedo/ninbot:${{ github.sha }} + createRelease: + needs: [buildMaven, buildDocker] + name: Create Release + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Release + uses: softprops/action-gh-release@v1 + with: + generate_release_notes: true + discussion_category_name: 'Releases' deployGKE: needs: [buildMaven, buildDocker] name: Deploy GKE From f3f54db61ec0e15fb2a8830c608f3be84c9e8bcb Mon Sep 17 00:00:00 2001 From: Nincodedo Date: Fri, 30 Dec 2022 19:27:06 -0600 Subject: [PATCH 4/5] Add config update to deployment --- .github/workflows/create-release-on-tag-push.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/create-release-on-tag-push.yml b/.github/workflows/create-release-on-tag-push.yml index 6fb10b5f..1d20ffb2 100644 --- a/.github/workflows/create-release-on-tag-push.yml +++ b/.github/workflows/create-release-on-tag-push.yml @@ -48,6 +48,7 @@ jobs: tags: | ghcr.io/nincodedo/ninbot:latest ghcr.io/nincodedo/ninbot:${{ github.sha }} + ghcr.io/nincodedo/ninbot:${{ github.ref_name }} createRelease: needs: [buildMaven, buildDocker] name: Create Release @@ -74,5 +75,7 @@ jobs: with: cluster_name: ninbot-cluster location: us-central1-c + - name: GKE Update Configs + run: kubectl patch configmap ninbot-config -p '{"data":{"OTEL_RESOURCE_ATTRIBUTES":"service.name=ninbot-${{ github.ref_name }},deployment.environment=PROD", "OTEL_SERVICE_NAME":"ninbot-${{ github.ref_name }}"}}' - name: GKE Deploy run: kubectl set image deployment/ninbot ninbot=ghcr.io/nincodedo/ninbot:${{ github.sha }} From b38979c7af10249089624be974b128d5ace03e26 Mon Sep 17 00:00:00 2001 From: Nincodedo Date: Mon, 16 Jan 2023 10:05:25 -0600 Subject: [PATCH 5/5] Update version for release --- ninbot-app/pom.xml | 2 +- ninbot-shared-parent/pom.xml | 2 +- ninbot-test-coverage/pom.xml | 2 +- nincord-common/pom.xml | 2 +- pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ninbot-app/pom.xml b/ninbot-app/pom.xml index 6c594826..c3354b79 100644 --- a/ninbot-app/pom.xml +++ b/ninbot-app/pom.xml @@ -5,7 +5,7 @@ dev.nincodedo ninbot-shared-parent - 3.11.0 + 3.11.1 ../ninbot-shared-parent diff --git a/ninbot-shared-parent/pom.xml b/ninbot-shared-parent/pom.xml index df6591c5..77803922 100644 --- a/ninbot-shared-parent/pom.xml +++ b/ninbot-shared-parent/pom.xml @@ -11,7 +11,7 @@ dev.nincodedo ninbot-shared-parent - 3.11.0 + 3.11.1 pom Ninbot Shared Parent Pom diff --git a/ninbot-test-coverage/pom.xml b/ninbot-test-coverage/pom.xml index bf71b464..e9c1b9ac 100644 --- a/ninbot-test-coverage/pom.xml +++ b/ninbot-test-coverage/pom.xml @@ -6,7 +6,7 @@ dev.nincodedo ninbot-shared-parent - 3.11.0 + 3.11.1 ../ninbot-shared-parent ninbot-test-coverage diff --git a/nincord-common/pom.xml b/nincord-common/pom.xml index 61d69951..b4080c51 100644 --- a/nincord-common/pom.xml +++ b/nincord-common/pom.xml @@ -5,7 +5,7 @@ dev.nincodedo ninbot-shared-parent - 3.11.0 + 3.11.1 ../ninbot-shared-parent diff --git a/pom.xml b/pom.xml index 452e679d..d8b47756 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ dev.nincodedo ninbot-shared-parent - 3.11.0 + 3.11.1 ninbot-shared-parent ninbot