Install
openclaw skills install matter-day-reminder管理亲友重要日期(生日、纪念日等)的个人社交助理。当用户需要记录联系人信息、 设置生日提醒、管理纪念日或生成祝福语时使用此技能。支持农历/阳历日期、双节点提醒 (提前7天准备礼物+当天推送祝福),以及AI生成个性化祝福语和礼物建议。 触发关键词:生日提醒、纪念日、重要日期、联系人管理、礼物建议、祝福语生成、 农历生日、阳历生日、社交助理、亲友管理
openclaw skills install matter-day-reminder帮助你管理亲友的重要日期(生日、纪念日等),提供智能双节点提醒和AI生成的祝福语与礼物建议。
lunar-javascript 库自动处理农历转换每个联系人为独立的 Markdown 文件,存储在配置的数据目录中:
---
name: "张三"
relationship: "friend" # friend | family | close_friend | colleague
relationship_detail: "大学同学,喜欢篮球"
tags: ["篮球", "科技"]
created_at: "2024-01-15"
updated_at: "2024-01-15"
---
# 张三
## 事件
### 生日
- **类型**: 生日
- **日期**: 1990-05-20
- **农历**: false
- **提醒**: true
### 结婚纪念日
- **类型**: 纪念日
- **日期**: 2020-10-01
- **农历**: false
- **提醒**: true
## 备注
- 不喜欢甜食
- 最近在看《三体》
reminder-data/
├── config.yml # 全局配置
├── contacts/
│ ├── zhang-san.md
│ ├── li-si.md
│ └── wang-wu.md
└── logs/
└── reminders.log # 提醒日志
# 数据存储路径
data_path: "./reminder-data"
# 提醒设置
reminders:
enabled: true
advance_days: 7 # 提前提醒天数
# 推送设置
notifications:
primary: "opencode" # 主渠道
fallback: "email" # 兜底渠道
# 邮件设置(可选)
email:
smtp_host: "smtp.gmail.com"
smtp_port: 587
username: "your-email@gmail.com"
password: "your-app-password"
to_address: "your-email@gmail.com"
# AI 生成设置
ai_generation:
enabled: true
tone_adaptation: true # 根据关系调整语气
当用户想要添加联系人时:
当用户提到生日或纪念日时,必须明确询问是农历还是阳历。如果用户提供了农历日期,无论使用什么格式,都要统一转换为标准格式存储。
日期输入处理规则:
阳历日期(保持原样):
YYYY-MM-DD1998-05-20农历日期(必须统一为标准格式):
- **日期**: 农历X月X日格式转换规则:
- **日期**: 农历X月X日- **农历**: true数字转中文对照表:
1→一, 2→二, 3→三, 4→四, 5→五, 6→六,
7→七, 8→八, 9→九, 10→十, 11→十一, 12→十二
对话示例:
用户:帮我记一下我朋友的生日
助手:好的!请问这位朋友叫什么名字?
用户:叫李四,是我大学同学
助手:好的,李四,大学同学关系。请问他的生日是什么时候?
用户:农历八月初五
助手:收到。农历八月初五。还有其他需要记录的信息吗?比如兴趣爱好、不喜欢的礼物类型等?
用户:他喜欢打篮球,不喜欢甜食
助手:好的,已记录。还有其他事件需要添加吗?比如你们认识的纪念日?
用户:没有了
助手:好的,我现在为你创建联系人文件...
✅ 已创建联系人:李四
📁 文件位置:reminder-data/contacts/li-si.md
📅 事件:生日(农历八月初五)
🏷️ 标签:篮球
⚠️ 注意:不喜欢甜食
当检查当天需要提醒的事件时:
lunar-javascript 转换为当年阳历日期使用 lunar-javascript 库进行农历/阳历转换:
const { Lunar } = require('lunar-javascript');
// 农历转阳历
function lunarToSolar(lunarYear, lunarMonth, lunarDay) {
const lunar = Lunar.fromYmd(lunarYear, lunarMonth, lunarDay);
const solar = lunar.getSolar();
return {
year: solar.getYear(),
month: solar.getMonth(),
day: solar.getDay()
};
}
// 检查今年农历日期对应的阳历日期
function getThisYearSolarDate(lunarMonth, lunarDay) {
const currentYear = new Date().getFullYear();
return lunarToSolar(currentYear, lunarMonth, lunarDay);
}
闰月处理:lunar-javascript 会自动标记闰月。在提醒逻辑中,确保闰月仅在首月触发一次。
用户:帮我添加一个朋友
助手:好的!请问这位朋友叫什么名字?
...
用户:最近有什么重要日子吗?
助手:让我查看一下...
📅 未来7天提醒:
1. 张三的生日 - 3天后(5月20日)
💡 建议礼物:篮球相关周边(预算≤300元)
2. 父母结婚纪念日 - 5天后(10月1日)
💡 建议礼物:相册、鲜花(预算由AI推断)
用户:帮我写个生日祝福给李四
助手:基于李四的信息(大学同学、喜欢篮球),我为你生成了以下祝福语:
"李四,生日快乐!🎂 又一年过去了,希望你球场上依旧生龙活虎,生活里也能像投三分一样精准命中每一个目标。大学时光历历在目,愿我们的友谊像篮球一样,越弹越高!🏀"
需要我调整语气风格吗?比如更正式一些或更幽默一些?
该 skill 依赖以下 Node.js 脚本(位于 scripts/ 目录):
cd scripts
npm install lunar-javascript
reminder-data 目录,可以使用 Git 进行版本控制lunar-javascript 库基于标准农历算法,但极端边界年份(如1900年前)可能不准确Q: 农历日期转换错误? A: 请确认输入的农历月份和日期正确。闰月需要特别标注(如"闰八月")。
Q: 提醒没有触发? A: 检查:
reminders.enabled 是否为 truereminder: trueQ: 如何修改联系人信息? A: 直接编辑对应的 Markdown 文件即可,格式为标准的 YAML Frontmatter + Markdown。
在联系人文件中,可以自定义事件类型:
### 毕业纪念日
- **类型**: 自定义
- **日期**: 2015-06-30
- **农历**: false
- **提醒**: true
- **提前天数**: 3 # 可覆盖默认的7天
在配置文件中添加模板:
ai_generation:
templates:
friend: "{name},生日快乐!希望你..."
family: "亲爱的{name},祝你..."