Release 0.9.0

This commit is contained in:
2025-11-21 07:26:02 +01:00
committed by ecv
commit 472f0812e7
240 changed files with 20033 additions and 0 deletions

98
bot/constants.py Normal file
View File

@@ -0,0 +1,98 @@
"""
Constants for chrani-bot-tng
This module contains all constants used throughout the bot to avoid
magic numbers and improve maintainability.
"""
# =============================================================================
# Permission Levels
# =============================================================================
# Permission levels for player access control
PERMISSION_LEVEL_ADMIN = 0 # Full access
PERMISSION_LEVEL_MODERATOR = 1 # Moderate players
PERMISSION_LEVEL_BUILDER = 2 # Build permissions
PERMISSION_LEVEL_PLAYER = 4 # Regular player
PERMISSION_LEVEL_DEFAULT = 2000 # Default for new/unknown players
# =============================================================================
# Telnet Command Timeouts (seconds)
# =============================================================================
TELNET_TIMEOUT_VERY_SHORT = 1.5 # Quick polls
TELNET_TIMEOUT_SHORT = 2 # Standard commands (lp, gettime)
TELNET_TIMEOUT_NORMAL = 3 # Most commands (listents)
TELNET_TIMEOUT_EXTENDED = 8 # Complex commands (manage entities)
TELNET_TIMEOUT_RECONNECT = 10 # Wait before reconnect attempt
# =============================================================================
# Telnet Buffer Limits
# =============================================================================
TELNET_BUFFER_MAX_SIZE = 12288 # Maximum telnet buffer size (bytes)
TELNET_LINES_MAX_HISTORY = 150 # Maximum telnet lines to keep in history
# =============================================================================
# Server Settings
# =============================================================================
DEFAULT_SERVER_PORT = 5000 # Default webserver port
DEFAULT_OBSERVER_INTERVAL = 0.1 # Default module polling interval (seconds)
# =============================================================================
# WebSocket Settings
# =============================================================================
WEBSOCKET_PING_TIMEOUT = 15 # WebSocket ping timeout (seconds)
WEBSOCKET_PING_INTERVAL = 5 # WebSocket ping interval (seconds)
# =============================================================================
# Thread Pool Settings
# =============================================================================
CALLBACK_THREAD_POOL_SIZE = 10 # Max concurrent callback threads
# =============================================================================
# String/Token Generation
# =============================================================================
DEFAULT_TOKEN_LENGTH = 20 # Default length for random tokens
# =============================================================================
# Helper Functions
# =============================================================================
def get_permission_level_name(level: int) -> str:
"""
Get human-readable name for a permission level.
Args:
level: Permission level integer
Returns:
String name of the permission level
"""
permission_names = {
PERMISSION_LEVEL_ADMIN: "Admin",
PERMISSION_LEVEL_MODERATOR: "Moderator",
PERMISSION_LEVEL_BUILDER: "Builder",
PERMISSION_LEVEL_PLAYER: "Player",
PERMISSION_LEVEL_DEFAULT: "Default/Unknown"
}
return permission_names.get(level, f"Custom ({level})")
def is_admin(permission_level: int) -> bool:
"""Check if permission level is admin."""
return permission_level == PERMISSION_LEVEL_ADMIN
def is_moderator_or_higher(permission_level: int) -> bool:
"""Check if permission level is moderator or higher (lower number = higher privilege)."""
return permission_level <= PERMISSION_LEVEL_MODERATOR
def is_builder_or_higher(permission_level: int) -> bool:
"""Check if permission level is builder or higher."""
return permission_level <= PERMISSION_LEVEL_BUILDER