first commit

This commit is contained in:
Prometheus-first
2026-10-15 18:27:46 +08:00
commit 68eb19ea35
88 changed files with 10319 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
"""文本发送前的可配置随机等待;仅控制节奏,不保证账号风控结果。"""
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))