From 3d4578a8d7e30fe93c293f6f09be714186e4df67 Mon Sep 17 00:00:00 2001 From: William Kray Date: Sun, 29 Jun 2025 22:24:07 -0700 Subject: [PATCH] fix line breaks in doctor reports --- community/bot.py | 132 +++++++++++++++++++++++------------------------ 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/community/bot.py b/community/bot.py index 6bc221a..003492d 100644 --- a/community/bot.py +++ b/community/bot.py @@ -2282,14 +2282,14 @@ class CommunityBot(Plugin): ) error_list.append(roomname or room) - results = "Power levels synced from parent room.\n\n" + results = "Power levels synced from parent room.

" if success_list: - results += f"Successfully updated rooms:\n{', '.join(success_list)}\n\n" + results += f"Successfully updated rooms:
{', '.join(success_list)}

" if skipped_list: - results += f"Skipped rooms due to verification settings:\n{', '.join(skipped_list)}\n\n" + results += f"Skipped rooms due to verification settings:
{', '.join(skipped_list)}

" if error_list: results += ( - f"Failed to update rooms:\n{', '.join(error_list)}" + f"Failed to update rooms:
{', '.join(error_list)}" ) await evt.respond(results, allow_html=True, edits=msg) @@ -2606,13 +2606,13 @@ class CommunityBot(Plugin): # Check if default encryption is enabled and add warning for waiting room warning_msg = "" if self.config.get("encrypt", False): - warning_msg = "\n\nāš ļø **Note: Waiting room created without encryption (as it is a public room)**" + warning_msg = "

āš ļø **Note: Waiting room created without encryption (as it is a public room)**" await evt.respond( - f"Community space initialized successfully!\n\n" - f"Community Slug: {self.config['community_slug']}\n" - f"Space: {space_alias}\n" - f"Moderators Room: {mod_room_alias}\n" + f"Community space initialized successfully!

" + f"Community Slug: {self.config['community_slug']}
" + f"Space: {space_alias}
" + f"Moderators Room: {mod_room_alias}
" f"Waiting Room: {waiting_room_alias}{warning_msg}", edits=msg, allow_html=True @@ -2780,24 +2780,24 @@ class CommunityBot(Plugin): report["issues"].append(f"Failed to check room {room_id}: {e}") # Generate concise summary response - response = "

šŸ” Bot Permission Diagnostic Summary

\n\n" + response = "

šŸ” Bot Permission Diagnostic Summary



" # Space summary - only show if there are issues space_has_issues = False if "error" in report["space"]: space_has_issues = True - response += "

šŸ“‹ Parent Space

\n" - response += f"āŒ Error: {report['space']['error']}\n\n" + response += "

šŸ“‹ Parent Space


" + response += f"āŒ Error: {report['space']['error']}

" elif report["space"].get("bot_power_level", 0) < 100 or report["space"].get("users_higher") or report["space"].get("users_equal"): space_has_issues = True - response += "

šŸ“‹ Parent Space

\n" + response += "

šŸ“‹ Parent Space


" space_status = "āœ…" if report["space"]["has_admin"] else "āŒ" - response += f"{space_status} Administrative privileges: {'Yes' if report['space']['has_admin'] else 'No'} (level: {report['space']['bot_power_level']})\n" + response += f"{space_status} Administrative privileges: {'Yes' if report['space']['has_admin'] else 'No'} (level: {report['space']['bot_power_level']})
" if report["space"]["users_higher"]: - response += f"āš ļø Users with higher power: {', '.join([f'{u['user']} ({u['level']})' for u in report['space']['users_higher']])}\n" + response += f"āš ļø Users with higher power: {', '.join([f'{u['user']} ({u['level']})' for u in report['space']['users_higher']])}
" if report["space"]["users_equal"]: - response += f"āš ļø Users with equal power: {', '.join([f'{u['user']} ({u['level']})' for u in report['space']['users_equal']])}\n" - response += "\n" + response += f"āš ļø Users with equal power: {', '.join([f'{u['user']} ({u['level']})' for u in report['space']['users_equal']])}
" + response += "
" # Rooms summary - only show problematic rooms with room IDs problematic_rooms = [] @@ -2831,39 +2831,39 @@ class CommunityBot(Plugin): # Only show rooms section if there are problematic rooms if problematic_rooms: - response += f"

