Files
helper/wxbot_framework/pacing.py
T
2026-10-15 18:27:46 +08:00

43 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""文本发送前的可配置随机等待;仅控制节奏,不保证账号风控结果。"""
from __future__ import annotations
import math
import random
from dataclasses import dataclass
@dataclass(frozen=True)
class TextSendDelay:
enabled: bool = True
characters_per_group: int = 10
min_seconds: float = 0.1
max_seconds: float = 0.3
@classmethod
def from_config(cls, options=None):
if options is None:
options = {}
if not isinstance(options, dict):
raise ValueError("text_send_delay 必须是 JSON 对象")
result = cls(enabled=options.get("enabled", True),
characters_per_group=options.get("characters_per_group", 10),
min_seconds=options.get("min_seconds", 0.1),
max_seconds=options.get("max_seconds", 0.3))
if type(result.enabled) is not bool:
raise ValueError("text_send_delay.enabled 必须是布尔值")
if type(result.characters_per_group) is not int or not 1 <= result.characters_per_group <= 10000:
raise ValueError("text_send_delay.characters_per_group 应为 1–10000 的整数")
for value in (result.min_seconds, result.max_seconds):
if type(value) not in (int, float) or not math.isfinite(value) or not 0 <= value <= 60:
raise ValueError("text_send_delay 的等待秒数应为 0–60 的有限数值")
if result.min_seconds > result.max_seconds:
raise ValueError("text_send_delay.min_seconds 不能大于 max_seconds")
return result
def seconds_for(self, text):
if not self.enabled:
return 0.0
# 按 Unicode 字符计数;不足一组向上取整,每组独立抽取等待时间。
groups = (len(text) + self.characters_per_group - 1) // self.characters_per_group
return sum(random.uniform(self.min_seconds, self.max_seconds) for _ in range(groups))