more refactoring

This commit is contained in:
William Kray
2025-09-09 14:49:45 -07:00
parent 6582112dfb
commit 87e02b7ea6
28 changed files with 4664 additions and 894 deletions
+51
View File
@@ -0,0 +1,51 @@
"""Decorators for common bot operations."""
import functools
from typing import Callable, Any, Optional
from mautrix.types import UserID, MessageEvent
def require_permission(min_level: int = 50, room_id: Optional[str] = None):
"""Decorator to require user permission for command execution.
Args:
min_level: Minimum required power level (default 50 for moderator)
room_id: Room ID to check permissions in (None for parent room)
"""
def decorator(func: Callable) -> Callable:
@functools.wraps(func)
async def wrapper(self, evt: MessageEvent, *args, **kwargs) -> Any:
if not await self.user_permitted(evt.sender, min_level, room_id):
await evt.reply("You don't have permission to use this command")
return
return await func(self, evt, *args, **kwargs)
return wrapper
return decorator
def require_parent_room(func: Callable) -> Callable:
"""Decorator to require parent room to be configured."""
@functools.wraps(func)
async def wrapper(self, evt: MessageEvent, *args, **kwargs) -> Any:
if not await self.check_parent_room(evt):
return
return await func(self, evt, *args, **kwargs)
return wrapper
def handle_errors(error_message: str = "An error occurred"):
"""Decorator to handle common errors in command execution.
Args:
error_message: Default error message to show to user
"""
def decorator(func: Callable) -> Callable:
@functools.wraps(func)
async def wrapper(self, evt: MessageEvent, *args, **kwargs) -> Any:
try:
return await func(self, evt, *args, **kwargs)
except Exception as e:
self.log.error(f"Error in {func.__name__}: {e}")
await evt.reply(f"{error_message}: {e}")
return wrapper
return decorator