-- ========== Smart Break Reminder (Keyboard Maestro 版) ==========
-- 功能:
-- 1) 按时间段选择句子(早餐/午餐/晚餐 + 上午/下午/晚上)
-- 2) 仅当 Safari 为前台且成功获取标题时,按“概率”插入带网页标题的提示(默认 30%)
-- 3) 句子池可留空;留空时将使用内置兜底句子,保证脚本可运行
-- 4) 你可在 Keyboard Maestro 中创建变量“PageTitleChance”来调整标题提示的概率(0~100)
-- -------------- 时间与时段 --------------
set currentHour to hours of (current date)
set currentMinute to minutes of (current date)
set currentTime to currentHour * 60 + currentMinute
-- 用餐时间段(分钟):早餐 07:00–08:30;午餐 12:00–13:30;晚餐 18:00–19:30
set mealTimes to {breakfast:{420, 510}, lunch:{720, 810}, dinner:{1080, 1170}}
-- 判定 periodKey
if currentTime ≥ (item 1 of (breakfast of mealTimes)) and currentTime ≤ (item 2 of (breakfast of mealTimes)) then
set periodKey to "breakfast"
else if currentTime ≥ (item 1 of (lunch of mealTimes)) and currentTime ≤ (item 2 of (lunch of mealTimes)) then
set periodKey to "lunch"
else if currentTime ≥ (item 1 of (dinner of mealTimes)) and currentTime ≤ (item 2 of (dinner of mealTimes)) then
set periodKey to "dinner"
else if currentHour ≥ 6 and currentHour < 12 then
set periodKey to "morning"
else if currentHour ≥ 12 and currentHour < 18 then
set periodKey to "afternoon"
else
set periodKey to "evening"
end if
-- -------------- 前台应用 & Safari 网页标题 --------------
set frontAppName to ""
try
tell application "System Events"
set frontAppName to name of first application process whose frontmost is true
end tell
on error
set frontAppName to ""
end try
set pageTitle to ""
if frontAppName is "Safari" then
tell application "Safari"
try
if exists front document then set pageTitle to name of front document
on error
set pageTitle to ""
end try
end tell
end if
-- -------------- (可选)概率参数:从 KM 变量读取,否则用默认 30 --------------
set pageTitleChance to 30
try
tell application "Keyboard Maestro Engine"
set v to getvariable "PageTitleChance"
end tell
if v is not "" then
set vInt to v as integer
if vInt < 0 then set vInt to 0
if vInt > 100 then set vInt to 100
set pageTitleChance to vInt
end if
end try
-- -------------- 兜底句池(当你未填充 sentencePools 时使用) --------------
set defaultMorning to {"早安,伸个懒腰吧。", "抬头远眺十秒,让眼睛轻松一下。", "喝口温水,开启元气一天。", "深呼吸三次,清醒一下。"}
set defaultAfternoon to {"下午好,休息下眼睛再继续。", "起身走两步,恢复专注。", "喝杯茶,唤醒下午活力。", "放松肩颈,舒缓疲劳。"}
set defaultEvening to {"晚上了,给眼睛一个小假期。", "别熬夜,闭目养神一下。", "喝点热水,温暖身心。", "深呼吸,让心绪慢下来。"}
set defaultBreakfast to {"早餐时间到啦!", "去吃顿温暖的早餐吧。", "早餐很重要,精神满满一整天。", "暂停一下,享受美味早餐。"}
set defaultLunch to {"午餐时间,请放下手头工作。", "吃个午饭,下午更有精神。", "午餐很重要,别错过。", "走吧,去享用午餐。"}
set defaultDinner to {"晚餐时间到了。", "辛苦一天了,去吃晚饭吧。", "放下屏幕,享受晚餐。", "好好吃个晚餐犒劳自己。"}
-- -------------- 明确定义句子Record(在此处粘贴你的句子) --------------
-- 按你要求的“单行格式”,把每个时段的句子粘贴进下方 record。
-- 例如:
-- afternoon:{"下午好,休息下眼睛,回来继续。", "喝点水再继续吧。", ...}, ¬
-- 提示:每个时段一行,结尾用 “, ¬” 续行,最后一个时段行末不要 “, ¬”。
set sentencePools to {morning:{"早安,新的一天深呼吸一下吧。", "起身活动,释放活力。", "给眼睛一点休息时间。", "闭眼一分钟,再开始工作。", "伸个懒腰,精神一上午。", "清晨好,先喝杯水润润身体。", "微笑一下,开始美好的一天。", "舒展肩颈,焕发清晨活力。", "晨光明媚,远眺片刻吧。", "闭眼冥想一分钟,放松一下。", "站起来,稍作走动吧。", "整理桌面,让心情舒畅。", "迎接清晨,深吸几口气。", "放松手腕,缓解压力。", "清晨短暂休息,思考更清晰。", "给自己一分钟的宁静。", "喝杯热茶,温暖上午时光。", "稍微站立,伸展一下身体。", "抬头远眺,眼睛更舒适。", "轻轻转动脖子,开启活力。", "深呼吸三次,让心绪平静。", "小憩一下,上午效率更高。", "起身走动,激发灵感。", "伸展一下腰部,赶走困倦。", "眺望窗外,给眼睛放个假。", "享受片刻宁静,整理思绪。", "给自己一点微笑的时间。", "喝口温水,清醒一下头脑。", "手指活动一下,避免僵硬。", "闭目十秒,舒缓眼部压力。", "抬头看看天空,心情更开阔。", "晨间休息,精力充沛一整天。", "微笑一下,提升一天心情。", "转动肩膀,赶走疲劳感。", "舒缓双手,活动一下手指。", "短暂休息,让早晨更高效。"}, afternoon:{"下午好,休息下眼睛,回来继续。", "喝点水再继续吧。", "闭目养神,恢复精力。", "放松肩膀,缓解疲劳。", "做个深呼吸,焕发精神。", "站起来伸个懒腰吧。", "看看窗外远方,让眼睛放松。", "喝杯茶,给自己片刻悠闲。", "活动一下手腕,释放压力。", "轻轻揉揉太阳穴,恢复精神。", "离开座位,走动一下吧。", "稍微休息下,思考效率更高。", "闭上眼睛,享受一分钟安静。", "喝一口温水,滋润心情。", "轻轻转动脖子,舒缓颈椎。", "合上电脑,片刻休息一下。", "起身活动一下,精神更佳。", "喝杯温茶,下午能量补充。", "眺望窗外绿色,舒缓眼睛疲劳。", "闭眼十秒,放松你的神经。", "整理一下桌面,休息片刻。", "伸展一下手臂,赶走疲劳感。", "站起来,走两步,活跃身体。", "享受片刻安静,放空一下大脑。", "稍事休息,才能事半功倍。", "轻轻拍打肩膀,恢复元气。", "眨眨眼睛,给视力一个缓冲。", "喝杯绿茶,唤醒下午活力。", "轻轻按摩双手,缓解紧张。", "别着急,停下来呼吸几秒吧。", "暂时放下工作,闭眼放松。", "看向远方,缓解视觉压力。", "喝杯咖啡,提振精神片刻。", "短暂休息,更能提升专注。", "静坐一会儿,让身心得以放松。", "舒展一下腰部,释放压力。"}, evening:{"晚上了,放下手机休息一会儿。", "别熬夜,注意眼睛健康。", "深呼吸,给自己放个假。", "暂时放下工作,享受安静时刻。", "闭目养神,放松一下身心。", "晚上好,起来伸个懒腰吧。", "喝点热水,温暖一下身体。", "晚间舒缓一下颈肩疲劳。", "闭上眼睛,想象美好的画面。", "放松一下大脑,效率更高。", "起身走走,缓解一天的疲劳。", "短暂休息,迎接美好夜晚。", "喝一杯茶,安静片刻。", "整理下桌面,心情更舒畅。", "闭目静坐一分钟,放松神经。", "适当休息,才能长期高效。", "看窗外夜景,缓解眼部疲劳。", "放下手边事,静心片刻。", "给自己一个舒适的夜晚。", "轻轻按摩双手,放松身体。", "暂时远离电子设备,静静休息。", "给自己一分钟的安静时间。", "伸展下脖子,赶走疲劳。", "慢慢深呼吸,让心绪平静。", "短暂闭眼休息,养精蓄锐。", "站起身,稍微活动一下腿脚。", "眺望星空,舒缓视疲劳。", "喝杯温茶,享受夜晚宁静。", "让眼睛休息,避免疲劳。", "睡前轻微活动,促进睡眠。", "微笑一下,睡眠更香甜。", "闭目养神,舒缓一天压力。", "整理心情,给自己片刻宁静。", "喝点温水,准备进入睡眠状态。", "轻轻揉揉眼周,缓解眼睛疲劳。", "闭眼片刻,让大脑放空休息。"}, breakfast:{"早餐时间,主人快去吃早餐吧!", "别忘了早餐,能量满满一整天。", "暂停一下,享受美味早餐。", "早餐不能错过哦!", "清晨美食,赶紧去享用吧!", "营养早餐,为一天储备能量。", "早餐暖暖胃,整天好状态。", "放下电脑,去吃早餐吧。", "早餐时间,健康第一。", "早餐很重要,快去吃吧!", "别饿着,早餐等你。", "吃顿丰盛早餐,今天更给力。", "主人,早餐时间到啦!", "给身体充电,去吃早餐吧。", "早餐时间,美好一天的起点。", "吃早餐,精神更充沛。", "去吃早餐吧,网页稍后再看。", "早餐时刻,不要错过哦!", "吃早餐去,工作待会儿再说。", "主人,去吃顿温暖的早餐吧。", "早晨时光,先填饱肚子。", "早餐很重要,赶快去吃。", "补充能量,去吃早餐吧。", "停一停,早餐正在等你。"}, lunch:{"午餐时间到,放下电脑享用午餐吧。", "中午休息一会儿再继续工作。", "吃个美味午餐,下午更有动力。", "午饭时刻,主人快去吃饭吧。", "别忘了吃午餐,照顾自己。", "放下手头事,去享受午餐。", "美味午餐,主人请享用吧。", "中午稍作休息,能量满满。", "工作再忙,也要吃午饭哦。", "主人,午餐准备好了。", "午饭很重要,赶紧去吃吧。", "暂停一下,去吃个午餐吧。", "午餐时刻,好好犒劳自己。", "吃顿好的午餐,下午更精神。", "中午了,主人去吃饭吧。", "午餐时间到,请放松一下。", "主人,吃顿可口的午餐吧。", "放松身心,去吃顿饭吧。", "美味的午餐,主人快去享受。", "午饭时间,工作稍后再继续。", "暂时休息,去享受午餐吧。", "午餐时光,主人快去用餐。", "别错过午餐,好好休息一下。", "去吃午饭,给自己充充电。"}, dinner:{"晚餐时间,主人去吃晚饭吧!", "一天辛苦了,晚餐犒劳一下自己吧。", "放下手机,享用温暖晚餐吧。", "晚餐时刻,好好休息一下吧。", "晚餐准备好了,主人去用餐吧。", "放松一下,享受晚餐时光。", "夜晚温暖一餐,好好享受。", "晚餐时间到,别饿着自己。", "美好的夜晚,从晚餐开始。", "去吃晚餐吧,工作稍后再说。", "主人,晚餐很重要,快去吃吧。", "吃顿晚餐,犒劳辛苦的自己。", "夜幕降临,去吃晚饭吧。", "晚餐时刻,请好好放松一下。", "晚餐不能省略哦,主人去吃吧。", "主人,晚餐准备好了,别等了。", "晚餐时刻,享受美食吧。", "放下电脑,去享受晚餐吧。", "主人,晚餐热腾腾,快来吃吧。", "晚餐时间,好好照顾自己。", "别忘了晚餐,主人快去用餐吧。", "暂停手头工作,去吃晚餐吧。", "夜晚放松,从晚餐开始。", "去吃晚餐,让身体好好休息一下。"}} ¬
-- -------------- 取当前时段的基础句池(若为空则使用兜底) --------------
set sentencesBase to {}
if periodKey = "morning" then
set sentencesBase to morning of sentencePools
if (count of sentencesBase) = 0 then set sentencesBase to defaultMorning
else if periodKey = "afternoon" then
set sentencesBase to afternoon of sentencePools
if (count of sentencesBase) = 0 then set sentencesBase to defaultAfternoon
else if periodKey = "evening" then
set sentencesBase to evening of sentencePools
if (count of sentencesBase) = 0 then set sentencesBase to defaultEvening
else if periodKey = "breakfast" then
set sentencesBase to breakfast of sentencePools
if (count of sentencesBase) = 0 then set sentencesBase to defaultBreakfast
else if periodKey = "lunch" then
set sentencesBase to lunch of sentencePools
if (count of sentencesBase) = 0 then set sentencesBase to defaultLunch
else if periodKey = "dinner" then
set sentencesBase to dinner of sentencePools
if (count of sentencesBase) = 0 then set sentencesBase to defaultDinner
end if
-- -------------- Safari 前台时按“概率”切换到网页标题模板 --------------
set sentences to sentencesBase
if frontAppName is "Safari" and pageTitle is not "" then
set roll to (random number from 1 to 100)
if roll ≤ pageTitleChance then
set sentences to {"休息一下眼睛,等会儿再看「" & pageTitle & "」。", "暂停一下,回来继续浏览「" & pageTitle & "」。", "主人,稍微休息一会儿,网页「" & pageTitle & "」等你回来哦!"}
end if
end if
-- -------------- 随机朗读 --------------
if (count of sentences) = 0 then set sentences to {"主人,休息一下吧。"} -- 双保险
set chosenSentence to item (random number from 1 to (count of sentences)) of sentences
say chosenSentence
-- ===================== 结束 =====================
-
一个关机声音写了半天
-
Photo of the day 2025.10.12
一个外卖小哥。
-
Photo of the day 2025.10.11
-
Photo of the day 2025.10.9
小朋友的书画展。
-
Photo of the day 2025.10.8
曾经的海雅现在变成了京东大厦。