From fbfb1f1bc461fed6ccfe480194966e02943f3315 Mon Sep 17 00:00:00 2001 From: martimavocado <39881008+martimavocado@users.noreply.github.com> Date: Wed, 1 May 2024 18:49:18 +0100 Subject: [PATCH] Feature: Add Ignored users for Party Commands (#1469) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> --- .../skyhanni/config/commands/Commands.kt | 5 + .../features/misc/PartyCommandsConfig.java | 4 + .../skyhanni/config/storage/Storage.java | 2 + .../features/commands/PartyChatCommands.kt | 118 +++++++++++++++++- .../skyhanni/utils/HypixelCommands.kt | 12 ++ 5 files changed, 137 insertions(+), 4 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 5eeb1b6efe86..b8a0f2c5463b 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -17,6 +17,7 @@ import at.hannibal2.skyhanni.features.bingo.card.nextstephelper.BingoNextStepHel import at.hannibal2.skyhanni.features.chat.Translator import at.hannibal2.skyhanni.features.combat.endernodetracker.EnderNodeTracker import at.hannibal2.skyhanni.features.combat.ghostcounter.GhostUtil +import at.hannibal2.skyhanni.features.commands.PartyChatCommands import at.hannibal2.skyhanni.features.commands.PartyCommands import at.hannibal2.skyhanni.features.commands.WikiManager import at.hannibal2.skyhanni.features.dungeon.CroesusChestTracker @@ -307,6 +308,10 @@ object Commands { "shlanedetection", "Detect a farming lane in garden" ) { FarmingLaneCreator.commandLaneDetection() } + registerCommand( + "shignore", + "Add/Remove a user from your" + ) { PartyChatCommands.blacklist(it) } } private fun usersBugFix() { diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/misc/PartyCommandsConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/misc/PartyCommandsConfig.java index cee11c99b350..7c16b2e13ea7 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/misc/PartyCommandsConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/misc/PartyCommandsConfig.java @@ -46,4 +46,8 @@ public String toString() { } } + @Expose + @ConfigEditorBoolean + @ConfigOption(name = "Show reminder", desc = "Shows a reminder when an unauthorized player tries to run a command.") + public boolean showIgnoredReminder = true; } diff --git a/src/main/java/at/hannibal2/skyhanni/config/storage/Storage.java b/src/main/java/at/hannibal2/skyhanni/config/storage/Storage.java index 862dfea45000..c37ba1dd0993 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/storage/Storage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/storage/Storage.java @@ -48,4 +48,6 @@ public class Storage { @Expose public String currentFameRank = "New player"; + @Expose + public List blacklistedUsers = new ArrayList<>(); } diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/PartyChatCommands.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/PartyChatCommands.kt index aa38f90b87b1..be986e01dab7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/PartyChatCommands.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/PartyChatCommands.kt @@ -7,6 +7,7 @@ import at.hannibal2.skyhanni.data.PartyAPI import at.hannibal2.skyhanni.data.hypixel.chat.event.PartyChatEvent import at.hannibal2.skyhanni.events.TabCompletionEvent import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.HypixelCommands import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.SimpleTimeMark import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -15,6 +16,7 @@ import kotlin.time.Duration.Companion.seconds object PartyChatCommands { private val config get() = SkyHanniMod.feature.misc.partyCommands + private val storage get() = SkyHanniMod.feature.storage data class PartyChatCommand( val names: List, @@ -32,7 +34,7 @@ object PartyChatCommands { { config.transferCommand }, requiresPartyLead = true, executable = { - ChatUtils.sendCommandToServer("party transfer ${it.cleanedAuthor}") + HypixelCommands.partyTransfer(it.cleanedAuthor) } ), PartyChatCommand( @@ -41,7 +43,7 @@ object PartyChatCommands { requiresPartyLead = true, executable = { lastWarp = SimpleTimeMark.now() - ChatUtils.sendCommandToServer("party warp") + HypixelCommands.partyWarp() } ), PartyChatCommand( @@ -50,7 +52,7 @@ object PartyChatCommands { requiresPartyLead = true, executable = { lastAllInvite = SimpleTimeMark.now() - ChatUtils.sendCommandToServer("party settings allinvite") + HypixelCommands.partyAllInvite() } ), ) @@ -75,6 +77,10 @@ object PartyChatCommands { private val commandPrefixes = ".!?".toSet() + private fun isBlockedUser(name: String): Boolean { + return storage.blacklistedUsers.any { it.equals(name, ignoreCase = true) } + } + @SubscribeEvent fun onPartyCommand(event: PartyChatEvent) { if (event.message.firstOrNull() !in commandPrefixes) return @@ -85,8 +91,21 @@ object PartyChatCommands { if (name == LorenzUtils.getPlayerName()) return if (!command.isEnabled()) return if (command.requiresPartyLead && PartyAPI.partyLeader != LorenzUtils.getPlayerName()) return + if (isBlockedUser(name)) { + if (config.showIgnoredReminder) ChatUtils.clickableChat( + "§cIgnoring chat command from ${event.author}. " + + "Unignore them using /shignore remove or click here!", + onClick = { blacklistModify(event.author) } + ) + return + } if (!isTrustedUser(name)) { - ChatUtils.chat("§cIgnoring chat command from $name. Change your party chat command settings or /friend (best) them.") + if (config.showIgnoredReminder) { + ChatUtils.chat( + "§cIgnoring chat command from $name. " + + "Change your party chat command settings or /friend (best) them." + ) + } return } command.executable(event) @@ -104,4 +123,95 @@ object PartyChatCommands { .map { "$prefix$it" } .forEach(event::addSuggestion) } + + /** + * TODO use a utils function for add/remove/list/clear + * function(args: Array, list: List, listName: String, + * precondition(string): () -> Boolean, onAdd(string), onRemove(string), onList(list)) + */ + fun blacklist(input: Array) { + if (input.size !in 1..2) { + ChatUtils.userError("Usage: /shignore ") + return + } + when (val firstArg = input[0]) { + "add" -> { + if (input.size != 2) { + ChatUtils.userError("Usage: /shignore ") + return + } + if (isBlockedUser(input[1])) { + ChatUtils.userError("${input[1]} is already ignored!") + } else blacklistModify(input[1]) + } + + "remove" -> { + if (input.size != 2) { + ChatUtils.userError("Usage: /shignore ") + return + } + if (!isBlockedUser(input[1])) { + ChatUtils.userError("${input[1]} isn't ignored!") + } else blacklistModify(input[1]) + } + + "list" -> { + if (input.size == 2) { + blacklistView(input[1]) + } else blacklistView() + } + + "clear" -> { + ChatUtils.clickableChat("Are you sure you want to do this? Click here to confirm.", + onClick = { + storage.blacklistedUsers.clear() + ChatUtils.chat("Cleared your ignored players list!") + }) + } + + else -> blacklistModify(firstArg) + } + } + + private fun blacklistModify(player: String) { + if (player !in storage.blacklistedUsers) { + ChatUtils.chat("§cNow ignoring §b$player§e!") + storage.blacklistedUsers.add(player) + return + } + ChatUtils.chat("§aStopped ignoring §b$player§e!") + storage.blacklistedUsers.remove(player) + return + } + + private fun blacklistView() { + val blacklist = storage.blacklistedUsers + if (blacklist.size <= 0) { + ChatUtils.chat("Your ignored players list is empty!") + return + } + var message = "Ignored player list:" + if (blacklist.size > 15) { + message += "\n§e" + blacklist.forEachIndexed { i, it -> + message += it + if (i < blacklist.size - 1) { + message += ", " + } + } + } else { + blacklist.forEach { + message += "\n§e$it" + } + } + ChatUtils.chat(message) + } + + private fun blacklistView(player: String) { + if (isBlockedUser(player)) { + ChatUtils.chat("$player §ais §eignored.") + } else { + ChatUtils.chat("$player §cisn't §eignored.") + } + } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/HypixelCommands.kt b/src/main/java/at/hannibal2/skyhanni/utils/HypixelCommands.kt index 5507f4b990ea..1af1a70b84cd 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/HypixelCommands.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/HypixelCommands.kt @@ -46,6 +46,18 @@ object HypixelCommands { send("togglemusic") } + fun partyWarp() { + send("party warp") + } + + fun partyTransfer(player: String) { + send("party transfer $player") + } + + fun partyAllInvite() { + send("party settings allinvite") + } + private fun send(command: String) { @Suppress("DEPRECATION") // TODO rename function