formatting
This commit is contained in:
@@ -5,219 +5,214 @@ from typing import List, Dict, Any, Optional
|
||||
|
||||
class ConfigManager:
|
||||
"""Centralized configuration management for the community bot."""
|
||||
|
||||
|
||||
def __init__(self, config: Dict[str, Any]):
|
||||
"""Initialize with bot configuration.
|
||||
|
||||
|
||||
Args:
|
||||
config: Bot configuration dictionary
|
||||
"""
|
||||
self.config = config
|
||||
|
||||
|
||||
def is_tracking_enabled(self) -> bool:
|
||||
"""Check if user tracking is enabled.
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if tracking is enabled
|
||||
"""
|
||||
track_users = self.config.get("track_users", [])
|
||||
|
||||
|
||||
# Handle legacy boolean configuration
|
||||
if isinstance(track_users, bool):
|
||||
return track_users
|
||||
|
||||
|
||||
# Handle new list configuration
|
||||
return isinstance(track_users, list) and len(track_users) > 0
|
||||
|
||||
|
||||
def is_message_tracking_enabled(self) -> bool:
|
||||
"""Check if message tracking is enabled.
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if message tracking is enabled
|
||||
"""
|
||||
track_users = self.config.get("track_users", [])
|
||||
|
||||
|
||||
# Handle legacy boolean configuration - if True, enable both messages and reactions
|
||||
if isinstance(track_users, bool):
|
||||
return track_users
|
||||
|
||||
|
||||
# Handle new list configuration
|
||||
return isinstance(track_users, list) and "messages" in track_users
|
||||
|
||||
|
||||
def is_reaction_tracking_enabled(self) -> bool:
|
||||
"""Check if reaction tracking is enabled.
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if reaction tracking is enabled
|
||||
"""
|
||||
track_users = self.config.get("track_users", [])
|
||||
|
||||
|
||||
# Handle legacy boolean configuration - if True, enable both messages and reactions
|
||||
if isinstance(track_users, bool):
|
||||
return track_users
|
||||
|
||||
|
||||
# Handle new list configuration
|
||||
return isinstance(track_users, list) and "reactions" in track_users
|
||||
|
||||
|
||||
def is_verification_enabled(self) -> bool:
|
||||
"""Check if verification is enabled.
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if verification is enabled
|
||||
"""
|
||||
return self.config.get("verification_enabled", False)
|
||||
|
||||
|
||||
def is_proactive_banning_enabled(self) -> bool:
|
||||
"""Check if proactive banning is enabled.
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if proactive banning is enabled
|
||||
"""
|
||||
return self.config.get("proactive_banning", False)
|
||||
|
||||
|
||||
def is_encryption_enabled(self) -> bool:
|
||||
"""Check if encryption is enabled by default.
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if encryption is enabled
|
||||
"""
|
||||
return self.config.get("encrypt", False)
|
||||
|
||||
|
||||
def get_room_version(self) -> str:
|
||||
"""Get the configured room version.
|
||||
|
||||
|
||||
Returns:
|
||||
str: Room version string
|
||||
"""
|
||||
return self.config.get("room_version", "1")
|
||||
|
||||
|
||||
def get_community_slug(self) -> Optional[str]:
|
||||
"""Get the community slug.
|
||||
|
||||
|
||||
Returns:
|
||||
str: Community slug or None if not configured
|
||||
"""
|
||||
return self.config.get("community_slug")
|
||||
|
||||
|
||||
def get_parent_room(self) -> Optional[str]:
|
||||
"""Get the parent room ID.
|
||||
|
||||
|
||||
Returns:
|
||||
str: Parent room ID or None if not configured
|
||||
"""
|
||||
return self.config.get("parent_room")
|
||||
|
||||
|
||||
def get_invitees(self) -> List[str]:
|
||||
"""Get the list of users to invite to new rooms.
|
||||
|
||||
|
||||
Returns:
|
||||
List[str]: List of user IDs to invite
|
||||
"""
|
||||
return self.config.get("invitees", [])
|
||||
|
||||
|
||||
def get_invite_power_level(self) -> int:
|
||||
"""Get the power level required to invite users.
|
||||
|
||||
|
||||
Returns:
|
||||
int: Power level for inviting users
|
||||
"""
|
||||
return self.config.get("invite_power_level", 50)
|
||||
|
||||
|
||||
def get_sleep_duration(self) -> float:
|
||||
"""Get the sleep duration between operations.
|
||||
|
||||
|
||||
Returns:
|
||||
float: Sleep duration in seconds
|
||||
"""
|
||||
return self.config.get("sleep", 1.0)
|
||||
|
||||
|
||||
def get_welcome_sleep_duration(self) -> float:
|
||||
"""Get the sleep duration for welcome messages.
|
||||
|
||||
|
||||
Returns:
|
||||
float: Welcome sleep duration in seconds
|
||||
"""
|
||||
return self.config.get("welcome_sleep", 2.0)
|
||||
|
||||
|
||||
def get_warn_threshold_days(self) -> int:
|
||||
"""Get the warning threshold for inactive users.
|
||||
|
||||
|
||||
Returns:
|
||||
int: Number of days before warning
|
||||
"""
|
||||
return self.config.get("warn_threshold_days", 30)
|
||||
|
||||
|
||||
def get_kick_threshold_days(self) -> int:
|
||||
"""Get the kick threshold for inactive users.
|
||||
|
||||
|
||||
Returns:
|
||||
int: Number of days before kicking
|
||||
"""
|
||||
return self.config.get("kick_threshold_days", 60)
|
||||
|
||||
|
||||
def get_verification_phrase(self) -> str:
|
||||
"""Get the verification phrase.
|
||||
|
||||
|
||||
Returns:
|
||||
str: Verification phrase
|
||||
"""
|
||||
return self.config.get("verification_phrase", "I agree to the rules")
|
||||
|
||||
|
||||
def get_verification_attempts(self) -> int:
|
||||
"""Get the maximum verification attempts.
|
||||
|
||||
|
||||
Returns:
|
||||
int: Maximum verification attempts
|
||||
"""
|
||||
return self.config.get("verification_attempts", 3)
|
||||
|
||||
|
||||
def get_verification_timeout(self) -> int:
|
||||
"""Get the verification timeout in seconds.
|
||||
|
||||
|
||||
Returns:
|
||||
int: Verification timeout in seconds
|
||||
"""
|
||||
return self.config.get("verification_timeout", 300)
|
||||
|
||||
|
||||
|
||||
def get_banlist_rooms(self) -> List[str]:
|
||||
"""Get the list of banlist rooms.
|
||||
|
||||
|
||||
Returns:
|
||||
List[str]: List of banlist room IDs or aliases
|
||||
"""
|
||||
return self.config.get("banlist_rooms", [])
|
||||
|
||||
|
||||
def get_redaction_rooms(self) -> List[str]:
|
||||
"""Get the list of rooms for redaction.
|
||||
|
||||
|
||||
Returns:
|
||||
List[str]: List of room IDs for redaction
|
||||
"""
|
||||
return self.config.get("redaction_rooms", [])
|
||||
|
||||
|
||||
def validate_required_configs(self) -> List[str]:
|
||||
"""Validate that all required configurations are present.
|
||||
|
||||
|
||||
Returns:
|
||||
List[str]: List of missing required configuration keys
|
||||
"""
|
||||
required_configs = [
|
||||
"parent_room",
|
||||
"room_version",
|
||||
"community_slug"
|
||||
]
|
||||
|
||||
required_configs = ["parent_room", "room_version", "community_slug"]
|
||||
|
||||
missing = []
|
||||
for config_key in required_configs:
|
||||
if not self.config.get(config_key):
|
||||
missing.append(config_key)
|
||||
|
||||
|
||||
return missing
|
||||
|
||||
|
||||
def is_modern_room_version(self) -> bool:
|
||||
"""Check if the configured room version is modern (12+).
|
||||
|
||||
|
||||
Returns:
|
||||
bool: True if room version is 12 or higher
|
||||
"""
|
||||
@@ -226,10 +221,10 @@ class ConfigManager:
|
||||
return version >= 12
|
||||
except (ValueError, TypeError):
|
||||
return False
|
||||
|
||||
|
||||
def get_room_creation_settings(self) -> Dict[str, Any]:
|
||||
"""Get settings specific to room creation.
|
||||
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Room creation settings
|
||||
"""
|
||||
@@ -239,12 +234,12 @@ class ConfigManager:
|
||||
"invitees": self.get_invitees(),
|
||||
"invite_power_level": self.get_invite_power_level(),
|
||||
"encrypt": self.is_encryption_enabled(),
|
||||
"parent_room": self.get_parent_room()
|
||||
"parent_room": self.get_parent_room(),
|
||||
}
|
||||
|
||||
|
||||
def get_tracking_settings(self) -> Dict[str, Any]:
|
||||
"""Get settings specific to user tracking.
|
||||
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Tracking settings
|
||||
"""
|
||||
@@ -253,12 +248,12 @@ class ConfigManager:
|
||||
"track_messages": self.is_message_tracking_enabled(),
|
||||
"track_reactions": self.is_reaction_tracking_enabled(),
|
||||
"warn_threshold_days": self.get_warn_threshold_days(),
|
||||
"kick_threshold_days": self.get_kick_threshold_days()
|
||||
"kick_threshold_days": self.get_kick_threshold_days(),
|
||||
}
|
||||
|
||||
|
||||
def get_verification_settings(self) -> Dict[str, Any]:
|
||||
"""Get settings specific to verification.
|
||||
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Verification settings
|
||||
"""
|
||||
@@ -266,5 +261,5 @@ class ConfigManager:
|
||||
"verification_enabled": self.is_verification_enabled(),
|
||||
"verification_phrase": self.get_verification_phrase(),
|
||||
"verification_attempts": self.get_verification_attempts(),
|
||||
"verification_timeout": self.get_verification_timeout()
|
||||
"verification_timeout": self.get_verification_timeout(),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user