File size: 1,741 Bytes
8ede856
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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