services: adbot: build: . restart: unless-stopped ports: - "3000:3000" env_file: - .env environment: # 关键变量从 .env 读取;下面给出安全默认值兜底(可在 .env 里覆盖)。 - BOT_ADDR=${BOT_ADDR:-:3000} - BOT_TOKEN=${BOT_TOKEN:-} - BOT_CHATS=${BOT_CHATS:-} - BOT_LEAVE_OTHER_CHATS=${BOT_LEAVE_OTHER_CHATS:-true} - BOT_LEAVE_NOTICE=${BOT_LEAVE_NOTICE:-true} - BOT_ADMIN_USERS=${BOT_ADMIN_USERS:-} - BOT_DRY_RUN=${BOT_DRY_RUN:-false} - BOT_ACTION=${BOT_ACTION:-kick} - BOT_IGNORE_ADMINS=${BOT_IGNORE_ADMINS:-true} - BOT_DELETE_JOIN_MSG=${BOT_DELETE_JOIN_MSG:-false} - BOT_LOG_CHAT=${BOT_LOG_CHAT:-0} - BOT_MSG_TTL=${BOT_MSG_TTL:-60s} - BOT_STORE=${BOT_STORE:-memory} - BOT_REDIS_URL=${BOT_REDIS_URL:-} - BOT_REDIS_INSECURE_TLS=${BOT_REDIS_INSECURE_TLS:-false} - BOT_DB_PATH=${BOT_DB_PATH:-data/adbot.db} - BOT_DB_FSYNC=${BOT_DB_FSYNC:-false} - BOT_RETENTION=${BOT_RETENTION:-72h} - BOT_RETENTION_SUSPECT=${BOT_RETENTION_SUSPECT:-} - BOT_RETENTION_SIGNATURE=${BOT_RETENTION_SIGNATURE:-} - BOT_RETENTION_SLIDING=${BOT_RETENTION_SLIDING:-true} - BOT_SWEEP_INTERVAL=${BOT_SWEEP_INTERVAL:-10m} - BOT_MAX_SUSPECTS=${BOT_MAX_SUSPECTS:-50000} - BOT_MAX_SIGNATURES=${BOT_MAX_SIGNATURES:-50000} - BOT_AI_BASE_URL=${BOT_AI_BASE_URL:-} - BOT_AI_API_KEY=${BOT_AI_API_KEY:-} - BOT_AI_MODELS=${BOT_AI_MODELS:-mimo-v2.6-pro,mimo-v2.6-flash,mimo-v2.6-pro-ultraspeed-studio} - BOT_AI_MODEL=${BOT_AI_MODEL:-mimo-v2.6-pro-ultraspeed-studio} - BOT_AI_TIMEOUT=${BOT_AI_TIMEOUT:-90s} - BOT_AI_JUDGE_TIMEOUT=${BOT_AI_JUDGE_TIMEOUT:-150s} - BOT_AI_RETRY_INTERVAL=${BOT_AI_RETRY_INTERVAL:-10s} - BOT_AI_RETRY_MAX_ATTEMPTS=${BOT_AI_RETRY_MAX_ATTEMPTS:-5} - BOT_AI_RETRY_QUEUE=${BOT_AI_RETRY_QUEUE:-500} - BOT_AI_MIN_CONFIDENCE=${BOT_AI_MIN_CONFIDENCE:-0.85} - BOT_AI_MIN_PUNISH_SCORE=${BOT_AI_MIN_PUNISH_SCORE:-85} - BOT_AI_VERIFY_VOTES=${BOT_AI_VERIFY_VOTES:-3} - BOT_AI_VERIFY_MODELS=${BOT_AI_VERIFY_MODELS:-mimo-v2.6-flash} - BOT_AI_VERIFY_MAJORITY=${BOT_AI_VERIFY_MAJORITY:-2} - BOT_AI_VERIFY_TIMEOUT=${BOT_AI_VERIFY_TIMEOUT:-45s} - BOT_AI_REASONING_EFFORT=${BOT_AI_REASONING_EFFORT:-none} - BOT_AI_PROMPT_FILE=${BOT_AI_PROMPT_FILE:-} - BOT_AI_FALLBACK_BASE_URL=${BOT_AI_FALLBACK_BASE_URL:-} - BOT_AI_FALLBACK_API_KEY=${BOT_AI_FALLBACK_API_KEY:-} - BOT_AI_FALLBACK_MODELS=${BOT_AI_FALLBACK_MODELS:-} - BOT_SIMHASH_DISTANCE=${BOT_SIMHASH_DISTANCE:-3} - BOT_LOCAL_RULES_ENABLED=${BOT_LOCAL_RULES_ENABLED:-true} - BOT_LOCAL_RULE_THRESHOLD=${BOT_LOCAL_RULE_THRESHOLD:-3} - BOT_LOCAL_KEYWORDS=${BOT_LOCAL_KEYWORDS:-} - BOT_POLL_TIMEOUT=${BOT_POLL_TIMEOUT:-30} - BOT_WORKERS=${BOT_WORKERS:-4} - BOT_LOG_LEVEL=${BOT_LOG_LEVEL:-info} - BOT_LOG_FORMAT=${BOT_LOG_FORMAT:-text} - BOT_NOTIFY_ON_PUNISH=${BOT_NOTIFY_ON_PUNISH:-true} - BOT_NOTIFY_ON_ERROR=${BOT_NOTIFY_ON_ERROR:-true} - BOT_NOTIFY_LEVEL=${BOT_NOTIFY_LEVEL:-error} - BOT_NOTIFY_RATE=${BOT_NOTIFY_RATE:-20} - BOT_NOTIFY_QUEUE=${BOT_NOTIFY_QUEUE:-200} - BOT_NOTIFY_DEDUPE_WINDOW=${BOT_NOTIFY_DEDUPE_WINDOW:-5m} - BOT_NOTIFY_MAX_LEN=${BOT_NOTIFY_MAX_LEN:-1024} - BOT_NOTIFY_TEXT_LEN=${BOT_NOTIFY_TEXT_LEN:-120} - BOT_NOTIFY_INCLUDE_TEXT=${BOT_NOTIFY_INCLUDE_TEXT:-true} - BOT_NOTIFY_DRAIN=${BOT_NOTIFY_DRAIN:-5s} # amend6 A: async judgement pool - BOT_JUDGE_ASYNC=${BOT_JUDGE_ASYNC:-true} - BOT_JUDGE_QUEUE=${BOT_JUDGE_QUEUE:-500} - BOT_AI_CONCURRENCY=${BOT_AI_CONCURRENCY:-8} - BOT_JUDGE_DRAIN=${BOT_JUDGE_DRAIN:-10s} - BOT_UPDATE_WORKERS=${BOT_UPDATE_WORKERS:-16} - BOT_ADMIN_CACHE_TTL=${BOT_ADMIN_CACHE_TTL:-5m} - BOT_ADMIN_CACHE_MAX=${BOT_ADMIN_CACHE_MAX:-5000} # amend7: kick announcement (TTL is the amend8 unified BOT_MSG_TTL) - BOT_ANNOUNCE_KICK=${BOT_ANNOUNCE_KICK:-true} - BOT_ANNOUNCE_TIMEOUT=${BOT_ANNOUNCE_TIMEOUT:-8s} - BOT_ADMIN_TOKEN=${BOT_ADMIN_TOKEN:-} - BOT_VERSION=${BOT_VERSION:-dev} # amend9: 裸号必杀 join rule (premium + English name + no bio + no photo) - BOT_JOIN_NAKED_PREMIUM=${BOT_JOIN_NAKED_PREMIUM:-true} # amend10: join verification (300s sticker gate) - BOT_JOIN_VERIFY=${BOT_JOIN_VERIFY:-true} - BOT_JOIN_VERIFY_TIMEOUT=${BOT_JOIN_VERIFY_TIMEOUT:-300s} - BOT_JOIN_VERIFY_SCAN=${BOT_JOIN_VERIFY_SCAN:-5s} - BOT_JOIN_VERIFY_ACTION=${BOT_JOIN_VERIFY_ACTION:-ban} - BOT_JOIN_VERIFY_MSG=${BOT_JOIN_VERIFY_MSG:-👋 欢迎 %s!请在 300 秒内发一个贴纸,证明你不是机器人,否则会被移出本群~} - BOT_JOIN_VERIFY_MAX_PENDING=${BOT_JOIN_VERIFY_MAX_PENDING:-5000} # amend12: channel-post comment bio screen (关联频道帖子评论审简介 + 防刷) - BOT_COMMENT_BIO_SCREEN=${BOT_COMMENT_BIO_SCREEN:-true} - BOT_COMMENT_BIO_FLASH_TTL=${BOT_COMMENT_BIO_FLASH_TTL:-30m} - BOT_COMMENT_BIO_FLASH_MAX=${BOT_COMMENT_BIO_FLASH_MAX:-5000} # bio-resolve: 简介 @ 解析(送审前抓 @ 目标简介附判) - BOT_BIO_RESOLVE=${BOT_BIO_RESOLVE:-true} - BOT_BIO_RESOLVE_MAX=${BOT_BIO_RESOLVE_MAX:-3} - BOT_BIO_RESOLVE_TIMEOUT=${BOT_BIO_RESOLVE_TIMEOUT:-10s}