fix some room permission nonsense
This commit is contained in:
+47
-6
@@ -1946,13 +1946,31 @@ class CommunityBot(Plugin):
|
|||||||
|
|
||||||
# Get power levels from parent room if not provided
|
# Get power levels from parent room if not provided
|
||||||
if not power_level_override and parent_room:
|
if not power_level_override and parent_room:
|
||||||
power_levels = await self.client.get_state_event(
|
# Get parent room power levels to extract user power levels
|
||||||
|
parent_power_levels = await self.client.get_state_event(
|
||||||
parent_room, EventType.ROOM_POWER_LEVELS
|
parent_room, EventType.ROOM_POWER_LEVELS
|
||||||
)
|
)
|
||||||
user_power_levels = power_levels.users
|
|
||||||
# ensure bot has highest power
|
# Create new power levels with server defaults, not copying all permissions from space
|
||||||
|
power_levels = PowerLevelStateEventContent()
|
||||||
|
|
||||||
|
# Copy only user power levels from parent space, not the entire permission set
|
||||||
|
if parent_power_levels.users:
|
||||||
|
user_power_levels = parent_power_levels.users.copy()
|
||||||
|
# Ensure bot has highest power
|
||||||
user_power_levels[self.client.mxid] = 1000
|
user_power_levels[self.client.mxid] = 1000
|
||||||
power_levels.users = user_power_levels
|
power_levels.users = user_power_levels
|
||||||
|
else:
|
||||||
|
power_levels.users = {
|
||||||
|
self.client.mxid: 1000, # Bot gets highest power
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set explicit config values
|
||||||
|
power_levels.invite = self.config["invite_power_level"]
|
||||||
|
|
||||||
|
# For other permissions, let the server use its defaults instead of copying from space
|
||||||
|
# This prevents issues like only admins being able to post messages
|
||||||
|
self.log.info(f"Using user power levels from parent space but server defaults for other permissions")
|
||||||
power_level_override = power_levels
|
power_level_override = power_levels
|
||||||
elif not power_level_override:
|
elif not power_level_override:
|
||||||
# If no parent room and no override provided, create default power levels
|
# If no parent room and no override provided, create default power levels
|
||||||
@@ -2326,9 +2344,32 @@ class CommunityBot(Plugin):
|
|||||||
# For spaces, we need to pass power_level_override to ensure proper creation
|
# For spaces, we need to pass power_level_override to ensure proper creation
|
||||||
# Get power levels from the old space to use as a template
|
# Get power levels from the old space to use as a template
|
||||||
try:
|
try:
|
||||||
power_level_override = await self.client.get_state_event(room_id, EventType.ROOM_POWER_LEVELS)
|
old_power_levels = await self.client.get_state_event(room_id, EventType.ROOM_POWER_LEVELS)
|
||||||
self.log.info(f"Using power levels from old space for new space creation")
|
self.log.info(f"Using user power levels from old space for new space creation")
|
||||||
# remove the bot's explicit power level
|
|
||||||
|
# Create new power levels with server defaults, not copying all permissions from old space
|
||||||
|
power_levels = PowerLevelStateEventContent()
|
||||||
|
|
||||||
|
# Copy only user power levels from old space, not the entire permission set
|
||||||
|
if old_power_levels.users:
|
||||||
|
user_power_levels = old_power_levels.users.copy()
|
||||||
|
# Ensure bot has highest power
|
||||||
|
user_power_levels[self.client.mxid] = 1000
|
||||||
|
power_levels.users = user_power_levels
|
||||||
|
else:
|
||||||
|
power_levels.users = {
|
||||||
|
self.client.mxid: 1000, # Bot gets highest power
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set explicit config values
|
||||||
|
power_levels.invite = self.config["invite_power_level"]
|
||||||
|
|
||||||
|
# For other permissions, let the server use its defaults instead of copying from old space
|
||||||
|
# This prevents issues like only admins being able to post messages
|
||||||
|
self.log.info(f"Using user power levels from old space but server defaults for other permissions")
|
||||||
|
power_level_override = power_levels
|
||||||
|
|
||||||
|
# remove the bot's explicit power level for modern room versions
|
||||||
# since creators have unlimited power in modern rooms
|
# since creators have unlimited power in modern rooms
|
||||||
if self.is_modern_room_version(self.config["room_version"]):
|
if self.is_modern_room_version(self.config["room_version"]):
|
||||||
if power_level_override.users:
|
if power_level_override.users:
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
maubot: 0.1.0
|
maubot: 0.1.0
|
||||||
id: org.jobmachine.communitybot
|
id: org.jobmachine.communitybot
|
||||||
version: 0.2.10
|
version: 0.2.12
|
||||||
license: MIT
|
license: MIT
|
||||||
modules:
|
modules:
|
||||||
- community
|
- community
|
||||||
|
|||||||
Reference in New Issue
Block a user