šŸ  Problematic Rooms ({len(problematic_rooms)} of {len(report['rooms'])} total)

\n" - response += "Use !community doctor <room_id> for detailed analysis of specific rooms\n\n" + response += f"

šŸ  Problematic Rooms ({len(problematic_rooms)} of {len(report['rooms'])} total)


" + response += "Use !community doctor <room_id> for detailed analysis of specific rooms

" for room_info in problematic_rooms: - response += f"{room_info}\n" - response += "\n" + response += f"{room_info}
" + response += "
" # Summary - always show - response += f"

šŸ“Š Summary

\n" - response += f"• Parent space: {'āœ… Admin' if report['space'].get('has_admin', False) else 'āŒ No admin'}\n" - response += f"• Rooms with admin: {admin_rooms}\n" - response += f"• Rooms without admin: {non_admin_rooms}\n" + response += f"

šŸ“Š Summary


" + response += f"• Parent space: {'āœ… Admin' if report['space'].get('has_admin', False) else 'āŒ No admin'}
" + response += f"• Rooms with admin: {admin_rooms}
" + response += f"• Rooms without admin: {non_admin_rooms}
" if not_in_room_count > 0: - response += f"• Rooms bot not in: {not_in_room_count}\n" + response += f"• Rooms bot not in: {not_in_room_count}
" if error_rooms > 0: - response += f"• Rooms with errors: {error_rooms}\n" - response += "\n" + response += f"• Rooms with errors: {error_rooms}
" + response += "
" # Issues and warnings - only show if they exist if report["issues"]: - response += f"

🚨 Critical Issues

\n" + response += f"

🚨 Critical Issues


" for issue in report["issues"]: - response += f"• {issue}\n" - response += "\n" + response += f"• {issue}
" + response += "
" if report["warnings"]: - response += f"

āš ļø Warnings

\n" + response += f"

āš ļø Warnings


" for warning in report["warnings"]: - response += f"• {warning}\n" - response += "\n" + response += f"• {warning}
" + response += "
" if not report["issues"] and not report["warnings"] and not space_has_issues and not problematic_rooms: - response += f"

āœ… All Clear

\n" - response += "No permission issues detected. The bot should be able to manage all rooms and users effectively.\n" + response += f"

āœ… All Clear


" + response += "No permission issues detected. The bot should be able to manage all rooms and users effectively.
" # Try to send the response, and if it's too large, break it up try: @@ -3002,15 +3002,15 @@ class CommunityBot(Plugin): except: pass - response = f"

šŸ” Detailed Analysis: {room_name}

\n" - response += f"Room ID: {room_id}\n\n" + response = f"

šŸ” Detailed Analysis: {room_name}


" + response += f"Room ID: {room_id}

" # Check if bot is in the room try: await self.client.get_state_event(room_id, EventType.ROOM_MEMBER, self.client.mxid) - response += "āœ… Bot membership: Bot is a member of this room\n\n" + response += "āœ… Bot membership: Bot is a member of this room

" except Exception: - response += "āŒ Bot membership: Bot is not a member of this room\n\n" + response += "āŒ Bot membership: Bot is not a member of this room

" await evt.respond(response, edits=msg, allow_html=True) return @@ -3019,14 +3019,14 @@ class CommunityBot(Plugin): power_levels = await self.client.get_state_event(room_id, EventType.ROOM_POWER_LEVELS) bot_level = power_levels.get_user_level(self.client.mxid) - response += f"

šŸ“Š Power Level Analysis

