# SPDX-License-Identifier: MIT # IronsBot behavior config example. # Copy to config/ironsbot.toml or /config/ironsbot.toml and edit values there. # Keep secrets and credentials in environment variables, not in this file. # See README.md "Feature 对照表" for every feature key and its meaning. # # 快速阅读顺序: # 1. [bot]、[paths]、[runtime.*]:监听、日志、可删除缓存目录与运行并发。 # 2. [features.*]:先定义 QQ/群别名和功能包,再为群与用户授予功能。 # 3. [ai]、[messaging.*]、[activity]、[bilibili.*]、[pet_config]:对话、推送和本地图片回复。 # 4. 赛尔实时无头查询:账号库、[operations.headless]、玩家、橱窗、战队、翻榜、预热与私有阵容。 # 5. 赛尔本地资料:[seer.mintmark]、[seer.new_content]、[seer.season]、[seer.render] 与结果附链。 # 6. [operations.data_sync]、启动通知、Docker 更新与重启:数据同步和机器人生命周期。 # # 新增配置的放置规则见 docs/configuration-layout.md:按用户可见功能和运行依赖归类, # 不按 Python 模块名或“最后追加一段”决定位置。 # # 常用 feature key: # - seer:开启全部赛尔查询子功能。 # - seer_pet / seer_mintmark / seer_player / seer_rank / seer_autocard: # 只开放精灵资料、刻印、米米号、榜单、群星牌等单项赛尔功能。 # - pet_config:本地精灵配置图查询,独立于 seer 功能包。 # - image:图片发送;meeting:会议回复。 # - bili_query / bili_push:B 站动态查询 / 推送。 # - web_activity_link / web_activity_push:游戏外签到链接查询 / 定时提醒。 # - seer_activity_query / seer_activity_push:游戏内活动结束提醒查询 / 推送。 # - server_status_query:开服状态查询。 # - ai_chat / ai_intent:AI聊天 / AI意图分析。 # - fire_manual_ad:主动推送末尾追加火火手册链接。 # - ai_intent_fire_manual:用户明确索要火火手册链接时的 AI 意图动作。 # - ai_intent_team_recommend:用户想加战队时的 AI 战队推荐动作。 # - team_audit:战队审核群入群提示;team_resource_subscription:战队资源订阅。 # - admin_notice:管理通知目标权限。注意:all 不包含 admin_notice,要单独写。 # ============================================================================= # Runtime, logging, and paths # 运行基础、日志与路径 # ============================================================================= [bot] # Default: "prod" # EN: Runtime environment label. # ZH: 运行环境标签。 environment = "prod" # Default: "~fastapi+~httpx" # EN: NoneBot driver expression. # ZH: NoneBot 驱动器表达式。 driver = "~fastapi+~httpx" # Default: "0.0.0.0" # EN: HTTP/WebSocket listen address. # ZH: HTTP/WebSocket 监听地址。 host = "0.0.0.0" # Default: 8080 # EN: HTTP/WebSocket listen port. # ZH: HTTP/WebSocket 监听端口。 port = 8080 # Default: "INFO" # EN: Console log level. # ZH: 控制台日志级别。 log_level = "INFO" # Default: ["/", ""] # EN: Command prefixes. Empty string enables direct keyword commands. # ZH: 命令前缀;空字符串允许直接发送关键词命令。 command_start = ["/", ""] # Default: [] # EN: NoneBot superuser QQ IDs or user aliases. # ZH: NoneBot 超级管理员 QQ 号或用户别名列表。 superusers = [] [bot.matcher_priority] # EN: NoneBot matcher priority. Smaller numbers run first. # ZH: NoneBot 事件匹配优先级,数字越小越先处理;默认按功能分段并预留插入空间,同一优先级不要重复使用。 help_hint = 0 ai_group_at = -20 bot_mention_block = -19 server_status = 10 server_status_admin = 11 bilibili = 20 sendpic = 30 red_packet_notice = 40 seer_player = 50 seer_team = 51 seer_rank = 52 seer_rank_help = 53 seer_autocard = 54 lucky_skin_window = 55 seer_type = 56 seer_equipment = 57 seer_peak = 58 seer_data = 59 team_resource_subscription = 60 help = 70 about = 71 message_commands = 80 ai_intent = 81 meeting = 82 activity = 83 db_sync = 84 team_audit = 85 # EN: Broad fuzzy Seer matchers are intentionally late. # ZH: 精灵/刻印属于泛匹配,故意放到后面,避免抢“技能石”等固定图片/文本指令。 seer_mintmark = 90 pet_config = 91 seer_pet = 92 seer_query = 93 ai_chat = 100 [bot.logging] # Default: false; EN: Enable rotating file logs. ZH: 启用轮转文件日志。 file_enabled = false # Default: "INFO"; EN: Minimum file log level. ZH: 写入文件的最低日志等级,可填 DEBUG、INFO、WARNING、ERROR 等。 file_level = "INFO" # Default: false; EN: Also write ERROR/CRITICAL logs to a separate file. ZH: 额外写入独立错误日志文件;只包含 ERROR/CRITICAL,便于排查崩溃。 error_file_enabled = false # Default: "00:00:00"; EN: Rotate at local midnight. Clock values support HH:MM:SS; Loguru size and interval syntax also remains valid. # ZH: 每天本地时间 00:00:00 轮转;钟表时间支持 HH:MM:SS,Loguru 原有大小/周期语法仍可用。 rotation = "00:00:00" # Default: "30 days"; EN: Keep daily logs for this duration. ZH: 每日日志保留时间。 retention = "30 days" # Default: null; EN: Do not compress old daily logs. Set "zip" to save space. ZH: 默认不压缩旧日志;磁盘空间紧张时可改为 "zip"。 compression = "" [paths] # Default: "logs/ironsbot.log" # EN: Main rotating log path. # ZH: 主轮转日志路径。 log_file = "logs/ironsbot.log" # Default: "logs/ironsbot.error.log" # EN: ERROR/CRITICAL log path. # ZH: ERROR/CRITICAL 独立日志路径。 error_log_file = "logs/ironsbot.error.log" # Default: "cache" # EN: Root directory for disposable caches. It may be deleted safely. # ZH: 可安全整体删除的临时缓存根目录。 cache_root = "cache" # Default: "data/state/qq_state.sqlite" # EN: Consolidated low-volume QQ user and group state. # ZH: QQ 用户与群聊低频状态统一数据库;保存绑定、额度、退订、偏好和订阅。 qq_state = "data/state/qq_state.sqlite" # Default: "data/state/runtime_state.sqlite" # EN: Consolidated operational checkpoint and daily-result state. # ZH: 运行任务状态统一数据库;保存活动提醒、审核提醒和幸运橱窗当天结果。 runtime_state = "data/state/runtime_state.sqlite" # Existing deployments must migrate the old small state databases while the # bot is stopped. See README "状态库迁移"; do not move files by hand. [runtime.menu] # Default: 3 # EN: Minutes available after the root menu is successfully sent. # ZH: 根菜单发送成功后可操作的分钟数。 root_timeout_minutes = 3 # Default: 1 # EN: Minutes added when navigating to a different menu page. # ZH: 每次切换到不同菜单页时追加的分钟数。 page_extension_minutes = 1 # Default: 5 # EN: Maximum total minutes from the root menu; page changes never reset it. # ZH: 从根菜单开始计算的最长分钟数;切换页面不会重新开始计时。 max_timeout_minutes = 5 # ============================================================================= # Feature aliases, bundles, and access policies # 功能别名、组合与授权策略 # ============================================================================= [features] # Default: true # EN: Let NoneBot superusers bypass feature restrictions. # ZH: 是否允许超级管理员绕过功能策略限制。 # Example: false superuser_bypass = true [features.group_aliases] # Default: empty table # EN: Named QQ group IDs used by policies. # ZH: 群别名,把易读名称映射到 QQ 群号。 group_a = 987654321 group_b = 876543210 [features.user_aliases] # Default: empty table # EN: Named QQ user IDs used by policies. # ZH: 用户别名,把易读名称映射到 QQ 号。 owner = 1234567890 user_a = 2345678901 # Official QQ group-management bot. Blacklisted below so its automated messages # never trigger bot commands or AI handling. qq_group_manager = 2854196310 [features.bundles] # Default: empty table # EN: Reusable feature bundles. Values may reference atomic features, built-in # bundles, another custom bundle, or a feature declared by a messaging action. # `all` appends custom atomic feature names to the built-in all bundle, which # declares those extension feature names for target policies. # ZH: 可复用功能组合。值可引用单项功能、内置组合或其他自定义组合; # `messaging.commands` / `messaging.schedules` 声明的 feature 也可在这里引用。 # `all` 可追加自定义原子 feature,并同时声明它们可用于目标策略。 # 名称不能覆盖已有 feature;admin_notice 和 blacklist 必须在目标策略中显式授予。 # all = ["my_extension_feature"] standard = [ "seer", "lucky_skin_window", "player_lineup_private", "image", "web_activity_link", "web_activity_push", "seerinfo", "bili_query", "bili_push", "seer_activity_query", "seer_activity_push", "server_status_query", "ai_intent", "ai_intent_fire_manual", "ai_intent_team_recommend", ] lite = [ "seer_pet", "seer_player", "lucky_skin_window", "player_lineup_private", "seer_team", "seer_equipment", "seer_type", "seer_peak", "seer_autocard", "seer_rank", "seer_data", "seer_activity_push", "server_status_query", "ai_intent", "ai_intent_fire_manual", "ai_intent_team_recommend", ] [features.group_policy] # Default: empty table # EN: Group feature allowlist. Built-in bundles include all, query, seer, bili, # seer_activity, server_status, text, text_push, and message. Custom bundles are # defined above. Seer sub-features: # seer_player, seer_team, seer_pet, seer_mintmark, seer_equipment, seer_type, # seer_peak, seer_autocard, seer_rank, seer_data. # ZH: 群功能策略,控制每个群可用哪些功能。seer 是全部赛尔查询功能组合; # 也可只开放 seer_pet、seer_mintmark、seer_player 等子功能;pet_config 需单独开启。 # 如果某个群不想开放精灵/刻印这类宽泛匹配功能,就不要写 seer, # 改写 seer_player、seer_rank、seer_autocard 等精细子功能。 # 游戏内每周活动使用 seer_activity_query / seer_activity_push; # 游戏外活动链接使用 web_activity_link / web_activity_push。 # fire_manual_ad 控制主动推送末尾的火火手册链接。 # ai_intent_fire_manual 控制“手册”AI 意图识别。 # ai_intent_team_recommend 控制“想加战队”AI 战队推荐动作。 # team_resource_subscription 控制战队订阅查询和低资源定时提醒。 # admin_notice 与 blacklist 不包含在 all 里;管理群要收启动、异常等管理通知时需要显式写 admin_notice。 # 写入 blacklist 的用户或群会被完全静默,包含其它任何已启用的功能。 # 具体推送项可在 TD 菜单里分别退订。 # 超级管理员是否绕过这些限制,由 [features].superuser_bypass 控制。 # Example: # example = ["standard", "team_resource_subscription"] # blocked_group = ["blacklist"] [features.user_policy] # Default: empty table # EN: Private/user feature allowlist. # ZH: 私聊/用户功能策略,也用于私聊推送目标。 # Example: # owner = ["all"] # blocked_user = ["blacklist"] qq_group_manager = ["blacklist"] [features.help] # Default: []; EN: Plugin names hidden from help. ZH: 帮助菜单隐藏的插件名称。 ignored_plugins = [] # Default: 60.0 # EN: Rate-limit window for poke help hints. # ZH: 戳一戳帮助提示的限流窗口秒数。 hint_window_seconds = 60.0 # Default: 3 # EN: Maximum poke hint count per group and window. # ZH: 每个群在一个窗口内最多发送的戳一戳提示次数。 hint_max_per_window = 3 # Default: 5.0 # EN: Initial random-selection weight for poke-eligible commands introduced after # the promotion baseline. Older commands always have weight 1.0. # ZH: 戳一戳可推荐的新命令初始随机权重;基线前已有命令始终为 1.0。 poke_new_command_initial_weight = 5.0 # Default: 5.0 # EN: Days for half of a new command's extra poke weight to decay. The total # weight smoothly approaches 1.0 instead of dropping to zero. # ZH: 新命令额外戳一戳权重减半所需天数;总权重平滑趋近 1.0,不会降为 0。 poke_new_command_half_life_days = 5.0 # EN: Optional per-group poke replies. Keys may be group aliases or numeric group IDs. # Configured text replaces the default help hint when someone pokes the bot in that group. # ZH: 可选的群聊戳一戳回复。key 可写群别名或群号;用户专属回复优先,命中后覆盖默认的随机短指令提示。 # 推荐使用下面的行内写法,避免后续 features.help 字段误进入子表。 # poke_replies = { example = "你戳了戳机器人。" } # EN: Optional per-user poke replies. Keys may be user aliases or numeric QQ IDs. # User replies take priority over group replies. Quote Chinese aliases in TOML. # ZH: 可选的用户专属戳一戳回复。key 可写用户别名或 QQ 号,优先于群回复;中文别名需要加引号。未命中时才按当前权限随机提示一个可用短指令。 # poke_user_replies = { "example_user" = "这是给该用户的专属回复。" } # ============================================================================= # Conversational features and proactive messaging # 对话功能与主动消息 # ============================================================================= [runtime.concurrency] # Default: 1; EN: Maximum concurrent HTMLKit image render tasks. # ZH: HTMLKit 图片渲染最大并发数。无头客户端查询始终单请求串行,和图片渲染可并行。 render_max_concurrent = 1 [runtime.scheduler] # Default: "Asia/Shanghai"; EN: Timezone used by first-party recurring jobs. # ZH: 第一方循环定时任务统一使用的时区。 timezone = "Asia/Shanghai" # Default: true; EN: Read HTTPS Date headers at startup to check host-clock drift; never changes system time. # ZH: 启动时读取 HTTPS Date 响应头检查主机时钟偏差;不会修改系统时间。 clock_check_on_startup = true # Default: 3.0; EN: Add an admin startup warning only when absolute clock drift exceeds this many seconds. # ZH: 仅当绝对时钟偏差超过此秒数时加入管理启动告警。 clock_warning_threshold_seconds = 3.0 # Default: 3.0; EN: Per-source timeout for the read-only clock check. # ZH: 只读时钟检查的每个来源超时秒数。 clock_check_timeout_seconds = 3.0 [ai] # Default: built-in IronsBot prompt. # EN: System prompt used for AI chat. # ZH: AI 聊天系统提示词。 # Example: "You are IronsBot." prompt = "你是 IronsBot,一个接入 QQ 群的赛尔号信息查询机器人。回答应简洁、友好、诚实;无法确认时直接说明不确定,不要编造。" # Default: 6 # EN: Recent chat turns kept in context. # ZH: 保留在短期上下文中的聊天轮数。 # Example: 8 history_turns = 6 # Default: true # EN: Enable persistent AI memory. # ZH: 是否启用 AI 长期记忆。 # Example: false memory = true # Default: "data/ai_chat/memory.sqlite" # EN: SQLite path for AI memory. # ZH: AI 记忆 SQLite 路径。 # Example: "data/ai/memory.sqlite" memory_path = "data/ai_chat/memory.sqlite" # Default: 8 # EN: Memory turns loaded into context. # ZH: 加载进上下文的长期记忆轮数。 # Example: 10 memory_turns = 8 # Default: 1200 # EN: Max characters loaded from memory. # ZH: 长期记忆最大字符数。 # Example: 1500 memory_max_chars = 1200 # Default: 45.0 # EN: AI API timeout in seconds. # ZH: AI 接口超时时间,单位秒。 # Example: 60.0 timeout = 45.0 # Default: 800 # EN: Maximum output tokens. # ZH: 最大输出 token 数。 # Example: 1000 max_tokens = 800 # Default: 0.7 # EN: Sampling temperature. # ZH: 采样温度。 # Example: 0.5 temperature = 0.7 # Default: false # EN: Enable provider-specific thinking mode. # ZH: 是否启用供应商特定的思考模式。 # Example: true thinking = false # Default: false # EN: Send a processing notice before AI replies. # ZH: AI 回复前是否发送“处理中”提示。 # Example: true waiting_notice = false # Default: 1500 # EN: Maximum AI reply characters. # ZH: AI 回复最大字符数。 # Example: 1200 max_reply_chars = 1500 # Default: 60.0 # Default: 600.0 # EN: Admin notice cooldown for AI failures. # ZH: AI 异常通知管理员的冷却秒数。 # Example: 300.0 admin_notice_cooldown_seconds = 600.0 # Default: true # EN: Enable AI intent actions. # ZH: 是否启用 AI 意图动作。 # Example: false intent_actions_enabled = true # OpenAI-compatible endpoints are tried in TOML order. Keys must be set only # in the environment as AI_KEY_, never in this file. # EN: Each endpoint tries models in list order before moving to the next endpoint. # ZH: 按端点和模型列表顺序回退;密钥只放 Unraid/Docker 环境变量。 [[ai.endpoints]] # EN: Stable endpoint name; only letters, digits, and underscores are allowed. # ZH: 稳定端点名;仅允许字母、数字和下划线,对应 AI_KEY_DEEPSEEK。 name = "deepseek" base_url = "https://api.deepseek.com" models = ["deepseek-v4-pro"] # EN: Intent actions are configured by ID under [ai.intent_actions.]. # Omitted fields inherit built-in defaults for known actions. # ZH: AI 意图动作按 [ai.intent_actions.] 配置;已知动作未写字段会继承内置默认值。 [ai.intent_actions.team_recommend] # Default: true; EN: Enable team recommendation intent. ZH: 是否启用战队推荐意图。 enabled = true # EN: The team recommendation sends every messages item as a separate QQ message # in order. Any number of items is supported. # ZH: 战队推荐会按顺序把 messages 中的每一项作为独立 QQ 消息发送,支持任意条数。 # Example: # messages = [ # "点击链接加入战队审核群:https://example.com/team-review", # "战队审核群号:123456789", # ] [ai.intent_actions.fire_manual] # Default: true; EN: Enable Fire manual intent. ZH: 是否启用火火手册意图。 enabled = true [messaging] # Default: [] # EN: Fixed command replies. Each action is available in both private and group # chats; the feature user/group policies decide where it actually responds. # ZH: 固定文本回复动作默认同时适用于私聊和群聊;实际在哪些位置回复由 feature 的用户/群策略决定。 # `at_user_ids` accepts user aliases or QQ IDs, only applies to group replies, # and is ignored in private chats. # Example action fields: id, enabled, feature, message, commands, at_user_ids. # `id` uniquely identifies the action. `feature` declares its permission key; # that key may then be referenced by features.bundles/group_policy/user_policy. # `id` 唯一标识这条动作;`feature` 同时声明它的权限名,随后可在 # features.bundles/group_policy/user_policy 中引用,不需要修改 Python 代码。 # Add each action with `[[messaging.commands]]`; omit this table when no action is needed. # # [[messaging.commands]] # id = "seerinfo_page" # commands = ["xm", "xrym", "雷小伊", "重聚"] # message = "https://seerinfo.yuyuqaq.cn/" # feature = "seerinfo_link" # Default: [] # EN: Keyword replies use literal contains matching. They only reply when the # message contains a configured keyword; exact command actions above still win. # ZH: 关键词回复使用普通“包含”匹配;消息中出现关键词即可回复,且完整口令优先。 # Like command actions, the feature key must be enabled for the current group # or private user. Keywords are not regular commands and are shown as automatic # replies in help. # 与口令动作相同,feature 必须在对应会话权限中启用;关键词不是普通指令, # 帮助中会显示为自动回复。 # # [[messaging.keyword_replies]] # id = "chuchu_reply" # keywords = ["出出"] # message = "出出是蛆" # feature = "chuchu_reply" # Default: [] # EN: Scheduled text pushes. Each task delivers to users and groups where its # feature is enabled; `at_user_ids` accepts user aliases or QQ IDs and only # applies to group delivery. # ZH: 定时文本推送默认同时面向私聊和群聊;feature 在用户/群策略中启用后才会投递。 # Like command actions, a schedule's feature is registered from TOML and may # be referenced by bundles and target policies. # 与命令动作相同,定时动作的 feature 会从 TOML 注册,可被组合和目标策略引用。 # `id` is required, must stay stable, and must be globally unique. Renaming it # resets TD and push-time preferences for that schedule. # `id` 必填,必须保持稳定且全局唯一;修改 `id` 会重置该推送的 TD 和时间覆盖记录。 # `name` is shown in TD/unsubscribe menus; if omitted, the first message line is used. # Example task fields: id, name, enabled, feature, message, time, # day_of_week, at_user_ids. # Add each task with `[[messaging.schedules]]`; omit this table when no task is needed. [messaging.push_unsubscribe] # Default: ["td", "退订"] # EN: Commands that open the unsubscribe menu. Matching is case-insensitive. # ZH: 打开退订菜单的口令;大小写不敏感,所以 TD 自动生效。 # Built-in push categories include startup_notice, startup_docker_update, # startup_data_sync, startup_ai_api_check, startup_clock_check, ai_chat_error_notice, bili_login_notice, # headless_seer_notice, render_crash_notice, red_packet_notice, admin_notice, # per-account Bilibili dynamic pushes and seer_activity_push. # 内置推送项包括机器人启动、启动镜像检查、启动数据同步、启动AI接口检查、启动时钟偏差检查、AI 聊天异常、 # B站登录、无头赛尔号、当前进程捕获的精灵渲染异常、红包提醒、其它管理通知、 # 按账号拆分的 B站动态和活动结束提醒。 commands = ["td", "退订"] # Default: ["订阅", "恢复订阅", "推送管理"] # EN: Commands that open the push subscription management menu. # ZH: 打开推送订阅管理菜单的口令。 restore_commands = ["订阅", "恢复订阅", "推送管理"] # Default: built-in hint. # EN: Hint appended to private pushes. # ZH: 追加到私聊推送末尾的退订提示。 hint = "回复 TD 可管理推送订阅。" # Default: built-in group hint. # EN: Hint appended to group pushes. # ZH: 追加到群推送末尾的退订提示。 group_hint = "发送 TD、订阅 或 推送管理 可查看推送订阅;群主/管理员可切换开关,发送 推送时间 管理提醒时间。" [messaging.push_delivery] # Default: 3 # EN: Total attempts for a background push; the first full fan-out counts. # ZH: 主动推送的总发送轮数,首次全量发送也计入。 max_attempts = 3 # Default: 3 # EN: Divide the next retry batch capacity by this value, rounded up. # ZH: 每轮失败后,下一轮批次容量除以此数并向上取整。 retry_batch_divisor = 3 # Default: 2.0 / 5.0 # EN: Random delay range before retry batches and between later batches. # ZH: 缩小批次后的首次重试,以及后续批次之间的随机等待秒数范围。 batch_delay_min_seconds = 2.0 batch_delay_max_seconds = 5.0 [messaging.red_packet_notice] # Default: true # EN: Notify admin notice targets when a QQ group red packet is detected. # ZH: 检测到 QQ 群红包时,通知超级管理员和 admin_notice 管理群;不会领取红包。 enabled = true # Default: 60.0 # EN: Per-group cooldown seconds to avoid repeated red packet notices. # ZH: 同一个群红包提醒的冷却秒数,避免连续刷屏。 cooldown_seconds = 60.0 [messaging.outbound_rate_limit] # Default: false # EN: Limit outgoing bot messages in each non-admin group. # ZH: 分别限制每个非管理群中的机器人出站消息频率。 # EN: Disabled by default. Set true to enforce the windows below. # ZH: 默认关闭;设为 true 后才会按下面的窗口限制群消息。 enabled = false # EN: Exact sliding windows checked atomically; any full window blocks the send. # ZH: 同时检查的精确滑动窗口;任一窗口已满都会阻止发送。 windows = [ { window_seconds = 60.0, max_messages = 10 }, { window_seconds = 600.0, max_messages = 30 }, ] # EN: Proactive pushes and superuser-triggered group replies wait in an unlimited # priority queue when group capacity is exhausted. Superuser replies are sent # before proactive pushes; ordinary user replies are suppressed instead. # ZH: 群额度耗尽时,主动推送与超级管理员触发的群回复进入无上限优先队列; # 超级管理员回复优先于主动推送,普通用户回复直接抑制。 # Default: built-in cooldown notice. # EN: Appended to the last allowed message when a window reaches its limit. # ZH: 某个窗口达到上限时,附加在最后一条允许消息末尾的提示。 cooldown_message = "机器人消息已达到发送额度,后续消息可能延迟或被抑制。" [messaging.meeting] # Default: "" # EN: Tencent meeting number. # ZH: 腾讯会议号。 # Example: "1234567890" number = "" # Default: built-in Tencent meeting template. # EN: Reply template. Variables: meeting_number, meeting_url. # ZH: 会议回复模板,可用变量 meeting_number、meeting_url。 # Example: "会议号:{meeting_number}\n{meeting_url}" template = "腾讯会议\n腾讯会议号:{meeting_number}\n点击链接直接加入:{meeting_url}" # Default: ["开播", "会议"] # EN: Meeting trigger commands. # ZH: 会议回复触发口令。 # Example: ["会议"] commands = ["开播", "会议"] [messaging.team_audit_welcome] # Default: false # EN: Enable join guidance in team audit groups. # ZH: 启用战队审核群新人入群提示。 enabled = false # Default: built-in team audit guidance. # EN: Welcome message sent in groups granted the team_audit feature. # ZH: 在 features.group_policy 中启用 team_audit 的群内发送;机器人会先 @ 新人。 message = "欢迎加入战队审核群。\n如果想加入战队,请先发送“米米号+你的米米号”查询个人信息,方便管理员审核。\n审核通过后,管理员会指引你加入主群和战队;入队完成后请退出审核群。\n如果已经加入主群,或者不想加入战队,请退出本审核群。" # Default: true # EN: Remind newcomers again if they are still in the audit group after the delay. # ZH: 新人入群超过指定时间仍在审核群时,再提醒一次。 followup_enabled = true # Default: 24.0 # EN: Hours after joining before sending the follow-up reminder. # ZH: 入群后多少小时发送二次提醒。 followup_after_hours = 24.0 # Default: built-in follow-up reminder. # EN: Follow-up message. Available placeholders: {hours}, {group_id}, {user_id}. # ZH: 二次提醒文案;可用占位符:{hours}、{group_id}、{user_id};机器人会先 @ 新人。 followup_message = "你加入战队审核群已经 {hours:g} 小时了,仍在审核群。\n审核群仅供入队审核使用;如果已完成审核、已加入主群,或不再申请加入战队,请退出本审核群。" # Default: true # EN: Send a final leave reminder if the newcomer is still in the audit group. # ZH: 新人 48 小时后仍在审核群时,发送最终退群提醒。 final_followup_enabled = true # Default: 48.0 # EN: Hours after joining before sending the final reminder. # ZH: 入群后多少小时发送最终退群提醒;必须大于 followup_after_hours。 final_followup_after_hours = 48.0 # Default: built-in final follow-up reminder. # EN: Final reminder message. Available placeholders: {hours}, {group_id}, {user_id}. # ZH: 最终退群提醒文案;可用占位符:{hours}、{group_id}、{user_id};机器人会先 @ 新人。 final_followup_message = "你加入战队审核群已经 {hours:g} 小时了,仍然还在审核群。\n如果已经加入主群,或者不想加入战队,请退出本审核群。" [messaging.sendpic] # Default: null/omitted # EN: CNB repository for configured image backend. Token stays in env. # ZH: CNB 图床仓库;token 留在环境变量中。 # Example: "org/repo" cnb_repo = "" # Default: "sendpic" # EN: Local image backend root. # ZH: 本地图床根目录。 # Example: "data/sendpic" local_root = "sendpic" # Default: [] # EN: Dynamic sendpic configs. Fields: id, backend, command, aliases, image_dir, # image_filename_template, message_template. # ZH: 可配置发图命令。字段同上。 configs = [] # Default: [] # EN: Enabled dynamic sendpic config IDs. # ZH: 启用的可配置发图 ID。 # Example: ["meme"] enabled_ids = [] # ============================================================================= # Local reply assets # 本地回复素材 # ============================================================================= [pet_config] # Default: true; EN: Enable local pet configuration image replies. ZH: 启用本地精灵配置图查询。 enabled = true # Default: "data/pet_configs" # EN: Directory for manually maintained config images. It is created automatically # when missing. Name each file with the pet ID, for example 4923.png. PNG, WEBP, # JPG, and JPEG are supported. # ZH: 手动维护的精灵配置图目录;不存在时启动会自动创建。图片文件名写精灵序号, # 例如 4923.png;支持 PNG、WEBP、JPG、JPEG。 image_dir = "data/pet_configs" # EN: Multiple NapCat / OneBot v11 clients may connect to one IronsBot instance. # Incoming command replies use the receiving bot; proactive pushes use these routes. # ZH: 多个 NapCat / OneBot v11 客户端可同时连接同一个 IronsBot。 # 普通查询由收到事件的机器人回复;主动推送按下面的群/用户路由选择机器人。 # enabled=false 时保持单机器人行为。开启前请把示例 QQ 和目标别名换成真实配置。 [messaging.bot_routing] enabled = false default_bot = "main_bot" # EN: Bot alias -> OneBot self_id. ZH: 机器人别名 -> OneBot self_id(机器人 QQ)。 [messaging.bot_routing.bot_aliases] main_bot = 111111111 backup_bot = 222222222 # EN: Keys may be group aliases or numeric group IDs. # ZH: 群别名来自 [features.group_aliases],也可直接把 key 写成群号。 [messaging.bot_routing.groups] group_a = "main_bot" group_b = "backup_bot" # EN: Keys may be user aliases or numeric QQ user IDs. # ZH: 用户别名来自 [features.user_aliases],也可直接把 key 写成 QQ 号。 [messaging.bot_routing.users] owner = "main_bot" user_a = "backup_bot" [messaging.command_cooldown] # Default: false # EN: Share cooldowns by QQ user and semantic command across groups and bots. # ZH: 按 QQ 用户和语义命令跨群、跨机器人共享冷却。 # EN: Disabled by default. Set true to enforce the windows below. # ZH: 默认关闭;设为 true 后才会按下面的窗口限制用户命令。 enabled = false # EN: Per-QQ and per-semantic-command sliding windows. Every window must allow a request. # ZH: 同一 QQ、同一语义命令的滑动窗口额度;所有窗口都未满时才允许执行。 windows = [ { window_seconds = 60.0, max_requests = 3 }, { window_seconds = 300.0, max_requests = 5 }, ] cooldown_message = "操作过于频繁,请 {remaining_seconds} 秒后再试。" in_progress_message = "该命令正在处理中,请等待当前操作完成。" # EN: Same semantic target responses are suppressed for this period even when # command cooldown windows are disabled. # ZH: 同一语义动作和真实目标在此期间重复发送会被抑制;不受 enabled 开关影响。 duplicate_window_seconds = 60.0 duplicate_message = "该指令重复发送;后续重复不再提醒。" # EN: Non-AI direct mentions use a per-user initial-response budget. # ZH: 未启用 AI 的群内直接 @ 机器人按用户使用首次提示额度。 mention_initial_window_seconds = 600.0 mention_initial_max_responses = 3 [messaging.command_cooldown.commands] # EN: Optional per-command window overrides. An empty list disables limits for that command. # ZH: 可按语义命令覆盖窗口;空列表表示不限制该命令。 # seer_player = [{ window_seconds = 60.0, max_requests = 3 }, { window_seconds = 300.0, max_requests = 5 }] # seer_player_collection = [{ window_seconds = 60.0, max_requests = 3 }, { window_seconds = 300.0, max_requests = 5 }] # seer_player_peak = [{ window_seconds = 60.0, max_requests = 3 }, { window_seconds = 300.0, max_requests = 5 }] # seer_player_autocard = [{ window_seconds = 60.0, max_requests = 3 }, { window_seconds = 300.0, max_requests = 5 }] # player_lineup_private = [{ window_seconds = 60.0, max_requests = 3 }, { window_seconds = 300.0, max_requests = 5 }] # seer_rank_score = [] [activity] # Default: true # EN: Enable activity reminders. # ZH: 是否启用活动结束提醒。 # Example: false enabled = true # Default: [11, 1] # EN: Lead hours for ending reminders. # ZH: 活动结束前提前多少小时提醒。 # Example: [24, 1] lead_hours = [11, 1] # Default: 15 # EN: Grace minutes for missed reminder scheduling. # ZH: 错过计划提醒时间后的补发宽限分钟。 # Example: 10 grace_minutes = 15 # Default: true # EN: Only include activities marked as visible. # ZH: 是否只读取活动中心展示的活动。 # Example: true only_shown = true # Default: built-in reminder template. # EN: Reminder message template. # ZH: 活动提醒消息模板。 # Available fields: {lead_hours}, {activity_count}, {activity_list} message = "⏰ 本周活动将在约 {lead_hours} 小时后结束\n{activity_list}" # Default: 8.0 # EN: Timeout for fetching official activity notices. # ZH: 获取官方活动公告的超时秒数。 # Example: 10.0 notice_timeout_seconds = 8.0 [bilibili] # B 站配置分三层: # 1. [bilibili.accounts.<别名>] 定义稳定账号别名和 UID,不代表一定监控或推送。 # 2. [bilibili.push].accounts 是默认推送别名,所有开启 bili_push 的群/用户都会收到。 # 3. [bilibili.push.groups.<群别名>].accounts 是该群额外追加的账号别名。 # 推送形式默认由 [bilibili.push].mode 决定,单个账号可用 modes 改成 full/link。 # QQ 展示使用 B 站接口返回的公开昵称,不在 TOML 中配置 nickname。 # 模式命令支持账号别名、公开昵称或 UID。 # Default: 300.0 # EN: Cooldown for Bilibili login QR notices. # ZH: B 站登录二维码提醒冷却秒数。 # Example: 600.0 login_notice_cooldown_seconds = 300.0 [bilibili.accounts.seer] # Default: 1310714247 # EN: Bilibili UID referenced by the stable alias `seer`. # ZH: 稳定别名 `seer` 对应的 B 站 UID。 uid = 1310714247 # Add more accounts with unique aliases: # [bilibili.accounts.fire] # uid = 527589079 [bilibili.storage] # Default: "data/bilibili_monitor" # EN: Directory for Bilibili history and cookie state. # ZH: B 站历史与 Cookie 状态目录。 # Example: "data/bili" data_dir = "data/bilibili_monitor" # Default: 1000 # EN: Max dynamic history items retained. # ZH: 动态历史最多保留条数。 # Example: 2000 history_max_items = 1000 [bilibili.polling] # The scheduler wakes on every exact wall-clock minute at check_second, # independent of the bot startup second. The intervals below decide whether that regular # wake-up performs a network request and are anchored to each window start. # 调度器固定在墙钟每分钟指定秒数唤醒,不继承机器人启动时的秒数; # 下方间隔决定该次常规唤醒是否真正请求 B站,并以各窗口起点作为时间槽锚点。 # Default: 30 # EN: Default polling interval in minutes. # ZH: 默认轮询间隔分钟数。 # Example: 20 default_minutes = 30 # Default: 5; EN: Wall-clock second used for the once-per-minute scheduler wake-up. # ZH: 每分钟轮询唤醒使用的墙钟秒数;设为 5 可给平台同步整点动态留出短暂缓冲。 check_second = 5 # Default: [{ start = "07:00:00", end = "23:00:00", minutes = 5 }] # EN: Time windows with custom polling interval. Boundaries support HH:MM:SS. # ZH: 分时轮询窗口;边界支持 HH:MM:SS。 # Example: [{ start = "07:00:00", end = "23:00:00", minutes = 5 }] windows = [{ start = "07:00:00", end = "23:00:00", minutes = 5 }] # EN: Extra short polling bursts around recurring release times. Each slot checks # at every offset below until a monitored account has a new dynamic; remaining # offsets for that slot are then skipped. Regular polling above remains enabled. # ZH: 高频发布时间点的额外秒级冲刺。每个发布点依次按下方秒偏移检查; # 任一受监控账号发现新动态后,该发布点剩余秒点自动跳过;上方常规轮询继续生效。 # start/end use [start, end) wall-clock semantics, including midnight wrap. # Default: the observed 10:00-18:00 hourly and 14:30-18:30 half-hour Seer slots. [[bilibili.polling.boost_windows]] start = "10:00:00" end = "19:00:00" interval_minutes = 60 offset_seconds = [0, 5, 10, 15] [[bilibili.polling.boost_windows]] start = "14:30:00" end = "19:30:00" interval_minutes = 60 offset_seconds = [0, 5, 10, 15] [bilibili.push] # Default: "full" # EN: Default push mode for accounts without an explicit mode. # ZH: 未单独指定模式的账号默认推送方式,可选 full 或 link。 # Example: "full" mode = "full" # Default: ["seer"] # EN: Account aliases pushed to every target that enables bili_push. # ZH: 所有开启 bili_push 的群/私聊默认推送的账号别名。 # Example: ["seer"] accounts = ["seer"] # EN: Optional per-account push mode overrides. Runtime admin overrides take priority. # ZH: 可选的全局按账号别名推送模式覆盖;未填写时继承上面的 mode,当前会话的运行时设置优先级更高。 # Example: { fire = "link" } # EN: Group owners/admins can override one account at runtime with: # B站推送模式 # ZH: 群主/管理员或私聊用户可用别名、公开昵称或 UID 修改推送模式: # B站推送模式 <账号别名|公开昵称|UID> <内容|链接|默认> # Default: 800 # EN: Full pushes longer than this use an AI summary for their text-only final message. # ZH: 全文动态超过此字符数时,最后一条文本消息发送 AI 摘要;不超过时发送完整原文。 content_max_chars = 800 # Default: 500 # EN: Maximum characters in the text-only AI summary or failed-summary excerpt. # ZH: 超长动态最后一条文本消息中的 AI 摘要或原文节选最大字符数。 summary_max_chars = 500 # Default: true # EN: Use AI to summarize long full-text dynamic pushes. When false, send an original text excerpt instead. # ZH: 长动态全文推送是否调用 AI 摘要;关闭后改为发送原文节选。 summary_use_ai = true # Default: {} # EN: Group push targets keyed by feature group alias or group ID. # ZH: 群推送目标,键可以是群别名或群号。 # Example: { main = { accounts = ["fire"], modes = { fire = "full" } } } groups = {} # Default: {} # EN: Private push targets keyed by user alias or user ID. # ZH: 私聊推送目标,键可以是用户别名或 QQ 号。 # Example: { owner = { accounts = ["fire"], mode = "link" } } users = {} [bilibili.filters] # Default: built-in lottery/result suppression patterns. # EN: Regex patterns that suppress automatic pushes for non-Seer accounts. # ZH: 非赛尔号官号自动推送的全局抑制正则;赛尔号官号改由下方分类订阅控制。 # Example: ["恭喜", "中奖", "抽奖结果"] suppress_push_patterns = ["恭喜", "恭喜.*获得", "记得及时查看私信通知", "中奖", "抽奖结果"] [bilibili.seer_categories] # The official account receives target-level category subscriptions through TD. # 赛尔号官号动态按不同会话分别分类订阅;发送 TD 后进入“赛尔号动态订阅”管理。 # Default: true enabled = true # Default: "seer"; EN: Account alias defined above. ZH: 上方定义的赛尔号官号账号别名。 account = "seer" # Default: "Asia/Shanghai"; EN: Timezone used by preview schedule matching. ZH: 预告发布时间判断使用的时区。 timezone = "Asia/Shanghai" # New targets mute lottery/result pushes by default. All other categories subscribe by default. # 新群/私聊默认 TD 抽奖/中奖,其余分类默认订阅;TD 菜单中的设置会单独保存。 default_muted_categories = ["lottery"] # Monday/Wednesday afternoon is only an extra hint. A preview still needs a text match. # 周一、周三 17:00-18:00 仅辅助识别预告,不能单独将动态判为预告。 preview_windows = [{ weekdays = ["mon", "wed"], start = "17:00:00", end = "18:00:00" }] # Text patterns used together with preview_windows. preview_window_patterns = ["新版本", "即将到来", "长图"] # The twelve TD categories are lottery, version_preview, version_guide, pet, skin, # skill_showcase, autocard, competition, story (main storyline), event, interaction, other. # 下列正则可按官方文案变化自行增减;other 只在没有命中其他分类时自动使用。 lottery_patterns = ["抽奖", "中奖", "私信通知", "抽奖结果"] version_preview_patterns = ["新版本.*即将到来", "查看下方长图"] version_guide_patterns = ["一图掌握", "版本更新指引", "版本福利"] pet_patterns = ["全新精灵", "精灵觉醒", "精灵.*即将登场"] skin_patterns = ["全新皮肤", "限定皮肤", "皮肤.*返场", "皮肤.*即将登场"] skill_showcase_patterns = ["技能特效抢先看"] autocard_patterns = ["群星牌", "元素王座", "卡牌", "小小精灵"] competition_patterns = ["大师赛", "小师赛", "赛事", "比赛", "赛程", "直播", "总决赛"] story_patterns = ["灵渊", "玄武复活", "全新剧情", "主线故事"] event_patterns = ["联动", "主题站", "通行证", "限时活动", "活动福利"] interaction_patterns = ["投票", "应援", "报名", "问卷", "创作激励", "征集"] # ============================================================================= # Seer real-time headless queries # 赛尔号实时无头查询 # ============================================================================= # Seer account library. Set the plain password in SEER_PASSWORD_; # IronsBot converts it to the legacy login MD5 in memory. `public = true` makes # an account's `name` and `aliases` usable in every conversation. Private accounts # only expose those aliases to groups listed in [seer.player_account_aliases]. # ZH: 赛尔账号库。密码统一放在容器环境变量 SEER_PASSWORD_;填写明文即可, # IronsBot 会在内存中转换为旧登录接口所需的 MD5。public=true 时,name 和 aliases 可在 # 任意会话中用于查询;public=false 时,仅 [seer.player_account_aliases] 声明的群可用这些 # 别名。所有以米米号为目标的入口统一支持这些名称/别名,包括玩家基础资料、收集、巅峰、 # 群星牌、阵容类扩展和全服榜玩家查询;其他位置仍可直接填写数字米米号。绑定米米号必须 # 直接填写数字。账号用途由各功能自己的账号引用列表决定。 # # [[seer.player_accounts]] # player_id = 123456789 # name = "sample_worker" # aliases = ["示例无头", "示例查询账号"] # public = false # # [[seer.player_accounts]] # player_id = 987654321 # name = "sample_window" # aliases = ["示例橱窗账号"] # public = true # EN: Group-scoped private account aliases. Keys accept a group alias or group ID; # values are account names, aliases, or the single value "all". # ZH: 群内私有账号别名。key 可写群别名或群号;值可写账号 name、aliases,或单独写 "all" # 以向该群开放全部账号别名。 # [seer.player_account_aliases] # group_a = ["sample_worker"] # group_b = ["all"] [operations.headless] # EN: Connection, heartbeat, timeout, and reconnect parameters for every public # query worker. References accept an account name, alias, numeric string, or player ID. # ZH: 所有公共无头查询账号共用的连接、心跳、超时与重连参数;账号身份在 # [[seer.player_accounts]] 中配置。这里可填写账号 name、alias、数字字符串或数字米米号。 # Default: []; EN: Public headless query pool account references. # ZH: 公共无头查询池账号;按最终米米号去重,空列表表示不启用公共无头查询。 accounts = [] # Default: login server URL; EN: Seer login server source URL. ZH: 赛尔号登录服务器地址来源。 login_server_addr = "https://seer-login-ip.61.com/unity-ip.txt" # Default: 300; EN: Headless heartbeat seconds. ZH: 无头客户端心跳秒数。 heartbeat_interval = 300.0 # Default: 20.0; EN: Single game-server request timeout. A timeout reconnects to prevent a late packet from matching the next query. ZH: 单个游戏服务器请求的超时秒数;超时后会重连,避免迟到封包错配到下一次查询。 request_timeout_seconds = 20.0 # Default: -1; EN: Reconnect attempts, -1 means forever. ZH: 重连次数,-1 表示无限。 reconnect_retries = -1 # Default: 5.0; EN: Initial reconnect delay seconds. ZH: 初始重连延迟秒数。 reconnect_delay = 5.0 # Default: 120.0; EN: Max reconnect delay seconds. ZH: 最大重连延迟秒数。 reconnect_delay_max = 120.0 [operations.headless_notice] # EN: Notices are sent to superusers and admin_notice groups. # ZH: 这些通知会发送给超级管理员和 admin_notice 管理群。 # Default: true; EN: Send startup login failure notice. ZH: 启动时发送无头登录失败通知。 login_notice = true # Default: built-in; EN: Startup login failure notice template. ZH: 启动登录失败通知模板。 login_notice_message = "无头米米号登录未成功。\n米米号:{user_id}\n状态:{reason}\n依赖米米号登录的功能可能不可用;请检查账号、MD5密码、网络或赛尔号服务器状态。" # Default: true; EN: Send online/offline state notices. ZH: 发送在线/离线状态通知。 state_notice = true # Default: built-in; EN: Offline state notice template. ZH: 掉线通知模板。 state_offline_message = "无头米米号已掉线。\n米米号:{user_id}\n状态:{reason}\n来源:{source}" # Default: built-in; EN: Online state notice template. ZH: 恢复在线通知模板。 state_online_message = "无头米米号已恢复登录。\n米米号:{user_id}\n离线时长:{offline_duration}\n来源:{source}" # Default: "00:05"; EN: Daily reconnect check times. ZH: 每日重连检查时间。 reconnect_check_times = "00:05:00" [seer.player] # Default: 30.0; EN: Player query timeout seconds. ZH: 玩家查询超时秒数。 timeout_seconds = 30.0 # Default: 90.0; EN: Player detail timeout seconds. ZH: 玩家详情查询超时秒数。 detail_timeout_seconds = 90.0 # Default: all player sections; EN: Enabled player sections. # ZH: 玩家展示区块;可填 basic/collection/rank/autocard/local_rank/peak 等,all 表示全部。 sections = ["all"] [seer.player.binding] # Default: 3; EN: Beijing calendar days before a default player ID can be changed or unbound again. # ZH: 更改或解绑默认米米号共用的北京时间自然日冷却;首次绑定不受此限制。 change_cooldown_days = 3 # Default: false; EN: Prevent non-owners from using an administrator-bound player ID through aliases, @member, or no-target shortcuts. Full numeric IDs still work. # ZH: 开启后,非绑定超级管理员不能通过别名、@成员或无目标快捷指令查询其绑定米米号;完整数字米米号仍可查询。 protect_superuser_bound_shortcuts = false [seer.player.query_limits] # EN: Persistent daily budgets for foreground logical headless operations, reset by Beijing date. # ZH: 用户触发的无头逻辑服务器操作每日额度,按北京时间自然日重置;缓存、预热与后台刷新不计入。 # ZH: 每条指令只要当天还剩至少 1 项即可完整执行;结果成功发送后,按实际成功获取的数据项目结算, # 因此收集、巅峰和榜单查询一次可能计入多项。基础资料和阵容每次最多计 1 项。 enabled = true # EN: Daily logical-operation budget for the user's current default player ID. # ZH: 查询当前默认米米号时的每日逻辑操作额度。 bound_default_daily_limit = 60 # EN: Daily logical-operation budget for all non-default player IDs combined. # ZH: 查询其他米米号时共享的每日逻辑操作额度。 bound_other_daily_limit = 60 # EN: Daily logical-operation budget before a default player ID is bound. # ZH: 尚未绑定默认米米号时的每日逻辑操作额度。 unbound_daily_limit = 30 # EN: Whether superusers bypass these daily budgets. # ZH: 超级管理员是否绕过每日额度。 superuser_bypass = true [seer.player.request_protection] # Default: true. EN: Serialize live player-related requests to one workflow at a time. # ZH: 默认开启。所有玩家相关实时请求同时只执行一个,避免无头客户端并发封包。 enabled = true # Default: 3. EN: Maximum normal-user requests waiting behind the active request. # ZH: 普通用户最多可等待的请求数;正在执行的请求不计入。超级管理员可优先插队。 max_queued_queries = 3 # Default: 1.2. EN: Minimum spacing between every headless game packet in seconds. # ZH: 所有无头赛尔号封包之间的最小间隔秒数;调低会更快,但更容易触发远端断连。 base_request_interval_seconds = 1.2 # Default: 60.0. EN: Pause ordinary player queries after a confirmed disconnect. # ZH: 确认无头连接断开后,普通玩家查询暂停秒数。 disconnect_pause_seconds = 60.0 # Default: 600.0. EN: Window used to detect a repeated disconnect. # ZH: 在这段秒数内再次断线,使用下面更长的暂停时间。 repeat_disconnect_window_seconds = 600.0 # Default: 300.0. EN: Pause ordinary player queries after a repeated disconnect. # ZH: 重复断线后的普通玩家查询暂停秒数。 repeat_disconnect_pause_seconds = 300.0 # Default: true. EN: Let superusers wait ahead of normal queued player queries. # ZH: 超级管理员请求优先于普通等待队列,但不会打断正在发送的封包。 superuser_priority = true # Default: true. EN: Let superusers wait for automatic reconnect instead of the fixed pause. # ZH: 超级管理员跳过固定暂停时间,改为等待无头客户端自动重连;不会强行发送封包。 superuser_bypass_pause = true [seer.player.background_refresh] # Default: false. When true, a successful “米米号” query warms collection, # peak and autocard data in the background. It never blocks the basic reply. # ZH: 默认关闭。开启后,成功查询米米号会在后台预热收集、巅峰和群星牌数据; # 不会阻塞基础资料回复。频繁查询会增加无头客户端请求量,请谨慎开启。 enabled = false # Default: 300.0; EN: In-memory prefetch result lifetime in seconds. # ZH: 后台预热结果在内存中的保留秒数。 cache_ttl_seconds = 300.0 [seer.lucky_skin_window] # Default: false; EN: Enable daily lucky skin window queries and subscribed private notices. # ZH: 启用当天幸运橱窗查询,以及向已订阅用户发送私聊提醒。手动查询当天无缓存时会先确认登录。 # Every account opens an isolated short-lived session using its player-ID-derived # password environment variable. It never occupies or replaces a public-query # worker. A successful result is cached for the day, including across bot # restarts. Different lucky-window accounts run one at a time to avoid # concurrent dedicated logins. # ZH: 每个账号使用固定规则的环境变量建立隔离的短时会话,不占用也不替换公共查询 # worker。不同橱窗账号严格串行登录和查询;每个账号当天首次成功结果会落盘缓存, # 机器人重启后也不会重复登录。 enabled = false # Default: "00:01:05"; EN: Daily check time in HH:MM:SS. Legacy HH:MM is accepted as :00. # ZH: 每日检查时间,使用 HH:MM:SS;旧 HH:MM 会自动视为 :00。 time = "00:01:05" # Default: "Asia/Shanghai"; EN: Timezone for the daily window. ZH: 每日橱窗的时区。 timezone = "Asia/Shanghai" # Default: 15.0; EN: Headless packet timeout seconds. ZH: 无头橱窗封包超时秒数。 timeout_seconds = 15.0 # Add one table per QQ user allowed to query and receive a configured account's # window. `user` accepts a [features.user_aliases] alias or QQ ID. `account` # refers to a `seer.player_accounts` name, alias, or player ID; the user must # bind that same player ID. `watched_skin_ids` accepts either the skin table ID # or its 140xxxx resource ID and seeds the user's watch list only once. Users # can later manage that list with QQ commands. Watching only adds a ★ marker. # The user also needs lucky_skin_window in their user policy; group use # additionally needs it in the group policy. # ZH: 每个允许查询和接收提醒的 QQ 用户配置一张表。user 可填写用户别名或 QQ 号; # account 引用 seer.player_accounts 中的 name、aliases 或米米号,用户必须绑定 # 对应米米号。手动查询当天无缓存时会先请该用户确认登录。watched_skin_ids 可填写 # 皮肤表 ID 或 140xxxx 资源 ID,仅在首次使用时初始化关注列表;之后可通过 QQ 指令 # 修改。关注只标记 ★,不会过滤每日四个皮肤。用户策略还需启用 # lucky_skin_window;群聊还需要在该群策略中启用。 # # [[seer.lucky_skin_window.accounts]] # user = "owner" # account = "sample_window" # watched_skin_ids = [1400538, 1400761] # The public image renders a labelled blank 12-slot preview. Real lineup data # is available only after the optional private extension package is installed. # The extension reuses this bot's public headless query-worker pool; it does # not start a separate API container or dedicated login configuration. # Default: 15.0; EN: In-process private lineup packet timeout seconds. ZH: 私有阵容封包超时秒数。 # timeout_seconds = 15.0 # Default: "data/seer/player_lineup_cache.sqlite" # EN: Persists each player's last successful lineup reply without automatic expiry. # ZH: 永久保存每个玩家最后一次成功阵容结果;实时查询成功时覆盖。 # cache_path = "data/seer/player_lineup_cache.sqlite" [seer.team] # Default: 20.0; EN: Team query timeout seconds. ZH: 战队查询超时秒数。 timeout_seconds = 20.0 # Default: ["basic", "resource"]; EN: Enabled team sections. ZH: 战队展示区块。 sections = ["basic", "resource"] [seer.team_resource] # Default: true; EN: Enable subscribed team query and resource notices. ZH: 启用战队订阅查询与资源提醒。 enabled = true # Default: []; EN: Daily low-resource scan times in HH:MM:SS. Empty disables scheduled notices. # ZH: 每日资源扫描时间,支持 HH:MM:SS;为空时不定时提醒,只保留群内“战队”订阅查询。 times = [] # Default: ["战队"]; EN: Subscribed team query commands. ZH: 已订阅战队查询口令。 commands = ["战队"] # Default: 1000; EN: Default low-resource threshold for new QQ-managed subscriptions. # ZH: 群里新增订阅时的默认资源阈值;命令里可追加数字覆盖。 default_threshold = 1000 # Default: []; EN: Default users to mention when the subscription command has no @. # ZH: 订阅命令没有 @ 用户时默认提醒的人;可填 user_aliases 或 QQ 号。 default_at_users = [] # Default: 20; EN: Team subscription query timeout seconds. ZH: 战队订阅查询超时秒数。 query_timeout_seconds = 20 # Default: built-in line; EN: Resource notice status line. ZH: 战队资源提醒状态行。 resource_line = "查到了战队 {team_name}({team_id})资源是 {resource},低于阈值 {threshold}。" # Default: built-in message; EN: Resource notice extra message. ZH: 战队资源提醒附加文案。 resource_message = "出来买资源,别逼我求你😡" # EN: QQ commands in enabled groups: # 战队 -> query all subscribed teams in this group. # 战队订阅 -> list current group subscriptions. # 订阅战队123456 -> subscribe a team with default threshold. # 订阅战队123456 1000 @user -> subscribe with threshold and mention target. # 取消订阅战队123456 -> remove a subscription. # ZH: 订阅战队不再使用 [[seer.team_resource.subscriptions]] TOML 表。 [seer.rank] # 这里有三种“范围”不要混: # - limit:已知分数时,二分查找最多认为前多少名是可搜索范围。 # - superuser_score_limit_multiplier:超级管理员按分数查询时放大上述范围。 # - online_limit:不知道分数时,在线从前往后扫的最大范围。 # - page_refresh.target_limit:后台定时预热缓存到前多少名,见 [seer.rank.page_refresh]。 # Default: 10000 # EN: Score-known binary rank lookup limit. # ZH: 已知分数时允许二分查找的最大榜单范围。 limit = 10000 # Default: 2000 # EN: Score-unknown linear online scan limit. # ZH: 未知分数时允许从前往后线性扫描的在线查询范围。 online_limit = 2000 # Default: {}. EN: Optional per-global-rank lookup caps. A configured rank uses # this value for both score-based binary lookup and score-unknown page scans. # ZH: 可选的按全服榜单查询上限覆盖;已配置榜单会同时覆盖按分数二分和未知分数翻页。 # 可选键:图鉴积分、成就点数、精灵图鉴、皮肤图鉴、套装图鉴、部件图鉴、座驾图鉴、 # 刻印图鉴、群星牌、竞技段位、狂野段位、专家段位。 # Example: lookup_limits = { "群星牌" = 10000 } lookup_limits = {} # Default: 2 # EN: Multiplier applied to score-known lookup limits for superusers only. # ZH: 超级管理员按指定分数反查用户时的搜索范围倍数;可独立调整。 superuser_score_limit_multiplier = 2 # Default: 100; EN: Rank page size. ZH: 榜单分页大小。 page_size = 100 # Default: true; EN: Enable rank page cache. ZH: 启用榜单分页缓存。 page_cache = true # Default: 3600; EN: Rank page cache TTL seconds. ZH: 榜单分页缓存 TTL。 page_cache_ttl_seconds = 3600 # Default: true; EN: Allow stale rank cache. ZH: 允许使用过期缓存。 allow_stale_cache = true # Default: 32; EN: Max point probes for score-based binary rank lookup. score_search_probe_limit = 32 # Default: 5; EN: Max tied-score pages scanned after binary lookup. score_search_tie_page_limit = 5 # Default: "data/seer/rank_page_cache.sqlite" # EN: Rank page cache SQLite path. # ZH: 榜单分页缓存数据库。 page_cache_path = "data/seer/rank_page_cache.sqlite" # Default: 10 # EN: Default rank rows shown by rank commands when no page/range is specified. # ZH: 榜单命令未指定页码或范围时,默认显示多少名。 display_limit = 10 # Default: 100 # EN: Maximum allowed rank rows for configured defaults and group owner/admin changes. # ZH: 榜单默认显示条数的最大阈值,群主/管理员修改时不能超过此值。 max_display_limit = 100 # Default: {} # EN: Optional per-group display defaults. Keys can be group aliases or QQ group IDs. # ZH: 可选的按群默认显示条数;键可以写群别名或 QQ 群号。 display_limits = {} [seer.rank.exclusions] # Taomee 内部号会从所有官方榜单和机器人本地样本中隐藏。 # 这里填入已确认的米米号;列表会自动去重。 # Default: built-in confirmed Taomee internal accounts. # EN: Accounts hidden from every official rank and the local sample. # ZH: 已确认的淘米内部号;所有官方榜单与本地样本都会过滤。 taomee_internal_user_ids = [ 389438787, 963527044, 961510772, 914692158, 962236717, 960755946, 930395179, 964791989, 960957048, 962883553, 963833963, 963123185, 963190850, 961392272, 960351788, 964035946, 963236961, 961625369, 51010611, ] [seer.rank.exclusions.user_ids_by_rank] # 正常玩家的统计异常号只从对应官方榜单隐藏,不影响其它榜单或本地样本。 # 可用榜单键:图鉴积分、成就点数、精灵图鉴、皮肤图鉴、刻印图鉴、套装图鉴、 # 部件图鉴、座驾图鉴、群星牌、竞技、狂野、专家。 # Default: built-in confirmed anomalies for 精灵图鉴 only. # EN: Per-rank anomalous accounts; they remain visible in all other ranks. # ZH: 按榜单单独配置的异常账号;不会扩散到其它榜单或本地样本。 "图鉴积分" = [] "成就点数" = [] "精灵图鉴" = [ 75576625, 563101901, 941831079, 129030222, 962351895, 569440141, 141312889, 674021793, 163443467, 960649568, 206601225, 925171143, 810989428, ] "皮肤图鉴" = [] "刻印图鉴" = [] "套装图鉴" = [] "部件图鉴" = [] "座驾图鉴" = [] "群星牌" = [] "竞技" = [] "狂野" = [] "专家" = [] # 玩家详情里的收集/巅峰多榜查询采用逐页轮转:某个榜响应慢时,其他榜可继续查询。 [seer.rank.player_lookup] # Default: 8; EN: Timeout for one official leaderboard page request. # ZH: 单次官方榜单页请求最多等待秒数。 page_timeout_seconds = 8 # Default: 60; EN: Shared time budget for all rank sections in one player detail. # ZH: 一次玩家详情中所有榜单共用的查询总秒数。 total_timeout_seconds = 60 # Default: 1; EN: Retries for a timed-out page after other boards get a turn. # ZH: 单页超时后让出轮次,其他榜轮完后最多重试次数。 page_retry_count = 1 # Default: 600 # EN: A confirmed player rank newer than this uses the fast online anchor path. # ZH: 上次确认名次在此秒数内时,优先走快速联网锚点确认。 recent_cache_max_age_seconds = 600 # Default: 5 # EN: Maximum wait for a recent cached rank's online anchor page. On timeout, # keep the cached result without retrying or expanding the search. # ZH: 近期缓存锚点页最多联网等待秒数;超时后直接保留缓存,不重试或扩圈。 recent_cache_anchor_timeout_seconds = 5.0 # Default: omitted/null. # EN: Leave unset to follow the official peak season automatically. # Set only as a temporary diagnostic override. # ZH: 留空时自动跟随官方巅峰赛季;仅在临时排查时手动覆盖。 # peak_subkey = 20260717 [seer.rank.page_refresh] # 后台刷榜只用于预热缓存,加快后续查询;不会把玩家计入“样本”。 # 默认使用“带随机抖动的间隔任务”,避免固定整点高频访问。 # 如果 times 非空,则额外按固定时间触发;如果 interval_minutes 为 0,则关闭间隔触发。 # Default: true # EN: Enable scheduled full-server rank page cache refresh. # ZH: 启用全服榜单页缓存定时刷新。 enabled = true # Default: 50000 # EN: Refresh rank pages up to this display rank. # ZH: 默认逐步缓存到榜单前多少名。 target_limit = 50000 # Default: {} # EN: Optional per-rank target limits. Keys are global rank names. # ZH: 可选的按榜单单独设置缓存目标;键写全服榜名称。 target_limits = {} # Example: target_limits = { "群星牌" = 10000, "成就点数" = 50000 } # Default: { "群星牌" = 1000 } # EN: Optional per-rank score cutoffs. For these ranks, refresh pages until the # first cached page falls below the score; target_limit remains a safety cap. # ZH: 可选的按榜单分数线停止刷新。比如群星牌默认刷到页面最低分低于 1000 分; # 想收 0 分以上玩家时改成 { "群星牌" = 1 }。target_limit 仍作为保险上限。 score_cutoffs = { "群星牌" = 1000 } # EN: Rank-position score is calculated automatically as 1 / sqrt(page_index). # ZH: 名次位置分数自动按页序号平方根衰减,例如 1-100 为 1,101-200 约 0.707,1901-2000 约 0.224。 # Default: 0.08 # EN: Extra stale-page multiplier strength. Uses ln(1 + overdue_hours). # ZH: 过期页面倍率强度;按 ln(1 + 过期小时数) 增长,避免极旧页面差距过大。 stale_age_weight = 0.08 # Default: 5.0 # EN: Maximum score multiplier from stale age. # ZH: 过期时间带来的最大分数倍率,防止极旧页面一直霸占刷新。 stale_age_max_multiplier = 5.0 # Default: 100 # EN: Rank page request size. # ZH: 每页榜单请求人数。 page_size = 100 # Default: 10 # EN: Total rank pages refreshed by the whole worker pool in one run. # ZH: 每轮由整个无头池合计最多刷新多少页,不会随账号数倍增。 pages_per_run = 20 # Default: 0 # EN: If > 0, each run refreshes a random number of pages between this value and pages_per_run. # ZH: 如果大于 0,每轮随机刷新 pages_per_run_min 到 pages_per_run 页,避免每轮固定请求数;总页数仍由整个无头池分摊。 pages_per_run_min = 10 # Default: 0 # EN: Interval-based refresh in minutes. 0 disables interval scheduling. # ZH: 按间隔刷榜,0 表示关闭;例如 10 表示每 10 分钟一轮。 interval_minutes = 15 # Default: 0 # EN: Minute offset for interval scheduling. With interval_minutes=15 and offset=4, # the bot schedules at :04, :19, :34, :49 before jitter is applied. # ZH: 间隔刷榜的分钟偏移;例如 interval_minutes=15、offset=4 时,每小时 04/19/34/49 分调度,之后再叠加随机抖动。 interval_offset_minutes = 4 # Default: 0; EN: Second offset paired with interval_offset_minutes. With 15/4/5, slots are :04:05, :19:05, :34:05, :49:05. # ZH: 与分钟偏移配套的秒偏移;15/4/5 时槽位为 :04:05、:19:05、:34:05、:49:05。 interval_offset_seconds = 5 # Default: 0 # EN: Random scheduler delay after the nominal configured second. A nonzero value intentionally disables strict on-the-second execution. # ZH: 名义配置秒数后的随机延迟;非零时会刻意放弃严格整秒执行。 schedule_jitter_seconds = 240 # Default: 0.0 # EN: Minimum seconds between scheduled rank-page slots. Scheduled runs also spread the selected batch across their interval. # ZH: 定时刷榜页槽位的最小间隔秒数;定时任务还会把本轮页面均匀铺在整个调度间隔内。 request_interval_seconds = 8.0 # Default: 0.0 # EN: Maximum random offset applied to scheduled page slots; manual runs add up to this delay. # ZH: 定时页槽位的最大随机偏移秒数;手动刷新则额外延后不超过该值,用于避免固定频率。 request_jitter_seconds = 12.0 # Default: ""; EN: Optional active refresh window start. ZH: 可选的刷榜活跃时间起点。 active_start = "07:30:00" # Default: ""; EN: Optional active refresh window end; may cross midnight. # ZH: 可选的刷榜活跃时间终点;允许跨过午夜,比如 07:30 到 01:30。 active_end = "01:30:00" # Default: 01:15 through 04:45 every half hour. # EN: Additional fixed daily refresh times. Keep empty when interval_minutes is used. # ZH: 额外的每日固定刷榜时间;使用 interval_minutes 时通常保持为空。 times = [] # Default: collection-related global ranks plus peak user rank lists. # EN: Global ranks included in scheduled page refresh. # ZH: 定时刷新的全服榜;竞技/狂野/专家段位使用当前巅峰赛季。 rank_keys = ["图鉴积分", "成就点数", "精灵图鉴", "皮肤图鉴", "套装图鉴", "部件图鉴", "座驾图鉴", "刻印图鉴", "群星牌", "竞技段位", "狂野段位", "专家段位"] # Default: 24 # EN: Refresh cached pages older than this many hours after missing/partial pages. # ZH: 缺失页、部分缺失页补完后,刷新超过多少小时的旧页面。 refresh_stale_after_hours = 336 [seer.local_rank] # Default: true; EN: Enable local sample rank. ZH: 启用本地样本榜。 enabled = true # Default: 5000; EN: Max local players. ZH: 本地样本最大玩家数。 max_players = 5000 # Default: 100; EN: Batch query limit. ZH: 批量查询大小。 batch_limit = 100 # Default: true; EN: Enable scheduled refresh. ZH: 启用定时刷新。 auto_refresh = true # Default: "03:30:00"; EN: Daily refresh time in HH:MM:SS. ZH: 每日刷新时间,支持 HH:MM:SS。 time = "03:30:00" # Default: 300; EN: Refresh count limit. ZH: 单次刷新数量上限。 refresh_limit = 300 # Default: 24; EN: Refresh entries older than this many hours. ZH: 刷新超过多少小时的样本。 refresh_max_age_hours = 24 # Default: 0.5; EN: Delay between refresh queries. ZH: 刷新请求间隔秒数。 refresh_interval_seconds = 0.5 # Default: "data/seer/player_query_cache.sqlite" # EN: Local rank SQLite path. # ZH: 本地样本榜数据库。 path = "data/seer/player_query_cache.sqlite" [operations.private_extensions] # The currently supported private lineup extension reuses the public headless # pool, so its package and settings stay in this real-time-query chapter. A # future extension should place its feature-specific settings with its primary # user flow, rather than treating this package loader as its only config home. # ZH: 当前支持的私有阵容扩展复用公共无头池,因此其包与设置放在本实时查询章节。 # 未来私有扩展的功能设置应跟随主要用户流程放置,不应只因使用此包加载器就全部堆在这里。 # Optional private extension package. The main Unraid/Docker image remains # murmansk5000/ironsbot:latest; when enabled, startup pulls this package through # the mounted Docker socket, validates its manifest, and installs it under /app/data. # Default: false; EN: Enable the private extension package. ZH: 启用私有扩展包。 enabled = false # Default: "murmansk5000/ironsbot-private:latest"; EN: Private extension package image. # ZH: 私有扩展包镜像,不是机器人主镜像。 image = "murmansk5000/ironsbot-private:latest" # Default: "/ironsbot_extensions"; EN: Read-only package directory inside that image. # ZH: 私有镜像内的只读扩展包目录。 archive_path = "/ironsbot_extensions" # Default: "data/private_extensions"; EN: Installed package cache under /app/data. # ZH: 解包后的扩展缓存目录,会保留最后一次校验成功的版本。 data_path = "data/private_extensions" # Default: 60.0; EN: Startup pull and archive-read timeout seconds. # ZH: 启动时拉取和读取扩展包的超时秒数;失败不会阻止机器人启动。 timeout_seconds = 60.0 # Private-only values are passed through without public schema knowledge. [operations.private_extensions.settings.player_lineup] timeout_seconds = 15.0 cache_path = "data/seer/player_lineup_cache.sqlite" # Set DOCKER_REGISTRY_USERNAME and DOCKER_REGISTRY_TOKEN as Unraid/Docker # environment variables when the extension image is private. Do not put those # registry credentials in TOML. The same credentials are reused for Docker # image updates and private extension pulls. # ----------------------------------------------------------------------------- # Seer local data, rendering, and companion links # 赛尔号本地数据、渲染与结果附链 # ----------------------------------------------------------------------------- [seer.mintmark] # Default: true # EN: Merge connected mintmark records into one result and display every related ID. # ZH: 将关联刻印合并为一条并展示全部 ID;false 保留原记录并标注关联 ID,便于排查数据。 merge_connected = true [seer.new_content] # Default: [] # EN: Weekly-content categories that show a bounded item preview in the root menu. # Categories not listed remain folded regardless of their item count. # ZH: 仅以下分类在新增内容总菜单预览条目;未配置分类始终折叠。 # Available: achievement, pet, pet_skin, skill, mintmark, suit, equip, mount, # autocard_card, autocard_role, autocard_sanctuary_effect. # 可选值:achievement、pet、pet_skin、skill、mintmark、suit、equip、mount、 # autocard_card、autocard_role、autocard_sanctuary_effect。 # EN: Root-menu categories whose genuinely new entries may be previewed. # Modified entries always stay folded until the category submenu is opened. # ZH: 根菜单中可展开预览“真正新增”项目的分类;修改项始终折叠,进入分类子菜单后查看。 expanded_categories = [] # Default: 5; EN: Maximum items rendered for each configured root-menu preview. # Set 0 to disable ordinary previews. Focused category menus still show all items. # ZH: 每个已配置分类在总菜单最多预览的条目数;设为 0 关闭普通条目预览,子菜单仍显示全部。 # EN: Maximum genuinely new entries previewed per expanded root category. # ZH: 每个根菜单展开分类最多预览多少项真正新增内容;修改项不占用此数量。 auto_expand_max_items = 5 [seer.season] # Default: "群星牌赛季" # EN: Display name for the autocard season countdown. # ZH: 群星牌赛季倒计时显示名称。 autocard_name = "群星牌赛季" # Default: omitted/null # EN: Optional autocard season start time. Database currently does not provide it. # ZH: 可选的群星牌赛季开始时间;当前数据库暂未收录官方字段。 # autocard_start_time = 2026-06-20T10:00:00+08:00 # Default: omitted/null # EN: Optional autocard season end time. Fill it to show autocard countdown. # ZH: 可选的群星牌赛季结束时间;填写后“赛季倒计时”会显示群星牌剩余时间。 # autocard_end_time = 2026-07-17T10:00:00+08:00 [seer.render] # Default: 200; EN: Render cache max size in MB. ZH: 渲染缓存上限 MB。 cache_max_size_mb = 200 [seer.external_references] # Default: true for every option below. # EN: Append the matching SeerInfo companion page to successful query replies. # ZH: 在对应查询成功回复末尾附加 SeerInfo 查询页面;每项可单独关闭。 # These links are only attached to matching commands, never to unrelated replies. # 这些链接只会附在语义对应的结果上,不会附加到无关命令。 # player_query: 米米号/查询玩家信息与无头额度用尽提示。 # team_query: 战队查询。 # server_status: 开服查询与 /开服查询。 # weekly_preview: 下周预告。 # bilibili_history: “动态”历史菜单和无历史提示;单条动态仍只保留原文链接。 # peak_pool: 竞技池和专家池。 # peak_vote: 巅峰投票。 # peak_player_rank: 竞技/狂野/专家全服段位榜。 # peak_suit_rank: 竞技/狂野/专家套装榜。 # peak_title_rank: 竞技/狂野/专家称号榜。 # peak_pet_rank: 竞技/狂野/专家精灵月榜和总榜。 player_query = true team_query = true server_status = true weekly_preview = true bilibili_history = true peak_pool = true peak_vote = true peak_player_rank = true peak_suit_rank = true peak_title_rank = true peak_pet_rank = true # ============================================================================= # Database synchronization and bot lifecycle # 数据同步与机器人生命周期 # ============================================================================= [operations.data_sync] # 数据同步分两层: # - 普通启动/定时同步默认只下载 GitHub Release 里已经构建好的 SQLite。 # - /更新数据 会先只读检查当前发布数据,再显示操作菜单:1 只同步已发布数据;2 检查官方/上游并构建后同步。 # 选择 1 或 2 后立即执行。api-data 发布后自动派发 SeerAPI,下游完成后由 5 分钟轮询热同步。 # - /强制更新数据 的第 2 项会传 force=true,强制上游 Actions 重建;新周一致性闸门仍不会发布旧 api-data 生成的空索引。 # 如果只是想避免开机慢,改 on_startup=false;如果想开机也检查远程构建,改 startup_trigger_remote_build=true。 # Default: true; EN: Download existing release SQLite DBs on startup. ZH: 启动时下载现有 release SQLite,并把结果追加到开机通知;设为 false 可关闭。 on_startup = true # Default: false; EN: Trigger remote build pipeline during startup sync. ZH: 启动同步时先触发远程构建流水线;开启后才近似等同 /更新数据。 startup_trigger_remote_build = false # Default: true; EN: Enable scheduled DB sync. ZH: 启用定时数据库同步。 interval_enabled = true [operations.data_sync.sources.seerapi] # Default: SeerAPI data release URL. EN: SQLite download URL. ZH: SQLite 下载地址。 url = "https://github.com/Murmansk-Seer/seerapi/releases/download/seerapi-data-latest/seerapi-data.sqlite" # Default: SeerAPI data SHA URL. EN: Optional fingerprint URL. ZH: 可选 SHA256 指纹地址。 fingerprint_url = "https://github.com/Murmansk-Seer/seerapi/releases/download/seerapi-data-latest/seerapi-data.sqlite.sha256" # Default: 5; EN: Sync interval minutes. ZH: 同步间隔分钟。 interval_minutes = 5 # Default: 0; EN: Wall-clock second used by this source's interval sync. # ZH: 此数据源间隔同步使用的墙钟秒数。 interval_second = 5 # Default: "data/seerapi-data.sqlite"; EN: Local cache path. ZH: 本地缓存路径。 local_path = "data/seerapi-data.sqlite" [operations.data_sync.sources.seerapi.remote_build] # Default: false; EN: Allow the build action selected from manual /更新数据. ZH: 允许手动 /更新数据 选择第 2 项后触发 GitHub Actions 构建。 # EN: Each step reuses a recent queued/running workflow by default to avoid duplicate builds. # ZH: 每个步骤默认会复用最近正在排队/运行的同 workflow,避免重复触发导致排队变慢。 enabled = true # Default: false; EN: api-data publishes and dispatches the downstream SeerAPI build asynchronously. # ZH: api-data 发布后会异步派发 SeerAPI 构建;机器人随后按 5 分钟轮询热同步,不再重复强制构建。 downstream_publication_pending = true [[operations.data_sync.sources.seerapi.remote_build.steps]] name = "refresh_official_sources" repository = "Murmansk-Seer/data-update-workflows" workflow_id = "update.yml" ref = "main" timeout_seconds = 3600 poll_interval_seconds = 10 inputs = { force-update-assets = false, force-update-config = false, dispatch-api-data = false } [[operations.data_sync.sources.seerapi.remote_build.steps]] name = "refresh_unity_config" repository = "Murmansk-Seer/seer-unity-config-parser" workflow_id = "schedule.yml" ref = "main" timeout_seconds = 1800 poll_interval_seconds = 10 # EN: Ordered GitHub Actions pipeline executed before downloading this database. # ZH: 下载该数据库前顺序执行的 GitHub Actions 流水线;各 workflow 会先检查输入是否变化。 [[operations.data_sync.sources.seerapi.remote_build.steps]] name = "sync_config_sources" repository = "Murmansk-Seer/config-sources" workflow_id = "sync-upstream.yml" ref = "main" timeout_seconds = 600 poll_interval_seconds = 10 inputs = { force = false } [[operations.data_sync.sources.seerapi.remote_build.steps]] name = "build_api_data" repository = "Murmansk-Seer/api-data" workflow_id = "main.yml" ref = "main" timeout_seconds = 1800 poll_interval_seconds = 10 inputs = { debug_enabled = false, force = false } [operations.data_sync.sources.aliases] url = "https://github.com/Murmansk5000/IronsBot/releases/download/alias-db-latest/aliases-data.sqlite" fingerprint_url = "https://github.com/Murmansk5000/IronsBot/releases/download/alias-db-latest/aliases-data.sqlite.sha256" interval_minutes = 60 interval_second = 0 local_path = "data/aliases-data.sqlite" [operations.startup_notice] # Default: true; EN: Enable startup notice. ZH: 启用启动通知。 enabled = true # Default: "机器人已开启。"; EN: Startup notice message. ZH: 启动通知文本。 message = "机器人已开启。" # Default: 0.0; EN: Delay before sending startup notice. ZH: 启动通知延迟秒数。 delay = 0.0 [operations.docker_update] # Docker 更新依赖 Docker socket;Windows 源码运行建议关闭启动检查。 # /重启机器人、/机器人重启直接打开维护菜单;/更新镜像、/更新Docker、 # /更新docker 会先只读检查镜像,再打开同一菜单:1 仅重启;2 检查/更新镜像后重启。 # Default: true; EN: Check Docker image during natural startup before other startup runtimes. ZH: 自然启动时先检查 Docker 镜像;不需要可改为 false。 check_on_startup = true # Default: "murmansk5000/ironsbot:latest"; EN: Image expected for self update. ZH: 自更新目标镜像,仅用于提示和核对。 image = "murmansk5000/ironsbot:latest" # Default: "ironsbot"; EN: Container name to update. ZH: 要更新的容器名。 container_name = "ironsbot" # Default: "/var/run/docker.sock"; EN: Docker Engine socket mounted into the bot container. ZH: 挂载进机器人容器的 Docker Engine socket。 docker_socket_path = "/var/run/docker.sock" # Default: "containrrr/watchtower:latest"; EN: Temporary updater image used by Docker update checks. ZH: Docker 镜像更新检查使用的一次性更新器镜像。 watchtower_image = "containrrr/watchtower:latest" # Default: "1.40"; EN: Docker API version passed to Watchtower. ZH: 传给 Watchtower 的 Docker API 版本;Unraid 新版 Docker 需要不低于 1.40。 watchtower_docker_api_version = "1.40" # Default: 300.0; EN: Docker API timeout seconds. ZH: Docker API 超时时间。 timeout_seconds = 300.0 [operations.restart] # Default: false; EN: Enable scheduled bot restart. ZH: 启用定时重启。 enabled = false # Default: "04:30:00"; EN: Daily restart times in HH:MM:SS. ZH: 每日重启时间,支持 HH:MM:SS。 times = "04:30:00" # Default: 10.0; EN: Grace seconds before signaling. ZH: 发信号前宽限秒数。 grace_seconds = 10.0 # Default: true; EN: Signal parent process when restarting. ZH: 重启时优先结束父进程。 signal_parent = true