# 微信读书阅读机器人配置文件 # https://github.com/funnyzak/weread-bot # 配置优先级:环境变量 > config.yaml > 默认值 # 你可以访问: https://weread.gh.yycc.dev/config-generator.html ,通过图形界面生成配置文件 app: # 启动模式:immediate=立即跑一次退出,scheduled=按 schedule 定时执行,daemon=常驻循环执行 startup_mode: "immediate" # 启动随机延迟(秒),支持区间如 "60-300" 表示 1~5 分钟随机,防检测,建议设大一些 startup_delay: "60-300" # 多用户时最大并发数;1=顺序执行,2+=同时执行多用户(示例:1、2、3) max_concurrent_users: 1 # CURL 配置(支持单用户和多用户模式) curl_config: # 单用户模式:从文件读取 CURL bash 命令。多用户模式下此项无效;若同时配置单用户与多用户,优先多用户。 file_path: "curl_command.txt" # 示例:curl_command.txt、./cookies/me.txt(浏览器复制为 cURL 后保存) # 多用户模式(优先级高于单用户配置) users: # 用户1:必填 name(用于日志与通知区分)、file_path(该用户的 CURL 命令文件路径) - name: "user1" # 示例:任意昵称,如 "张三"、"account_1" file_path: "user1_curl.txt" # 示例:相对或绝对路径,如 "./curl/user1.txt" cookie_refresh_ql: true # 是否对该用户启用 Cookie 刷新时使用 ql 属性(默认 false,遇刷新失败可试 true) # 可选:用户特定的阅读参数覆盖 reading_overrides: target_duration: "45-90" mode: "smart_random" reading_interval: "30-48" - name: "user2" file_path: "user2_curl.txt" # reading_overrides:可选,覆盖全局 reading 配置,未写则用全局值 reading_overrides: target_duration: "30-60" mode: "sequential" reading_interval: "25-35" - name: "user3" file_path: "user3_curl.txt" # 不设置 overrides 或 cookie_refresh_ql 时则使用全局配置 # 阅读配置(全局默认配置,可被用户特定配置覆盖) reading: # 阅读模式:smart_random(智能随机), sequential(顺序), pure_random(纯随机) mode: "smart_random" # 目标阅读时长(分钟),支持区间随机。建议设置为45-90分钟,过长的阅读不符合人类阅读习惯 target_duration: "45-90" # 每次阅读请求间隔(秒) reading_interval: "30-48" # 是否优先使用 CURL 文件中的书籍/章节数据(true=优先 CURL,false=优先本配置 books) use_curl_data_first: true # CURL 数据缺失或无效时是否回退到本配置的 books(true=回退,false=不回退可能报错) fallback_to_config: true # 书籍配置列表 # 章节索引优先级:配置的索引值 > CURL提取的值 > 自动计算的索引 books: - name: "明朝那些事" # 书籍名称 book_id: "a57325c05c8ed3a57224187" # 书籍ID chapters: # 章节配置,支持新旧两种格式 # 包含章节ID和可选的章节索引(推荐) - chapter_id: "a87322c014a87ff679a21ea" chapter_index: 4 # 可选:微信读书官方章节索引ID - id: "e4d32d5015e4da3b7fbb1fa" index: 5 # 可选:微信读书官方章节索引ID # 只有章节ID - "16732dc0161679091c5aeb1" # 兼容旧格式,章节索引将自动计算或从CURL提取 # 智能随机模式配置 smart_random: # 书籍连续性概率(0-1,越高越倾向于继续当前书籍) book_continuity: 0.8 # 章节连续性概率(0-1,越高越倾向于顺序阅读章节) chapter_continuity: 0.7 # 换书冷却时间(秒),人类阅读中换书频率较低 book_switch_cooldown: 3600 # 人类行为模拟,如果希望快速完成阅读可关闭模拟 human_simulation: enabled: true # 是否开启人类行为模拟(true=更自然防检测,false=快速跑完) # 阅读速度是否变化 reading_speed_variation: true # 中途休息概率(0-1) break_probability: 0.1 # 休息时长(秒) break_duration: "5-20" # User-Agent轮换(会话级别,非请求级别),建议不轮换,默认使用 curl 自带的 User-Agent rotate_user_agent: false # 网络配置 network: timeout: 30 # HTTP 请求超时时间(秒),示例:15、30、60 retry_times: 3 # 请求失败后的重试次数,示例:2、3、5 retry_delay: "5-15" # 重试延迟(秒),支持区间如 "5-15",将在退避中使用 # 请求频率控制(请求/分钟),会被速率限制器严格执行;示例:10 表示每分钟最多 10 次请求 rate_limit: 10 # 通知配置 notification: enabled: true # 总开关:是否启用通知(false 时下面所有通道均不发送) # 是否包含详细统计 include_statistics: true # 通知触发策略(可按需关闭特定事件) triggers: session_success: true # 会话成功摘要 session_failure: true # 会话失败/异常 multi_user_summary: true # 多用户总结 runtime_error: true # 程序级错误 general: true # 其它通用通知 # 语法糖:仅失败时通知(等价于将 session_success 和 multi_user_summary 设为 false) only_on_failure: false # 通知通道配置(支持多个通道同时使用);每个通道需 name、enabled、config channels: # 通道1:PushPlus(pushplus.cn) - name: "pushplus" # 固定为 "pushplus",不可改 enabled: true # 是否启用此通道 config: token: "your_pushplus_token_here" # 示例:在 pushplus 官网获取的一对一推送 token # 通道2:Telegram - name: "telegram" enabled: true config: bot_token: "your_telegram_bot_token_here" # 示例:@BotFather 创建的机器人 token chat_id: "your_telegram_chat_id_here" # 示例:与 @userinfobot 对话获取的数字 ID 或 @username proxy: http: "http://proxy_host:port" https: "https://proxy_host:port" # 通道3:WxPusher(微信推送) - name: "wxpusher" enabled: false config: spt: "your_wxpusher_spt_here" # 示例:WxPusher 应用令牌(AppToken) # 通道4:Apprise - name: "apprise" enabled: false config: # Apprise通知URL,支持多种服务(如Discord、Slack、Email等) # 示例:discord://webhook_id/webhook_token # 示例:mailto://user:pass@domain.com # 详见:https://github.com/caronc/apprise url: "your_apprise_url_here" # 通道5:Bark - name: "bark" enabled: true config: # Bark服务器地址 server: "https://api.day.app" # 设备Key device_key: "your_bark_device_key_here" # 通知音效(可选) sound: "default" # 通道6:Ntfy - name: "ntfy" enabled: false config: # Ntfy服务器地址(默认:https://ntfy.sh) server: "https://ntfy.sh" # 主题名称 topic: "your_ntfy_topic_here" # 访问令牌(可选,用于私有主题) token: "your_ntfy_token_here" # 通道7:飞书 - name: "feishu" enabled: false config: # 飞书机器人Webhook URL webhook_url: "https://open.feishu.cn/open-apis/bot/v2/hook/your_webhook_token" # 消息类型:text(纯文本), rich_text(富文本) msg_type: "text" # 通道8:企业微信 - name: "wework" enabled: false config: # 企业微信机器人Webhook URL webhook_url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_webhook_key" # 消息类型:text(纯文本), markdown(Markdown), news(图文) msg_type: "text" # 通道9:钉钉 - name: "dingtalk" enabled: false config: # 钉钉机器人Webhook URL webhook_url: "https://oapi.dingtalk.com/robot/send?access_token=your_access_token" # 消息类型:text(纯文本), markdown(Markdown), link(链接) msg_type: "text" # 通道10:Gotify - name: "gotify" enabled: false config: # Gotify服务器地址 server: "https://gotify.example.com" # 应用令牌 token: "your_gotify_token_here" # 消息优先级(1-10,数字越大优先级越高) priority: 5 # 消息标题(可选) title: "WeRead Bot 通知" # 通道11:Server酱³ - name: "serverchan3" enabled: false config: # Server酱³ UID uid: "your_serverchan3_uid_here" # Server酱³ SendKey sendkey: "your_serverchan3_sendkey_here" # 标签(可选,用|分隔多个标签) tags: "阅读报告" # 简短描述(可选) short: "微信读书阅读完成" # 通道12:PushDeer - name: "pushdeer" enabled: false config: # PushDeer PushKey pushkey: "your_pushdeer_pushkey_here" # 消息类型:text(纯文本), markdown(Markdown),默认为markdown type: "markdown" # Hack配置(用于解决特殊兼容性问题) hack: # Cookie刷新时ql属性全局默认值 # 多用户模式下可通过 curl_config.users[].cookie_refresh_ql 为单个用户覆盖 # 默认值:false,如果遇到cookie刷新失败的问题,可以尝试设置为true cookie_refresh_ql: false # 定时任务配置(仅在 startup_mode 为 scheduled 时生效) schedule: enabled: false # 是否启用定时任务(true 时按 cron_expression 执行) # Cron 表达式,支持标准五段式及简化格式 # 示例: # "0 */2 * * *" - 每2小时执行一次 # "30 9 * * *" - 每天9:30执行 # "0 * * * *" - 每小时执行 # "30 9,18 * * *" - 每天9:30和18:30执行(多时间点) # "0 8,12,18 * * *" - 每天8:00、12:00、18:00执行 cron_expression: "0 */2 * * *" # 示例:每2小时整点执行;格式 分 时 日 月 周 timezone: "Asia/Shanghai" # 示例:Asia/Shanghai、America/New_York、UTC # 守护进程配置(仅在 startup_mode 为 daemon 时生效)。开启后每次执行一个阅读会话,再休眠一段时间执行下一次,模拟多次长阅读(可理解为无限循环)。 daemon: enabled: false # 是否以守护模式运行(true 时按 session_interval 循环执行) # 两次会话之间的间隔(分钟),支持区间随机;示例:"60-120" 表示 1~2 小时 session_interval: "120-180" # 每日最多执行的会话次数,防止过度请求;示例:8、12、24 max_daily_sessions: 12 # 日志配置 logging: level: "INFO" # 日志级别:DEBUG、INFO、WARNING、ERROR;示例:开发用 DEBUG,生产用 INFO format: "detailed" # 格式:simple(简短)、detailed(带时间/级别)、json(机器可读) file: "logs/weread.log" # 日志文件路径,相对项目根目录或绝对路径 max_size: "10MB" # 单文件最大大小,触发轮转;示例:5MB、10MB、50MB backup_count: 5 # 保留的轮转文件个数;示例:3、5、10 # 是否同时输出到控制台 console: true # 执行历史配置(用于记录最近运行结果,便于排查与统计) history: enabled: true # 是否启用执行历史持久化(true 时写入 file) file: "logs/run-history.json" # 历史记录文件路径;示例:logs/run-history.json max_entries: 50 # 最多保留条数,超出则删除最旧;示例:30、50、100 persist_runtime_error: true # 运行时异常时是否写入一条失败记录(便于后续查看)