From b678805c3723764f6d133e642f2bc01bfdd9d598 Mon Sep 17 00:00:00 2001 From: ericek111 Date: Wed, 30 Sep 2026 22:21:43 +0000 Subject: [PATCH] Offer the server groups we have the power for, not only those needing none canToggleGroup compared a group's needed member add/remove power with our own i_group_needed_member_*_power, which the server never reports for us: our power is i_group_member_add_power and i_group_member_remove_power. An admin was only ever offered groups that need no power at all. Co-Authored-By: Claude Opus 5.5 --- .../core/src/main/java/com/ts3client/net/ServerModel.java | 6 +++--- .../test/java/com/ts3client/net/ServerModelRulesTest.java | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ts3-client/core/src/main/java/com/ts3client/net/ServerModel.java b/ts3-client/core/src/main/java/com/ts3client/net/ServerModel.java index 50e257b..d4f1434 100644 --- a/ts3-client/core/src/main/java/com/ts3client/net/ServerModel.java +++ b/ts3-client/core/src/main/java/com/ts3client/net/ServerModel.java @@ -147,7 +147,7 @@ public final class ServerModel { /** * The local client's resolved value for a named permission (e.g. - * {@code "i_group_needed_member_add_power"}), or {@code 0} if it isn't known + * {@code "i_group_member_add_power"}), or {@code 0} if it isn't known * yet (the {@code permissionlist} request is still in flight, or the server * never reported a non-default value for it). */ @@ -175,9 +175,9 @@ public final class ServerModel { * unlimited power can only be touched by a local client that has it. */ public synchronized boolean canToggleGroup(Group group, boolean assigned) { - return hasPower(group.neededMemberAddPower, selfPermissionValue("i_group_needed_member_add_power")) + return hasPower(group.neededMemberAddPower, selfPermissionValue("i_group_member_add_power")) && (!assigned || hasPower(group.neededMemberRemovePower, - selfPermissionValue("i_group_needed_member_remove_power"))); + selfPermissionValue("i_group_member_remove_power"))); } private static boolean hasPower(int needed, int own) { diff --git a/ts3-client/core/src/test/java/com/ts3client/net/ServerModelRulesTest.java b/ts3-client/core/src/test/java/com/ts3client/net/ServerModelRulesTest.java index ca483e9..428bc64 100644 --- a/ts3-client/core/src/test/java/com/ts3client/net/ServerModelRulesTest.java +++ b/ts3-client/core/src/test/java/com/ts3client/net/ServerModelRulesTest.java @@ -26,8 +26,8 @@ class ServerModelRulesTest { @Test void groupNeedsEnoughAddPowerAndRemovePowerToTakeAway() { - grant("i_group_needed_member_add_power", 50); - grant("i_group_needed_member_remove_power", 20); + grant("i_group_member_add_power", 50); + grant("i_group_member_remove_power", 20); assertTrue(model.canToggleGroup(group(50, 0), false)); assertFalse(model.canToggleGroup(group(51, 0), false)); @@ -37,8 +37,8 @@ class ServerModelRulesTest { @Test void unlimitedPowerIsMinusOneOnEitherSide() { - grant("i_group_needed_member_add_power", 75); - grant("i_group_needed_member_remove_power", -1); + grant("i_group_member_add_power", 75); + grant("i_group_member_remove_power", -1); assertFalse(model.canToggleGroup(group(-1, 0), false), "a group needing unlimited power"); assertTrue(model.canToggleGroup(group(75, 1000), true), "unlimited remove power");