# 每日对话限制插件 按**会话**限制 LangBot 每天的对话次数,并内置可视化**管理页面**,可查看、配置和重置各会话的限制——可用于生产环境。 ## 功能 - **按会话的每日限制**——每个私聊 / 群聊独立计数 - **管理页面**(位于 LangBot 后台),可以: - 查看所有被追踪的会话,含今日用量与进度条 - 设置**新会话的默认上限** - 为**单个会话单独设置上限** - **手动重置**单个会话计数,或一键全部重置 - 停止追踪(移除)某个会话 - 修改超限提示语、静默模式、重置时区与重置时间点——无需重启 - **静默模式**——超限消息直接丢弃,不回复 - **时区感知重置**——可配置每日重置的 UTC 偏移与时间点 - **持久化**——所有状态存储在插件存储中,重启后依然保留 ## 组件 | 路径 | 类型 | 作用 | |------|------|------| | `main.py` | Plugin | 共享状态、计数/限制/重置逻辑、持久化 | | `components/event_listener/` | EventListener | 对每次对话计数,达到上限时拦截 | | `components/pages/manage/` | Page | 管理界面(会话、默认值、手动重置) | ## 配置项 以下为**初始默认值**;所有项均可在管理页面中实时修改。 | 选项 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `daily_limit` | integer | `50` | 每个会话每天的默认对话次数上限。`0` 表示不限制。 | | `limit_message` | string | `您今天的对话次数已达上限,请明天再来吧~` | 超出限制时显示的提示语。 | | `reset_timezone_offset` | integer | `8` | 每日重置的 UTC 偏移小时数(如东八区为 `8`,东九区为 `9`)。 | | `reset_hour` | integer | `0` | 每天重置计数器的时间点(按配置的时区)。 | | `silent_mode` | boolean | `false` | 开启后超限消息将被静默丢弃。 | ## 工作原理 一个**会话**即 `{类型}:{ID}`——某个具体的私聊或群聊。监听器挂接 `PersonNormalMessageReceived` 与 `GroupNormalMessageReceived`,对每条消息检查该会话计数是否 达到其有效上限(会话单独设置的值,或全局默认值)。达到上限时,根据配置回复提示语或静默丢弃 (静默模式),并阻止默认的 LLM 流程。 计数器在配置时区的配置时间点滚动重置。管理页面通过插件的 `handle_api` 读写同一份内存 + 持久化 状态,因此修改会立即生效。