名称: birthday-reminder
描述: 使用自然语言管理生日。将生日信息存储在 /home/clawd/clawd/data/birthdays.md 文件中,可获取即将到来的生日提醒并计算年龄。当用户提及生日、想要添加/记住某人生日、查看即将到来的生日或询问某人的年龄/生日时使用。能理解诸如“X hat am DD.MM. Geburtstag”、“Wann hat X Geburtstag?”、“Nächste Geburtstage”等短语。
使用自然语言管理生日。信息存储在 data/birthdays.md 文件中,支持自然语言查询。
生日信息存储在 /home/clawd/clawd/data/birthdays.md 文件中:
# 生日列表
- **Valentina** - 14.02.2000 (即将 26 岁)
- **Max** - 15.03.1990
当用户说出类似以下内容时:
- "Valentina 的生日是 2 月 14 日"
- "添加:Max,生日 1990年3月15日"
- "X 出生于 1985年5月10日"
执行操作:
1. 解析姓名和日期
2. 提取年份(如果提供)
3. 计算即将到来的年龄:生日年份 - 出生年份
4. 将信息追加到 /home/clawd/clawd/data/birthdays.md 文件
5. 确认并附带年龄信息
当用户询问:
- "Valentina 什么时候过生日?"
- "接下来有哪些生日?"
- "Valentina 多大了?"
- "下一个生日"
执行操作:
1. 读取 /home/clawd/clawd/data/birthdays.md 文件
2. 解析所有条目
3. 计算距离每个生日的天数
4. 按即将到来的日期排序
5. 如果已知年份,则显示即将到来的年龄
当用户说:
- "显示所有生日"
- "列出我的生日列表"
执行操作:
1. 读取文件
2. 显示格式化的列表,并包含距离每个生日的天数
支持多种日期格式:
- "14. Februar" → 14.02
- "14.02." → 14.02
- "14.02.2000" → 14.02.2000
- "14.2.2000" → 14.02.2000
from datetime import datetime
def calculate_turning_age(birth_year, birthday_month, birthday_day):
today = datetime.now()
birthday_this_year = today.replace(month=birthday_month, day=birthday_day)
if today.date() <= birthday_this_year.date():
birthday_year = today.year
else:
birthday_year = today.year + 1
return birthday_year - birth_year
def days_until(month, day):
today = datetime.now()
birthday = today.replace(month=month, day=day)
if birthday < today:
birthday = birthday.replace(year=today.year + 1)
return (birthday - today).days
对于定时任务/提醒,每天检查生日并在以下情况通知:
- 生日前 7 天
- 生日前 1 天
- 生日当天
使用 scripts/reminder.py 中的 check_reminders() 逻辑。
每行格式:- **姓名** - DD.MM.YYYY (即将 X 岁) 或 - **姓名** - DD.MM.
保持文件按日期(月/日)排序,便于阅读。