from astrbot.core import logger def coerce_int_config( value: object, *, default: int, min_value: int | None = None, field_name: str | None = None, source: str = "config", warn: bool = True, ) -> int: label = f"'{field_name}'" if field_name else "value" if isinstance(value, bool): if warn: logger.warning( "%s %s should be numeric, got boolean. Fallback to %s.", source, label, default, ) parsed = default elif isinstance(value, int): parsed = value elif isinstance(value, str): try: parsed = int(value.strip()) except ValueError: if warn: logger.warning( "%s %s value '%s' is not numeric. Fallback to %s.", source, label, value, default, ) parsed = default else: try: parsed = int(value) except (TypeError, ValueError): if warn: logger.warning( "%s %s has unsupported type %s. Fallback to %s.", source, label, type(value).__name__, default, ) parsed = default if min_value is not None and parsed < min_value: if warn: logger.warning( "%s %s=%s is below minimum %s. Fallback to %s.", source, label, parsed, min_value, min_value, ) parsed = min_value return parsed