From 0c83a8d71d595884174d1a7a536e61c454798e1d Mon Sep 17 00:00:00 2001 From: Nanabell Date: Sat, 31 Aug 2019 13:49:57 +0200 Subject: [PATCH 1/8] Update GuildConfig Entity with new Clear_On_Empty Boolean --- .../main/java/fredboat/db/transfer/GuildConfig.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/FredBoat/src/main/java/fredboat/db/transfer/GuildConfig.java b/FredBoat/src/main/java/fredboat/db/transfer/GuildConfig.java index 1eb4b2c70..4434d2444 100644 --- a/FredBoat/src/main/java/fredboat/db/transfer/GuildConfig.java +++ b/FredBoat/src/main/java/fredboat/db/transfer/GuildConfig.java @@ -35,6 +35,7 @@ public class GuildConfig implements TransferObject { private String guildId = ""; private boolean trackAnnounce = false; private boolean autoResume = false; + private boolean clearOnEmpty = true; private String lang = "en_US"; @Override @@ -65,6 +66,15 @@ public GuildConfig setAutoResume(boolean autoplay) { return this; } + public boolean isClearOnEmpty() { + return clearOnEmpty; + } + + public GuildConfig setClearOnEmpty(boolean clearOnEmpty) { + this.clearOnEmpty = clearOnEmpty; + return this; + } + public String getLang() { return lang; } From 3e2f1b466c3f74f706f9cfc424361b04530898f3 Mon Sep 17 00:00:00 2001 From: Nanabell Date: Sat, 31 Aug 2019 13:50:27 +0200 Subject: [PATCH 2/8] Add Logic to Clear the Queue if bot is alone and config has been set so --- .../java/fredboat/event/AudioEventHandler.kt | 29 +++++++++++++++++-- .../src/main/resources/lang/en_US.properties | 1 + 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt b/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt index bc6a13675..1612e546c 100644 --- a/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt +++ b/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt @@ -25,14 +25,18 @@ class AudioEventHandler( } override fun onVoiceLeave(channel: VoiceChannel, member: Member) { - checkForAutoPause(channel) + if (!checkForAutoStop(channel)) + checkForAutoPause(channel) + if (!member.isUs) return getLink(channel).onDisconnected() } override fun onVoiceMove(oldChannel: VoiceChannel, newChannel: VoiceChannel, member: Member) { checkForAutoResume(newChannel, member) - checkForAutoPause(oldChannel) + if (!checkForAutoStop(newChannel)) + checkForAutoPause(oldChannel) + if (!member.isUs) return getLink(newChannel).setChannel(newChannel.id.toString()) } @@ -77,4 +81,25 @@ class AudioEventHandler( } } + /** + * Check if the player should be stopped, if yes it will stop the player and return true + * else returns false + * + * @return Boolean if player has been stopped + **/ + private fun checkForAutoStop(channel: VoiceChannel): Boolean { + val player = playerRegistry.getExisting(channel.guild) ?: return false + + if (!player.isQueueEmpty + && player.humanUsersInCurrentVC.isEmpty() + && guildConfigService.fetchGuildConfig(channel.guild.id).isClearOnEmpty) { + player.stop() + player.activeTextChannel?.send(I18n.get(channel.guild).getString("eventAutoStop"))?.subscribe() + + return true + } + + return false + } + } \ No newline at end of file diff --git a/FredBoat/src/main/resources/lang/en_US.properties b/FredBoat/src/main/resources/lang/en_US.properties index 40871fa6f..53fc793d2 100644 --- a/FredBoat/src/main/resources/lang/en_US.properties +++ b/FredBoat/src/main/resources/lang/en_US.properties @@ -211,6 +211,7 @@ userinfoBlacklisted=Blacklisted\: skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command. eventUsersLeftVC=All users have left the voice channel. The player has been paused. eventAutoResumed=User presence detected, automatically resuming the player. +eventAutoStop=All user have left the voice channel. The player has been cleared. commandsFun=Fun commandsMemes=Memes commandsUtility=Utility From 49f293e9e94fb55d8cd9f9129d9294f8ebb73a27 Mon Sep 17 00:00:00 2001 From: Nanabell Date: Sat, 31 Aug 2019 13:50:46 +0200 Subject: [PATCH 3/8] Add config command to toggle clear_on_empty on & off --- .../main/java/fredboat/command/config/ConfigCommand.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt b/FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt index 373627e14..28cf37736 100644 --- a/FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt +++ b/FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt @@ -58,6 +58,7 @@ class ConfigCommand(name: String, vararg aliases: String) : Command(name, *alias .append(context.i18nFormat("configNoArgs", context.guild.name)).append("\n") .append("track_announce = ${gc.isTrackAnnounce}\n") .append("auto_resume = ${gc.isAutoResume}\n") + .append("clear_on_empty = ${gc.isClearOnEmpty}") .append("```") //opening ``` is part of the configNoArgs language string context.reply(mb.build()) @@ -94,6 +95,13 @@ class ConfigCommand(name: String, vararg aliases: String) : Command(name, *alias } else { context.reply(context.i18nFormat("configMustBeBoolean", invoker.effectiveName.escapeAndDefuse())) } + } else if (key == "clear_on_empty") { + if (`val`.equals("true", ignoreCase = true) or `val`.equals("false", ignoreCase = true)) { + Launcher.botController.guildConfigService.transformGuildConfig(context.guild.id) { + gc -> gc.setClearOnEmpty(java.lang.Boolean.parseBoolean(`val`)) + } + context.replyWithName("`clear_on_empty`" + context.i18nFormat("configSetTo", `val`)) + } } else context.reply(context.i18nFormat("configUnknownKey", invoker.effectiveName.escapeAndDefuse())) } From a0d431baae392e02e5b8b970a2dbd12bdc784774 Mon Sep 17 00:00:00 2001 From: Nanabell Date: Sat, 7 Sep 2019 14:47:50 +0200 Subject: [PATCH 4/8] Update FredBoat/src/main/resources/lang/en_US.properties Co-Authored-By: Frederik Ar. Mikkelsen --- FredBoat/src/main/resources/lang/en_US.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FredBoat/src/main/resources/lang/en_US.properties b/FredBoat/src/main/resources/lang/en_US.properties index 53fc793d2..7a6641e2a 100644 --- a/FredBoat/src/main/resources/lang/en_US.properties +++ b/FredBoat/src/main/resources/lang/en_US.properties @@ -211,7 +211,7 @@ userinfoBlacklisted=Blacklisted\: skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command. eventUsersLeftVC=All users have left the voice channel. The player has been paused. eventAutoResumed=User presence detected, automatically resuming the player. -eventAutoStop=All user have left the voice channel. The player has been cleared. +eventAutoStop=All users have left the voice channel. The player has been cleared. commandsFun=Fun commandsMemes=Memes commandsUtility=Utility From f8455dc2193cb582e5b72c947573a6a0890c755c Mon Sep 17 00:00:00 2001 From: Nanabell Date: Sun, 8 Sep 2019 11:32:49 +0200 Subject: [PATCH 5/8] set obligatory \n on config view --- FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt b/FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt index 28cf37736..c099ba1a0 100644 --- a/FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt +++ b/FredBoat/src/main/java/fredboat/command/config/ConfigCommand.kt @@ -58,7 +58,7 @@ class ConfigCommand(name: String, vararg aliases: String) : Command(name, *alias .append(context.i18nFormat("configNoArgs", context.guild.name)).append("\n") .append("track_announce = ${gc.isTrackAnnounce}\n") .append("auto_resume = ${gc.isAutoResume}\n") - .append("clear_on_empty = ${gc.isClearOnEmpty}") + .append("clear_on_empty = ${gc.isClearOnEmpty}\n") .append("```") //opening ``` is part of the configNoArgs language string context.reply(mb.build()) From 696283e0504054906d496c5fd6fadf1cca5c7e29 Mon Sep 17 00:00:00 2001 From: Nanabell Date: Sun, 8 Sep 2019 12:02:49 +0200 Subject: [PATCH 6/8] align autoStop translate key to autoPause key --- FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt | 2 +- FredBoat/src/main/resources/lang/en_US.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt b/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt index 1612e546c..e3b6c1e75 100644 --- a/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt +++ b/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt @@ -94,7 +94,7 @@ class AudioEventHandler( && player.humanUsersInCurrentVC.isEmpty() && guildConfigService.fetchGuildConfig(channel.guild.id).isClearOnEmpty) { player.stop() - player.activeTextChannel?.send(I18n.get(channel.guild).getString("eventAutoStop"))?.subscribe() + player.activeTextChannel?.send(I18n.get(channel.guild).getString("eventUsersLeftVCStop"))?.subscribe() return true } diff --git a/FredBoat/src/main/resources/lang/en_US.properties b/FredBoat/src/main/resources/lang/en_US.properties index 7a6641e2a..bf6053d84 100644 --- a/FredBoat/src/main/resources/lang/en_US.properties +++ b/FredBoat/src/main/resources/lang/en_US.properties @@ -210,8 +210,8 @@ userinfoCreationTime=Creation Date\: userinfoBlacklisted=Blacklisted\: skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command. eventUsersLeftVC=All users have left the voice channel. The player has been paused. +eventUsersLeftVCStop=All users have left the voice channel. The player has been cleared. eventAutoResumed=User presence detected, automatically resuming the player. -eventAutoStop=All users have left the voice channel. The player has been cleared. commandsFun=Fun commandsMemes=Memes commandsUtility=Utility From f479592e5a402f285291f1af3a9ae0c4fb569ed1 Mon Sep 17 00:00:00 2001 From: Nanabell Date: Sun, 8 Sep 2019 12:05:40 +0200 Subject: [PATCH 7/8] align autoStop method to autoPause/autoResume methods --- .../java/fredboat/event/AudioEventHandler.kt | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt b/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt index e3b6c1e75..1bb8fad83 100644 --- a/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt +++ b/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt @@ -25,8 +25,8 @@ class AudioEventHandler( } override fun onVoiceLeave(channel: VoiceChannel, member: Member) { - if (!checkForAutoStop(channel)) - checkForAutoPause(channel) + checkForAutoStop(channel) + checkForAutoPause(channel) if (!member.isUs) return getLink(channel).onDisconnected() @@ -34,8 +34,8 @@ class AudioEventHandler( override fun onVoiceMove(oldChannel: VoiceChannel, newChannel: VoiceChannel, member: Member) { checkForAutoResume(newChannel, member) - if (!checkForAutoStop(newChannel)) - checkForAutoPause(oldChannel) + checkForAutoStop(newChannel) + checkForAutoPause(oldChannel) if (!member.isUs) return getLink(newChannel).setChannel(newChannel.id.toString()) @@ -46,23 +46,6 @@ class AudioEventHandler( private fun getLink(channel: VoiceChannel) = lavalink.getLink(channel.guild.idString) - private fun checkForAutoPause(channelLeft: VoiceChannel) { - if (appConfig.continuePlayback) return - - val player = playerRegistry.getExisting(channelLeft.guild.id) ?: return - - //are we in the channel that someone left from? - val currentVc = player.currentVoiceChannel - if (currentVc != null && currentVc.id != channelLeft.id) { - return - } - - if (player.getHumanUsersInVC(currentVc).isEmpty() && !player.isPaused) { - player.pause() - player.activeTextChannel?.send(I18n.get(channelLeft.guild).getString("eventUsersLeftVC"))?.subscribe() - } - } - private fun checkForAutoResume(joinedChannel: VoiceChannel, joined: Member) { val guild = joinedChannel.guild val player = playerRegistry.getExisting(guild) ?: return @@ -81,25 +64,38 @@ class AudioEventHandler( } } + private fun checkForAutoPause(channelLeft: VoiceChannel) { + if (appConfig.continuePlayback) return + + val player = playerRegistry.getExisting(channelLeft.guild.id) ?: return + + //are we in the channel that someone left from? + val currentVc = player.currentVoiceChannel + if (currentVc != null && currentVc.id != channelLeft.id) { + return + } + + if (player.getHumanUsersInVC(currentVc).isEmpty() && !player.isPaused) { + player.pause() + player.activeTextChannel?.send(I18n.get(channelLeft.guild).getString("eventUsersLeftVC"))?.subscribe() + } + } + /** * Check if the player should be stopped, if yes it will stop the player and return true * else returns false * * @return Boolean if player has been stopped **/ - private fun checkForAutoStop(channel: VoiceChannel): Boolean { - val player = playerRegistry.getExisting(channel.guild) ?: return false + private fun checkForAutoStop(channel: VoiceChannel) { + val player = playerRegistry.getExisting(channel.guild) ?: return - if (!player.isQueueEmpty + if (player.isPlaying + && !player.isQueueEmpty && player.humanUsersInCurrentVC.isEmpty() && guildConfigService.fetchGuildConfig(channel.guild.id).isClearOnEmpty) { player.stop() player.activeTextChannel?.send(I18n.get(channel.guild).getString("eventUsersLeftVCStop"))?.subscribe() - - return true } - - return false } - } \ No newline at end of file From ef6415af256826b60e707cdcfe8ecffd90d63608 Mon Sep 17 00:00:00 2001 From: Nanabell Date: Sun, 8 Sep 2019 12:05:56 +0200 Subject: [PATCH 8/8] Remove docs --- FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt b/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt index 1bb8fad83..b7e4d1acd 100644 --- a/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt +++ b/FredBoat/src/main/java/fredboat/event/AudioEventHandler.kt @@ -81,12 +81,6 @@ class AudioEventHandler( } } - /** - * Check if the player should be stopped, if yes it will stop the player and return true - * else returns false - * - * @return Boolean if player has been stopped - **/ private fun checkForAutoStop(channel: VoiceChannel) { val player = playerRegistry.getExisting(channel.guild) ?: return