拾风
|
28c54dbec6
|
Merge branch 'dev' into feature/kfc
|
2025-12-01 16:06:47 +08:00 |
|
ikun-11451
|
46359a8933
|
应该是把私聊必回加回来了喵?
|
2025-11-30 21:51:09 +08:00 |
|
Windpicker-owo
|
1288fd6cf7
|
feat: 添加主动思考配置选项,优化问候功能和触发概率设置
|
2025-11-30 20:41:30 +08:00 |
|
ikun-11451
|
acafc074b1
|
依旧修pyright喵喵喵~
|
2025-11-29 22:20:55 +08:00 |
|
tt-P607
|
703b5724f9
|
Merge branch 'dev' of https://github.com/MoFox-Studio/MoFox-Core into dev
|
2025-11-29 02:06:33 +08:00 |
|
tt-P607
|
0746a73bce
|
feat(KFC): 🎉 Kokoro Flow Chatter 心流聊天器 - 私聊专属处理系统从零构建完成
这是一个全新的私聊聊天处理器,专为深度情感交互设计,从架构设计到代码实现全部从零完成。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🏗️ 核心架构 (7个核心模块)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 src/plugins/built_in/kokoro_flow_chatter/
├── chatter.py # 主处理器 - 协调所有组件的核心类
├── context_builder.py # S4U上下文构建器 - 超融合上下文系统
├── prompt_generator.py # V6三明治提示词生成器
├── action_executor.py # 动作执行器 - 解析+执行LLM动作
├── response_post_processor.py # 回复后处理器 - 分割+错别字
├── models.py # 数据模型 - Session/情感状态/心理日志
├── session_manager.py # 会话管理器 - 用户状态持久化
├── scheduler.py # 调度器 - 主动思考/超时处理
├── config.py # 配置类
└── plugin.py # 插件注册入口
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ 核心特性
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【V1-V3 基础框架】
- 心理状态驱动的交互模型 (KokoroSession)
- 连续时间观念和等待体验 (IDLE→RESPONDING→WAITING状态机)
- 心理日志系统 (MentalLogEntry)
- 动态情感状态 (EmotionalState)
【V4 动作系统集成】
- 动态动作发现 (复用ChatterActionManager)
- 支持所有AFC动作 (reply/emoji/poke_user/set_emoji_like等)
- LLM响应JSON解析和验证
【V5 超融合上下文】
- S4U用户中心上下文检索
- 三层记忆系统集成 (感知/短期/长期)
- 时间感知块 (时间段+日程+情境)
- 人物关系信息注入
- 跨聊天上下文共享
【V6 最终优化】
- 三明治提示词结构 (系统层→上下文层→指令层)
- ActionModifier动作筛选器集成 (三阶段预筛选)
- 阶段0: 聊天类型过滤
- 阶段2: 关联类型匹配
- 阶段3: go_activate()激活判定
- 回复分割器复用AFC核心逻辑 (split_into_sentences_w_remove_punctuation)
- 修复model配置 (使用replyer而非utils)
- 修复context_builder异步问题
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 技术细节
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
提示词结构 (V6三明治):
┌─────────────────────────────────────┐
│ 🍞 系统层 (人设/身份/表达风格) │
├─────────────────────────────────────┤
│ 🥬 上下文层 │
│ ├─ 时间感知块 │
│ ├─ 三层记忆 (感知+短期+长期) │
│ ├─ 人物关系 │
│ ├─ 对话历史 │
│ └─ 用户最新消息 │
├─────────────────────────────────────┤
│ 🍞 指令层 (JSON输出格式/可用动作) │
└─────────────────────────────────────┘
动作筛选效果: 13个动作 → 约5-7个 (节省token+提升决策质量)
回复分割: 长消息自动按标点分割成多条发送
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 配置项 (bot_config.toml)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[kokoro_flow_chatter]
enable = true
max_wait_seconds_default = 300
enable_continuous_thinking = true
[kokoro_flow_chatter.proactive_thinking]
enabled = true
silence_threshold_seconds = 7200
min_affinity_for_proactive = 0.3
min_interval_between_proactive = 1800
enable_morning_greeting = true
enable_night_greeting = true
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 设计理念
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
KFC不是独立人格,而是:
- 复用全局人设、情感框架和回复模型
- 专注于"体验→决策→行动"的私聊交互模式
- 从"消息响应者"转变为"对话体验者"
- 深度情感连接和长期关系维护
|
2025-11-29 02:05:56 +08:00 |
|
minecraft1024a
|
a8f899a22f
|
refactor(context): 简化跨上下文功能,移除通用共享组模式
移除了基于白名单/黑名单的通用上下文共享组(ContextGroup)功能。此模式实现复杂且与S4U模式功能重叠,移除后可大幅简化配置项和内部逻辑。
主要变更:
- 从配置中删除了 `ContextGroup` 模型和 `cross_context.groups` 列表。
- 删除了 `build_cross_context_normal` 和 `get_context_group` 函数。
- 保留并增强了S4U(Search for User)模式,为其增加了更详细的日志和健壮性检查。
- `get_intercom_group_context` 函数被调整为专门服务于 `maizone_context_group`。
BREAKING CHANGE: 移除了 `cross_context.groups` 配置项及相关的通用上下文共享组功能。请迁移至S4U模式以实现跨上下文需求。
|
2025-11-28 20:39:16 +08:00 |
|
Windpicker-owo
|
73aaedaca6
|
fix: 更新硬编码的版本号至 0.13.0-alpha.4
|
2025-11-27 22:09:29 +08:00 |
|
Windpicker-owo
|
43483b934e
|
feat: 更新机器人配置并添加数据库迁移脚本
- 将bot_config_template.toml中的版本升级至7.9.0
- 增强数据库配置选项以支持PostgreSQL
- 引入一个新脚本,用于在SQLite、MySQL和PostgreSQL之间迁移数据
- 实现一个方言适配器,用于处理特定于数据库的行为和配置
|
2025-11-27 18:45:01 +08:00 |
|
Windpicker-owo
|
369639a8f1
|
feat: 添加守护线程版本的队列监听器以避免阻塞退出,优化配置初始化逻辑,改进消息构建中的用户信息处理
|
2025-11-27 14:06:17 +08:00 |
|
Windpicker-owo
|
3f02804d9d
|
chore(config): 更新版本号至0.13.0-alpha.3
|
2025-11-26 22:05:13 +08:00 |
|
Windpicker-owo
|
8a6b141017
|
重构代码以使用 mofox_wire 替代 mofox_bus,更新相关文档和示例
|
2025-11-25 22:45:57 +08:00 |
|
Windpicker-owo
|
fee7611e99
|
feat: 实现消息编解码器和消息处理模型
- 添加编解码器,用于序列化和反序列化MessageEnvelope对象。
- 创建消息模型,包括分段(Seg)、群组信息(GroupInfo)、用户信息(UserInfo)、格式信息(FormatInfo)、模板信息(TemplateInfo)、基础消息信息(BaseMessageInfo)和消息基础(MessageBase)。
引入路由器以管理消息路由和连接。
- 实现运行时机制,通过钩子和路由来处理消息处理。
- 使用HTTP和WebSocket客户端和服务器开发传输层,以进行消息传输。
- 为消息内容和信封定义类型,以标准化消息结构。
|
2025-11-21 18:40:51 +08:00 |
|
Windpicker-owo
|
8dc754e562
|
fix(config): 更新 MMC_VERSION 至 0.13.0-alpha.2
|
2025-11-20 18:40:07 +08:00 |
|
tt-P607
|
5a93867417
|
fix(config): 临时修复 master_users 加载失败问题
问题描述:
由于未明原因,配置文件(bot_config.toml)中的 `permission.master_users` 字段在加载过程中被意外清空,导致权限系统无法正确识别 Master 用户。初步排查指向复杂的配置版本自动更新与迁移逻辑。
解决方案:
在 `config.py` 的 `load_config` 函数中,于 Pydantic 模型验证完成后,增加了一段临时修复代码。该代码会从 `tomlkit` 解析出的原始配置数据中,重新读取 `master_users` 的值,并将其强制赋给最终的 `config` 对象。
具体实现:
1. 使用 `config_data.unwrap()` 将 `tomlkit` 对象安全地转换为标准 Python 字典。
2. 从字典中提取 `permission.master_users` 的值。
3. 将提取到的值直接赋给 `config.permission.master_users`。
4. 添加了详细的日志,以便追踪此修复操作的执行情况。
影响:
- **正面**:立即恢复了 Master 用户的识别功能,解决了权限检查失效的核心问题。
- **注意**:这是一个临时性的解决方案(workaround),并未从根本上解决配置更新逻辑中可能存在的缺陷。后续仍需对该逻辑进行深入排查和重构。
|
2025-11-20 14:39:27 +08:00 |
|
tt-P607
|
fa59ad7ce9
|
feat(config): 为清晰起见添加 use_anti_truncation 别名
在 `ModelInfo` Pydantic 模型的 `anti_truncation` 字段中添加了别名 `use_anti_truncation`。
此更改提高了配置文件的可读性和明确性,使其更清楚地表明这是一个用于启用该功能的布尔标志,同时不改变内部属性名称。
|
2025-11-19 23:58:52 +08:00 |
|
Windpicker-owo
|
e70779347a
|
feat: 重构记忆系统配置,移除三层记忆相关配置,优化全局记忆管理逻辑,支持批量生成文本向量
|
2025-11-19 23:58:51 +08:00 |
|
Windpicker-owo
|
8f7b695b74
|
feat: 优化长期记忆转移间隔和最大延迟,增强短期记忆清理逻辑,改进三级记忆系统属性处理
|
2025-11-19 23:58:50 +08:00 |
|
Windpicker-owo
|
8c6242026d
|
feat: 优化事件管理,添加事件处理超时和并发限制功能
|
2025-11-19 23:58:49 +08:00 |
|
Windpicker-owo
|
5798d11066
|
feat: 采用三层内存系统实现统一内存管理器
- 添加了UnifiedMemoryManager,以整合感知层、短期记忆层和长期记忆层。
- 实现了初始化、消息添加和内存搜索功能。
- 引入了记忆从短期存储到长期存储的自动转移机制。
- 开发了用于结构化内存表示的内存格式化工具。
- 增强日志记录功能,以便在内存操作过程中更好地进行追踪。
|
2025-11-19 23:58:49 +08:00 |
|
Windpicker-owo
|
e44f238e53
|
feat:实现短期内存管理器和统一内存管理器
- 添加了ShortTermMemoryManager来管理短期记忆,包括提取、决策和记忆操作。
- 集成大型语言模型(LLM),用于结构化记忆提取和决策过程。
- 基于重要性阈值,实现了从短期到长期的内存转移逻辑。
- 创建了UnifiedMemoryManager,通过统一接口整合感知记忆、短期记忆和长期记忆的管理。
- 通过法官模型评估来增强记忆提取过程的充分性。
- 增加了自动和手动内存传输功能。
- 包含内存管理操作和决策的全面日志记录。
|
2025-11-19 23:58:48 +08:00 |
|
minecraft1024a
|
717d4ba555
|
feat(plugin_system): 引入插件HTTP端点系统
引入了全新的 `BaseRouterComponent` 组件类型,允许插件开发者通过继承并实现 `register_endpoints` 方法来创建 FastAPI 路由。
- 插件系统现在可以自动发现并注册这些路由组件,并将它们挂载到主 FastAPI 应用的 `/plugins/<plugin_name>` 前缀下。
- 新增了全局配置 `[plugin_http_system]`,提供了总开关、API 速率限制和 API 密钥认证 (`X-API-Key`) 等功能,以确保端点的安全性和稳定性。
- 更新了 `hello_world_plugin` 插件,增加了一个简单的 `/greet` 端点作为实现示例。
|
2025-11-19 23:58:48 +08:00 |
|
minecraft1024a
|
fb3f42640d
|
feat(prompt): 默认启用抗审查指令并简化配置
为了简化用户配置并默认提高模型的抗审查能力,本次更新移除了 `prepend_noise_instruction` 配置选项。
现在,抗审查指令将作为默认行为,在处理所有提示词时自动添加,不再需要用户手动开启。同时,更新了模板文件中的注释,使其更清晰易懂。
|
2025-11-19 23:58:47 +08:00 |
|
minecraft1024a
|
198976b68f
|
refactor(prompt): 将注意力和内容混淆统一为提示词扰动
本次提交重构了提示词修改逻辑,将之前独立的“注意力优化”和“内容混淆”功能合并为一个统一的概念:“提示词扰动”(Prompt Perturbation)。
主要变更包括:
- 在模型配置中引入新的统一选项:`enable_prompt_perturbation`, `perturbation_strength` 和 `enable_semantic_variants`。
- 将原 `AttentionOptimizer` 中的噪声注入和语义变体逻辑迁移到 `llm_models` 模块中,作为扰动策略的一部分。
- 简化 `attention_optimizer.py`,使其专注于提示词块重排 (`BlockShuffler`)。
- 更新 `_PromptProcessor` 以根据新的统一配置来协调不同的扰动技术。
此项更改为用户简化了配置,并通过集中化相关逻辑,提供了一个更清晰、更易于维护的实现。
BREAKING CHANGE: 内容混淆的相关配置已被替换。`enable_content_obfuscation` 和 `obfuscation_intensity` 配置项已移除。用户需更新配置以使用新的 `enable_prompt_perturbation` 和 `perturbation_strength`。
|
2025-11-19 23:58:46 +08:00 |
|
minecraft1024a
|
45b6d7d06c
|
feat(config): 将内容混淆设置移至模型级别
内容混淆功能的相关配置项(`enable_content_obfuscation` 和 `obfuscation_intensity`)已从 API Provider 级别迁移到单个模型级别。
这一调整提供了更精细的控制能力,允许用户为特定模型独立启用或配置内容混淆,而不是统一应用于同一API下的所有模型。这对于处理来自同一提供商但审查策略不同的模型非常有用。
BREAKING CHANGE: `enable_content_obfuscation` 和 `obfuscation_intensity` 配置项已从 `[[api_providers]]` 部分移除。请将这些配置项迁移到需要此功能的 `[[models]]` 部分下。
|
2025-11-19 23:58:46 +08:00 |
|
minecraft1024a
|
80b5c3c6f8
|
refactor(prompt): 移除注意力优化功能
注意力优化功能(通过添加随机空白字符或语义变体)被证明效果不佳且可能引入不稳定性。
为了简化代码库、减少用户配置的复杂性并提高系统的稳定性,决定移除此实验性功能。这使得提示词构建过程更加直接和可预测。
BREAKING CHANGE: 移除了注意力优化功能及其所有相关配置。用户需要从配置文件中移除 `[attention_optimization]` 部分。
|
2025-11-19 23:58:46 +08:00 |
|
Windpicker-owo
|
40709d95de
|
rebase 清理
|
2025-11-19 23:45:47 +08:00 |
|
Windpicker-owo
|
05205c60b3
|
更新版本号
|
2025-11-19 23:37:54 +08:00 |
|
tt-P607
|
9f2f031966
|
feat(config): 添加配置以切换知识摘要
这在 `lpmm_knowledge` 部分引入了一个新的配置选项 `enable_summary`。用户现在可以将其设置为 `false`,以防止知识库摘要被包含在最终提示上下文中。
这提供了对输出冗长程度的更多控制,并有助于管理令牌消耗。该功能默认启用,以保持现有行为。
|
2025-11-19 23:37:49 +08:00 |
|
Windpicker-owo
|
c684b2a5a9
|
feat(config): 添加表情包回复配置,允许或禁止回复表情包消息
|
2025-11-19 23:37:48 +08:00 |
|
Windpicker-owo
|
c0e400f423
|
feat(attention): 添加注意力优化器以增强提示词多样性和防止注意力退化
refactor(prompt): 使用 asyncio.gather 替代 as_completed 以提升并发性能
refactor(config): 添加注意力优化配置选项
refactor(prompt_params): 增加注意力优化开关
|
2025-11-19 23:37:37 +08:00 |
|
Windpicker-owo
|
16c14d194e
|
更新机器人配置模板,并添加路径扩展算法规范
- 将bot_config_template.toml中的版本号从7.6.7更新为7.6.8。
- 在bot_config_template.toml中添加了用于控制多个回复的配置选项。
- 引入了一份全面的路径扩展算法规范文档,详细介绍了算法概述、核心数据结构、算法流程、性能优化、接口定义和测试用例。
|
2025-11-19 23:37:35 +08:00 |
|
Windpicker-owo
|
40e7b3b514
|
feat: 添加路径评分扩展算法和内存去重工具
- 基于图路径传播,实现了一种路径评分扩展算法,以优化内存检索。
引入了内存去重工具,以识别和合并相似的内存,从而提高结果质量。
- 更新了路径扩展的配置选项,包括最大跳数、阻尼因子和剪枝阈值。
- 在路径扩展中增加了对首选节点类型的支持,以提高内存检索的相关性。
- 增强的日志记录功能,以便更好地跟踪路径扩展和去重过程。
|
2025-11-19 23:37:21 +08:00 |
|
明天好像没什么
|
5d7d19625e
|
创建了新的反注入
|
2025-11-19 23:36:36 +08:00 |
|
Windpicker-owo
|
9ffc26bec3
|
fix(config): 增加缓存生存时间和最大内存占用限制
|
2025-11-19 23:36:27 +08:00 |
|
Windpicker-owo
|
bab62ed42e
|
refactor: 优化兴趣值管理器和统一调度器,增强任务执行的并发控制
|
2025-11-19 23:36:23 +08:00 |
|
明天好像没什么
|
26d22e5dd8
|
ruff
|
2025-11-19 23:36:06 +08:00 |
|
minecraft1024a
|
dad6a3fc6f
|
feat(search): 添加 Serper 搜索引擎支持
本次更新为 WebSearch 模块集成了新的搜索引擎 Serper。
- 在 `WebSearchConfig` 中增加了 `serper_api_keys` 配置项。
- 更新了配置文件模板,加入了 `serper_api_keys` 选项,并在 `enabled_engines` 的可选列表中添加了 "serper"。
- 相应地更新了配置文件版本号。
|
2025-11-19 23:35:40 +08:00 |
|
Windpicker-owo
|
5c40fe50c9
|
feat(memory): 更新记忆管理和配置,优化整合逻辑,添加语义相似度阈值
|
2025-11-19 23:35:31 +08:00 |
|
Windpicker-owo
|
2dbe615057
|
feat(memory-graph): 添加记忆图系统配置,整合节点去重合并器与记忆管理器
|
2025-11-19 23:35:30 +08:00 |
|
Windpicker-owo
|
b6a693895b
|
feat: 重构聊天系统的内存处理与格式化功能
- 更新了DefaultReplyer,采用新的内存格式化工具以提供更优质的内存描述。
- 已移除 Config 类中已弃用的内存配置。
- 在主系统中增强内存系统初始化检查,确保配置正确。
- 优化了MemoryManager,使其可直接使用全局配置进行内存设置。
- 新增了一个内存格式化工具,用于将内存对象转换为自然语言描述。
- 更新了内存工具,提供了更清晰的内存创建与管理指南。
- 精炼插件工具与使用提示,提升用户交互体验与记忆准确性。
- 根据内存系统结构的变化调整了机器人配置模板。
|
2025-11-19 23:32:11 +08:00 |
|
Windpicker-owo
|
5439e3bd82
|
fix(memory-graph): 修复集成测试问题
- 修复Config类memory字段验证问题 (改为Optional)
- 为Memory模型添加activation属性
- 修复CreateMemoryTool返回值 (添加memory_id)
- 为GraphStore添加remove_memory方法
- 修复integration测试脚本
- 所有集成测试通过 (5/5)
Changes:
- src/config/config.py: memory字段改为Optional
- src/memory_graph/models.py: 添加activation属性
- src/memory_graph/plugin_tools/memory_plugin_tools.py: 返回memory_id
- src/memory_graph/storage/graph_store.py: 添加remove_memory方法
- tests/test_memory_graph_integration.py: 修复工具返回值检查
Tests:
基本记忆操作 (CRUD + 检索)
LLM工具集成 (创建记忆)
记忆生命周期 (激活/整合/遗忘)
维护任务 (调度+手动执行)
配置系统 (默认/自定义/bot_config)
|
2025-11-19 23:32:09 +08:00 |
|
Windpicker-owo
|
08595da791
|
feat(config): 添加消息缓存系统配置和表达方式过期天数设置
feat(expression_learner): 实现清理过期表达方式功能
fix(context_manager): 根据配置检查消息缓存系统启用状态
|
2025-11-19 23:32:04 +08:00 |
|
Windpicker-owo
|
5ba79de0e7
|
refactor(affinity-flow): 移除关系追踪系统参数配置
|
2025-11-19 23:31:59 +08:00 |
|
Windpicker-owo
|
5e6e56454d
|
feat(affinity-flow): 通过标签扩展与提及分类增强兴趣匹配
- 实施扩展标签描述以实现更精确的语义匹配
- 增加强/弱提及分类,并附带独立的兴趣评分
- 重构机器人兴趣管理器,采用动态嵌入生成与缓存机制
- 通过增强的@提及处理功能优化消息处理
- 更新配置以支持回帖提升机制
- 将亲和力流量聊天重新组织为模块化结构,包含核心、规划器、主动响应和工具子模块
- 移除已弃用的规划器组件并整合功能
- 为napcat适配器插件添加数据库表初始化功能
- 修复元事件处理器中的心跳监控
|
2025-11-19 23:31:58 +08:00 |
|
Windpicker-owo
|
ecef8edd28
|
feat(cache): 提升内存管理与监控能力
- 在CacheManager中添加健康监控系统,并提供详细的内存统计信息
- 使用新的memory_utils模块实现精确的内存估算
- 添加基于大小的缓存条目限制,以防止过大项目
- 通过去重内存计算优化缓存统计
- 在MultiLevelCache中添加过期条目的自动清理功能
- 增强批处理调度器缓存功能,支持LRU驱逐策略和内存追踪
- 更新配置以支持最大项目大小限制
- 添加全面的内存分析文档和工具
重大变更:CacheManager 的默认 TTL 参数现改为 None 而非 3600。数据库兼容层默认禁用缓存,以防止旧版代码过度使用缓存。
|
2025-11-19 23:31:55 +08:00 |
|
Windpicker-owo
|
29a5357728
|
feat(cache): 添加自定义TTL支持和内存限制配置
|
2025-11-19 23:31:55 +08:00 |
|
Windpicker-owo
|
ab8d43bb49
|
fix(config): 更新MMC版本号至0.12.0-alpha-1
|
2025-11-19 23:31:53 +08:00 |
|
Windpicker-owo
|
7534536e22
|
refactor(config): 移除普通聊天配置及相关字段,更新配置模板以反映变更
|
2025-11-19 23:30:18 +08:00 |
|
minecraft1024a
|
2ee6aa3951
|
refactor(core): 优化类型提示与代码风格
本次提交对项目代码进行了广泛的重构,主要集中在以下几个方面:
1. **类型提示现代化**:
- 将 `typing` 模块中的 `Optional[T]`、`List[T]`、`Dict[K, V]` 等旧式类型提示更新为现代的 `T | None`、`list[T]`、`dict[K, V]` 语法。
- 这提高了代码的可读性,并与较新 Python 版本的风格保持一致。
2. **代码风格统一**:
- 移除了多余的空行和不必要的空格,使代码更加紧凑和规范。
- 统一了部分日志输出的格式,增强了日志的可读性。
3. **导入语句优化**:
- 调整了部分模块的 `import` 语句顺序,使其符合 PEP 8 规范。
这些更改不涉及任何功能性变动,旨在提升代码库的整体质量、可维护性和开发体验。
|
2025-11-19 23:30:12 +08:00 |
|