\n" - response += f"• Bot power level: {bot_level}\n" - response += f"• Administrative privileges: {'āœ… Yes' if bot_level >= 100 else 'āŒ No'}\n" - response += f"• Default user level: {power_levels.users_default}\n" - response += f"• Invite level: {power_levels.invite}\n" - response += f"• Kick level: {power_levels.kick}\n" - response += f"• Ban level: {power_levels.ban}\n" - response += f"• Redact level: {power_levels.redact}\n\n" + response += f"

šŸ“Š Power Level Analysis


" + response += f"• Bot power level: {bot_level}
" + response += f"• Administrative privileges: {'āœ… Yes' if bot_level >= 100 else 'āŒ No'}
" + response += f"• Default user level: {power_levels.users_default}
" + response += f"• Invite level: {power_levels.invite}
" + response += f"• Kick level: {power_levels.kick}
" + response += f"• Ban level: {power_levels.ban}
" + response += f"• Redact level: {power_levels.redact}

" # Check for users with equal or higher power level users_higher = [] @@ -3040,22 +3040,22 @@ class CommunityBot(Plugin): users_higher.append({"user": user, "level": level}) if users_higher: - response += f"

āš ļø Users with Higher Power Level

\n" + response += f"

āš ļø Users with Higher Power Level


" for user_info in users_higher: - response += f"• {user_info['user']} (level: {user_info['level']})\n" - response += "\n" + response += f"• {user_info['user']} (level: {user_info['level']})
" + response += "
" if users_equal: - response += f"

āš ļø Users with Equal Power Level

\n" + response += f"

āš ļø Users with Equal Power Level


" for user_info in users_equal: - response += f"• {user_info['user']} (level: {user_info['level']})\n" - response += "\n" + response += f"• {user_info['user']} (level: {user_info['level']})
" + response += "
" if not users_higher and not users_equal: - response += "āœ… No power level conflicts detected\n\n" + response += "āœ… No power level conflicts detected

" # Check specific permissions - response += f"

šŸ” Permission Analysis

\n" + response += f"

šŸ” Permission Analysis


" # Get required levels for various actions events_default = power_levels.events_default @@ -3075,38 +3075,38 @@ class CommunityBot(Plugin): for perm_name, required_level in permissions: has_perm = bot_level >= required_level status = "āœ…" if has_perm else "āŒ" - response += f"• {status} {perm_name}: {'Yes' if has_perm else 'No'} (required: {required_level})\n" + response += f"• {status} {perm_name}: {'Yes' if has_perm else 'No'} (required: {required_level})
" except Exception as e: - response += f"āŒ Error getting power levels: {e}\n\n" + response += f"āŒ Error getting power levels: {e}

" # Check room state try: - response += f"

šŸ  Room State

\n" + response += f"

šŸ  Room State


" # Check join rules try: join_rules = await self.client.get_state_event(room_id, EventType.ROOM_JOIN_RULES) - response += f"• Join rule: {join_rules.join_rule}\n" + response += f"• Join rule: {join_rules.join_rule}
" except: - response += "• Join rule: Could not determine\n" + response += "• Join rule: Could not determine
" # Check encryption try: encryption = await self.client.get_state_event(room_id, EventType.ROOM_ENCRYPTION) - response += f"• Encryption: āœ… Enabled ({encryption.algorithm})\n" + response += f"• Encryption: āœ… Enabled ({encryption.algorithm})
" except: - response += "• Encryption: āŒ Not enabled\n" + response += "• Encryption: āŒ Not enabled
" # Check space parent try: space_parent = await self.client.get_state_event(room_id, EventType.SPACE_PARENT) - response += f"• Space parent: āœ… {space_parent.state_key}\n" + response += f"• Space parent: āœ… {space_parent.state_key}
" except: - response += "• Space parent: āŒ Not set\n" + response += "• Space parent: āŒ Not set
" except Exception as e: - response += f"āŒ Error checking room state: {e}\n" + response += f"āŒ Error checking room state: {e}
" await evt.respond(response, edits=msg, allow_html=True)