830f8a4011
Memind CI / Test, build, and release guards (push) Successful in 5m36s
Ship the 10-item numeric subscription loop on WeChat MP, wire schedule delivery for news/weather/quote/health/finance/tech/knowledge/night/surprise pushes, and extend news morning draft cover generation plus a one-shot draft push script. Co-authored-by: Cursor <cursoragent@cursor.com>
82 lines
2.9 KiB
JavaScript
82 lines
2.9 KiB
JavaScript
import { pickDailyLibraryEntry } from './push-content/daily-library-pick.mjs';
|
|
|
|
export const HEALTH_REMINDER_MORNING = Object.freeze([
|
|
'☕ 先喝一杯温水,唤醒身体,也唤醒今天的好状态。',
|
|
'🧘 伸个懒腰,转转肩颈,3 分钟就能让精神提起来。',
|
|
'🚶 如果方便,出门走 5 分钟,阳光和微风都是免费的能量。',
|
|
'💧 记得补水:早起后第一杯水,对代谢特别友好。',
|
|
'🍎 早餐别跳过,哪怕简单一点,也比空腹硬扛好。',
|
|
]);
|
|
|
|
export const HEALTH_REMINDER_AFTERNOON = Object.freeze([
|
|
'👀 看屏幕久了?试试 20-20-20:每 20 分钟,看 20 英尺外 20 秒。',
|
|
'🚶 午后站起来走一圈,对腰、对眼、对心情都有帮助。',
|
|
'💧 再补一杯水,别等口渴才想起来。',
|
|
'🧘 三个深呼吸,把肩颈放松下来,效率会更高。',
|
|
'🍵 如果困,先补水或走动,比硬喝咖啡更温和。',
|
|
]);
|
|
|
|
export const HEALTH_REMINDER_EVENING = Object.freeze([
|
|
'🌙 晚上尽量别太晚吃重口味,胃和睡眠都会感谢你。',
|
|
'📵 睡前 30 分钟少刷手机,给大脑一个慢慢降速的信号。',
|
|
'🚶 饭后散步 10 分钟,对消化和睡眠都有帮助。',
|
|
'🧘 做几组拉伸,把坐了一天的身体松一松。',
|
|
'💤 今天也辛苦了,早点休息,明天会更有劲。',
|
|
]);
|
|
|
|
export const HEALTH_REMINDER_GENERAL = Object.freeze([
|
|
'🏃 健康不是大目标,而是很多小选择叠在一起。',
|
|
'💧 记得喝水,这是最低成本、最高收益的健康习惯。',
|
|
'🧘 忙里偷闲 1 分钟,也比一直硬撑更好。',
|
|
'🚶 能走楼梯就别久坐,身体需要一点点活动量。',
|
|
'😊 心情也是健康的一部分,对自己温柔一点。',
|
|
]);
|
|
|
|
export function resolveHealthReminderSlot(hour) {
|
|
const safeHour = Number(hour);
|
|
if (!Number.isInteger(safeHour)) return 'general';
|
|
if (safeHour >= 6 && safeHour < 12) return 'morning';
|
|
if (safeHour >= 12 && safeHour < 18) return 'afternoon';
|
|
if (safeHour >= 18 && safeHour <= 23) return 'evening';
|
|
return 'general';
|
|
}
|
|
|
|
export function pickHealthReminder({
|
|
userId = '',
|
|
timezone = 'Asia/Shanghai',
|
|
now = Date.now(),
|
|
hour = null,
|
|
} = {}) {
|
|
const slot = resolveHealthReminderSlot(
|
|
hour ?? new Date(now).getHours(),
|
|
);
|
|
const library = {
|
|
morning: HEALTH_REMINDER_MORNING,
|
|
afternoon: HEALTH_REMINDER_AFTERNOON,
|
|
evening: HEALTH_REMINDER_EVENING,
|
|
general: HEALTH_REMINDER_GENERAL,
|
|
}[slot] ?? HEALTH_REMINDER_GENERAL;
|
|
return pickDailyLibraryEntry({
|
|
userId,
|
|
timezone,
|
|
now,
|
|
library,
|
|
salt: `health:${slot}`,
|
|
});
|
|
}
|
|
|
|
export function formatHealthReminderDeliveryText({
|
|
userId,
|
|
timezone = 'Asia/Shanghai',
|
|
now = Date.now(),
|
|
hour = null,
|
|
} = {}) {
|
|
const tip = pickHealthReminder({
|
|
userId,
|
|
timezone,
|
|
now,
|
|
hour: hour ?? new Date(now).getHours(),
|
|
});
|
|
return `🏃 健康提醒\n\n${tip}\n\n回复「取消8」关闭推送`;
|
|
}
|