@zhin.js/plugin-reminder 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -8
- package/commands/remind/create/index.js +12 -0
- package/commands/remind/create/index.ts +14 -0
- package/lib/admin-tasks.d.ts +82 -0
- package/lib/admin-tasks.d.ts.map +1 -0
- package/lib/admin-tasks.js +294 -0
- package/lib/admin-tasks.js.map +1 -0
- package/lib/config.d.ts +2 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +5 -2
- package/lib/config.js.map +1 -1
- package/lib/create-reminder.d.ts +8 -0
- package/lib/create-reminder.d.ts.map +1 -0
- package/lib/create-reminder.js +128 -0
- package/lib/create-reminder.js.map +1 -0
- package/lib/natural-time.d.ts +15 -0
- package/lib/natural-time.d.ts.map +1 -0
- package/lib/natural-time.js +219 -0
- package/lib/natural-time.js.map +1 -0
- package/lib/service.d.ts +3 -3
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +29 -20
- package/lib/service.js.map +1 -1
- package/lib/timing.d.ts +4 -0
- package/lib/timing.d.ts.map +1 -0
- package/lib/timing.js +19 -0
- package/lib/timing.js.map +1 -0
- package/package.json +11 -10
- package/plugin.js +4 -3
- package/schema.json +69 -0
- package/src/admin-tasks.ts +229 -0
- package/src/config.ts +7 -3
- package/src/create-reminder.ts +106 -0
- package/src/natural-time.ts +197 -0
- package/src/service.ts +23 -18
- package/src/timing.ts +17 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { reminderActor } from './caller.js';
|
|
2
|
+
import { reminderServiceToken } from './runtime.js';
|
|
3
|
+
import { ReminderInputError } from './service.js';
|
|
4
|
+
import { ReminderTimeInputError, parseNaturalReminderTime, formatReminderTime } from './natural-time.js';
|
|
5
|
+
const STEP_TIMEOUT = 60_000;
|
|
6
|
+
const FLOW_TIMEOUT = 3 * STEP_TIMEOUT;
|
|
7
|
+
const TIMEOUT_TEXT = '提醒输入超时,未创建提醒;请重新执行 remind create。';
|
|
8
|
+
class ReminderCreationCancelled extends Error {
|
|
9
|
+
}
|
|
10
|
+
class ReminderCreationDeadline extends Error {
|
|
11
|
+
}
|
|
12
|
+
class ReminderPreviewDeliveryError extends Error {
|
|
13
|
+
}
|
|
14
|
+
/** Personal reminder entry: no persistence is touched before explicit confirmation. */
|
|
15
|
+
export async function createPersonalReminder(context, parameters) {
|
|
16
|
+
if (!context.input?.sender?.id || !context.interaction || !context.input.$replyFrom && !context.input.$reply)
|
|
17
|
+
return '请在真实聊天会话中使用此指令;需要发送者身份和交互能力,未创建提醒。';
|
|
18
|
+
const deadline = Date.now() + FLOW_TIMEOUT;
|
|
19
|
+
let creating = false;
|
|
20
|
+
try {
|
|
21
|
+
const actor = reminderActor(context.input);
|
|
22
|
+
const interaction = context.interaction;
|
|
23
|
+
const timezone = context.config.timezone;
|
|
24
|
+
const steps = new Map();
|
|
25
|
+
const invocationHead = /^(.*?remind)\s+create(?:\s|$)/iu.exec(context.input.content.trim())?.[1];
|
|
26
|
+
const isCommand = (value) => /^[!/#.]?remind\s+(?:create|after|at|every|list|cancel)(?:\s|$)/iu.test(value)
|
|
27
|
+
|| !!invocationHead && value.startsWith(`${invocationHead} `);
|
|
28
|
+
const checkDeadline = () => {
|
|
29
|
+
context.signal.throwIfAborted();
|
|
30
|
+
if (Date.now() >= deadline)
|
|
31
|
+
throw new ReminderCreationDeadline();
|
|
32
|
+
};
|
|
33
|
+
const checkCancel = (value) => {
|
|
34
|
+
if (/^(?:取消|cancel)$/iu.test(value.trim()))
|
|
35
|
+
throw new ReminderCreationCancelled();
|
|
36
|
+
};
|
|
37
|
+
const ask = async (stage, title, description, maxLength) => {
|
|
38
|
+
checkDeadline();
|
|
39
|
+
const stepDeadline = steps.get(stage) ?? Date.now() + STEP_TIMEOUT;
|
|
40
|
+
steps.set(stage, stepDeadline);
|
|
41
|
+
const remaining = Math.min(deadline, stepDeadline) - Date.now();
|
|
42
|
+
if (remaining <= 0)
|
|
43
|
+
throw new ReminderCreationDeadline();
|
|
44
|
+
const answer = (await interaction.ask({ type: 'text', title, description,
|
|
45
|
+
tip: '直接回复内容,不加命令前缀;输入“取消”或 cancel 可退出。', maxLength,
|
|
46
|
+
timeout: remaining, timeoutText: TIMEOUT_TEXT, signal: context.signal,
|
|
47
|
+
})).trim();
|
|
48
|
+
checkDeadline();
|
|
49
|
+
checkCancel(answer);
|
|
50
|
+
return answer;
|
|
51
|
+
};
|
|
52
|
+
let expression = parameters.when?.trim();
|
|
53
|
+
if (expression)
|
|
54
|
+
checkCancel(expression);
|
|
55
|
+
let parsed;
|
|
56
|
+
let timeError = '';
|
|
57
|
+
while (!parsed) {
|
|
58
|
+
checkDeadline();
|
|
59
|
+
if (!expression)
|
|
60
|
+
expression = await ask('time', '什么时候提醒你?', [timeError, `按 ${timezone} 解析,例如“10分钟后”或“明天上午九点”;也可使用带 offset 的 ISO 时间。`].filter(Boolean).join('\n'), 200);
|
|
61
|
+
try {
|
|
62
|
+
parsed = parseNaturalReminderTime(expression, { now: Date.now(), timezone });
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (!(error instanceof ReminderTimeInputError))
|
|
66
|
+
throw error;
|
|
67
|
+
timeError = error.message;
|
|
68
|
+
expression = undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
let text = parameters.text?.trim();
|
|
72
|
+
if (text)
|
|
73
|
+
checkCancel(text);
|
|
74
|
+
let textError = '';
|
|
75
|
+
while (!text || text.length > 500 || isCommand(text)) {
|
|
76
|
+
if (text)
|
|
77
|
+
textError = isCommand(text) ? '当前正在补全提醒;请直接回复正文,或先取消后重新发指令。' : '提醒正文须为 1–500 个字符。';
|
|
78
|
+
text = await ask('body', '提醒你做什么?', [textError, '请输入纯文字提醒正文(1–500 字)。'].filter(Boolean).join('\n'), 500);
|
|
79
|
+
}
|
|
80
|
+
const target = actor.target;
|
|
81
|
+
const scene = `${target.kind} ${target.id}${target.parent ? `;父容器 ${target.parent.kind} ${target.parent.id}` : ''}${target.threadId ? `;话题 ${target.threadId}` : ''}`;
|
|
82
|
+
const account = `${target.endpoint.adapter} / ${target.endpoint.id.replaceAll('\0', ' / ')}`;
|
|
83
|
+
const preview = `时间:${formatReminderTime(parsed.at, parsed.timezone)}\n原会话:${scene}\n账号:${account}\n正文(原样显示):\n${text}\n\n请等待下一条确认提示,再输入“确认”创建;不会更换目标会话。\n若确认后未收到创建结果,请先在原会话用 remind list 核对,不要直接重复创建。`;
|
|
84
|
+
checkDeadline();
|
|
85
|
+
// Canonical text avoids interpreting reminder content as Markdown/HTML in the prompt renderer.
|
|
86
|
+
const previewContent = { type: 'text', data: { text: preview } };
|
|
87
|
+
const receipt = context.input.$reply
|
|
88
|
+
? await context.input.$reply(previewContent)
|
|
89
|
+
: await context.input.$replyFrom(context.owner.id, previewContent);
|
|
90
|
+
checkDeadline();
|
|
91
|
+
if (!receipt || typeof receipt !== 'object' || !('status' in receipt) || receipt.status !== 'sent')
|
|
92
|
+
throw new ReminderPreviewDeliveryError();
|
|
93
|
+
let confirmError = '';
|
|
94
|
+
while (true) {
|
|
95
|
+
const answer = await ask('confirmation', '确认创建这条提醒?', [confirmError, '请核对上一条预览的时间、时区、正文和原会话;仅输入“确认”才创建。'].filter(Boolean).join('\n'), 500);
|
|
96
|
+
if (answer === '确认')
|
|
97
|
+
break;
|
|
98
|
+
confirmError = '未创建提醒。请明确输入“确认”,或输入“取消”退出。';
|
|
99
|
+
}
|
|
100
|
+
checkDeadline();
|
|
101
|
+
if (parsed.at <= Date.now())
|
|
102
|
+
return '提醒时间已过,未创建提醒。请重新执行 remind create 并选择未来时间;不会自动顺延。';
|
|
103
|
+
const service = context.use(reminderServiceToken);
|
|
104
|
+
creating = true;
|
|
105
|
+
const task = await service.add(actor, text, parsed.at, null);
|
|
106
|
+
return `已创建个人提醒\n${service.describe(task)}`;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
if (error instanceof ReminderCreationCancelled)
|
|
110
|
+
return '已取消,未创建提醒。';
|
|
111
|
+
if (error instanceof ReminderInputError)
|
|
112
|
+
return `未创建提醒:${error.message}`;
|
|
113
|
+
if (creating)
|
|
114
|
+
return '提醒创建结果未能确认,请先使用 remind list 核对;不要直接重复创建。';
|
|
115
|
+
if (context.signal.aborted
|
|
116
|
+
|| error instanceof Error && ['UserInteractionTimeoutError', 'UserInteractionSupersededError', 'AbortError'].includes(error.name))
|
|
117
|
+
return undefined;
|
|
118
|
+
if (error instanceof Error && /(?:retired|inactive generation|scope has ended)/iu.test(error.message))
|
|
119
|
+
return undefined;
|
|
120
|
+
// Core reports ask timeouts itself; this deadline can instead expire during preview delivery.
|
|
121
|
+
if (error instanceof ReminderCreationDeadline)
|
|
122
|
+
return TIMEOUT_TEXT;
|
|
123
|
+
if (error instanceof ReminderPreviewDeliveryError || error instanceof Error && error.name === 'UserInteractionDeliveryError')
|
|
124
|
+
return '提示消息未能确认送达,未创建提醒;请核对会话后重新执行,不会自动重发。';
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=create-reminder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-reminder.js","sourceRoot":"","sources":["../src/create-reminder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class ReminderTimeInputError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
/** Parse a bounded, explicit grammar; this never reads the machine's default timezone. */
|
|
5
|
+
export declare function parseNaturalReminderTime(expression: string, options: {
|
|
6
|
+
now: number;
|
|
7
|
+
timezone: string;
|
|
8
|
+
}): {
|
|
9
|
+
at: number;
|
|
10
|
+
timezone: string;
|
|
11
|
+
expression: string;
|
|
12
|
+
};
|
|
13
|
+
/** Always show the resolved date, configured zone and its actual offset. */
|
|
14
|
+
export declare function formatReminderTime(at: number, timezone: string): string;
|
|
15
|
+
//# sourceMappingURL=natural-time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"natural-time.d.ts","sourceRoot":"","sources":["../src/natural-time.ts"],"names":[],"mappings":"AAEA,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAoBD,0FAA0F;AAC1F,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAmCtD;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQvE"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { MAX_DELAY_SECONDS, parseReminderInstant } from './timing.js';
|
|
2
|
+
export class ReminderTimeInputError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'ReminderTimeInputError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
const DAY = 86_400_000;
|
|
9
|
+
const MAX_DELAY = MAX_DELAY_SECONDS * 1000;
|
|
10
|
+
const NUMBER = '[0-9零〇一二两三四五六七八九十百千万]+';
|
|
11
|
+
const RELATIVE = new RegExp(`^(${NUMBER})\\s*(秒钟?|分钟?|小时|天)\\s*后$`, 'u');
|
|
12
|
+
const LOCAL = /^(今天|明天|后天)\s*(凌晨|上午|中午|下午|晚上)?\s*(.+)$/u;
|
|
13
|
+
const POINT = new RegExp(`^(${NUMBER})\\s*点(?:\\s*(半)|\\s*(${NUMBER})\\s*分(?:\\s*(${NUMBER})\\s*秒)?)?$`, 'u');
|
|
14
|
+
const DIGITS = '零一二三四五六七八九';
|
|
15
|
+
const HELP = '暂不支持这种时间表达,请使用“十分钟后”“明天九点半”或带时区 offset 的 ISO 时间;不支持每天、每周等日历周期';
|
|
16
|
+
/** Parse a bounded, explicit grammar; this never reads the machine's default timezone. */
|
|
17
|
+
export function parseNaturalReminderTime(expression, options) {
|
|
18
|
+
if (typeof expression !== 'string' || expression.length > 200)
|
|
19
|
+
fail('提醒时间须为不超过 200 个字符的文字');
|
|
20
|
+
const text = expression.trim();
|
|
21
|
+
if (!text || /\p{Cc}/u.test(expression))
|
|
22
|
+
fail('请在一行内输入提醒时间');
|
|
23
|
+
assertInstant(options.now);
|
|
24
|
+
const formatter = createFormatter(options.timezone);
|
|
25
|
+
let at;
|
|
26
|
+
if (/^\d{4}-/u.test(text)) {
|
|
27
|
+
try {
|
|
28
|
+
at = parseReminderInstant(text);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
fail('绝对时间无效,请使用带 Z 或 ±hh:mm 的 ISO 时间,例如 2026-10-20T09:00:00+08:00');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const relative = RELATIVE.exec(text);
|
|
36
|
+
if (relative) {
|
|
37
|
+
const amount = parseInteger(relative[1]);
|
|
38
|
+
const unit = relative[2];
|
|
39
|
+
const multiplier = unit.startsWith('秒') ? 1000 : unit.startsWith('分') ? 60_000 : unit === '小时' ? 3_600_000 : DAY;
|
|
40
|
+
at = options.now + amount * multiplier;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const local = LOCAL.exec(text);
|
|
44
|
+
if (!local)
|
|
45
|
+
fail(HELP);
|
|
46
|
+
const current = partsAt(options.now, formatter);
|
|
47
|
+
const date = new Date(utc({ ...current, hour: 0, minute: 0, second: 0 }));
|
|
48
|
+
date.setUTCDate(date.getUTCDate() + (local[1] === '今天' ? 0 : local[1] === '明天' ? 1 : 2));
|
|
49
|
+
const clock = parseClock(local[3], local[2]);
|
|
50
|
+
const desired = { year: date.getUTCFullYear(), month: date.getUTCMonth() + 1,
|
|
51
|
+
day: date.getUTCDate(), ...clock };
|
|
52
|
+
at = localInstant(desired, formatter);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const delay = at - options.now;
|
|
56
|
+
if (delay > MAX_DELAY)
|
|
57
|
+
fail('提醒时间不能超过当前时间的 365 天后');
|
|
58
|
+
if (!Number.isSafeInteger(at) || !Number.isFinite(new Date(at).getTime()) || delay < 1000) {
|
|
59
|
+
fail('提醒时间须在当前时间至少 1 秒后;今天已过的时间不会自动改到明天,请重新指定日期');
|
|
60
|
+
}
|
|
61
|
+
return { at, timezone: options.timezone, expression: text };
|
|
62
|
+
}
|
|
63
|
+
/** Always show the resolved date, configured zone and its actual offset. */
|
|
64
|
+
export function formatReminderTime(at, timezone) {
|
|
65
|
+
assertInstant(at);
|
|
66
|
+
const formatter = createFormatter(timezone);
|
|
67
|
+
const local = partsAt(at, formatter);
|
|
68
|
+
const offset = offsetAt(at, formatter);
|
|
69
|
+
const seconds = Math.abs(offset) / 1000;
|
|
70
|
+
const offsetText = `${offset < 0 ? '-' : '+'}${pad(Math.floor(seconds / 3600))}:${pad(Math.floor(seconds / 60) % 60)}${seconds % 60 ? `:${pad(seconds % 60)}` : ''}`;
|
|
71
|
+
return `${String(local.year).padStart(4, '0')}-${pad(local.month)}-${pad(local.day)} ${pad(local.hour)}:${pad(local.minute)}:${pad(local.second)} UTC${offsetText} (${timezone})`;
|
|
72
|
+
}
|
|
73
|
+
function fail(message) { throw new ReminderTimeInputError(message); }
|
|
74
|
+
function pad(value) { return String(value).padStart(2, '0'); }
|
|
75
|
+
function assertInstant(value) {
|
|
76
|
+
if (!Number.isSafeInteger(value) || !Number.isFinite(new Date(value).getTime()))
|
|
77
|
+
fail('当前时间或提醒时间无效');
|
|
78
|
+
}
|
|
79
|
+
function createFormatter(timezone) {
|
|
80
|
+
if (typeof timezone !== 'string' || !timezone || timezone.length > 100 || timezone !== timezone.trim() || /^[+-]/u.test(timezone)) {
|
|
81
|
+
fail('提醒时区无效,请配置有效的 IANA 时区,例如 Asia/Shanghai');
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
return new Intl.DateTimeFormat('en-GB', { timeZone: timezone, calendar: 'iso8601', numberingSystem: 'latn',
|
|
85
|
+
year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit',
|
|
86
|
+
hourCycle: 'h23', era: 'short' });
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
fail('提醒时区无效,请配置有效的 IANA 时区,例如 Asia/Shanghai');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function partsAt(at, formatter) {
|
|
93
|
+
const parts = Object.fromEntries(formatter.formatToParts(at).map(part => [part.type, part.value]));
|
|
94
|
+
return { year: parts.era === 'BC' ? 1 - Number(parts.year) : Number(parts.year), month: Number(parts.month),
|
|
95
|
+
day: Number(parts.day), hour: Number(parts.hour), minute: Number(parts.minute), second: Number(parts.second) };
|
|
96
|
+
}
|
|
97
|
+
function utc(value) {
|
|
98
|
+
const date = new Date(0);
|
|
99
|
+
date.setUTCFullYear(value.year, value.month - 1, value.day);
|
|
100
|
+
date.setUTCHours(value.hour, value.minute, value.second, 0);
|
|
101
|
+
return date.getTime();
|
|
102
|
+
}
|
|
103
|
+
function offsetAt(at, formatter) {
|
|
104
|
+
const local = utc(partsAt(at, formatter));
|
|
105
|
+
if (!Number.isFinite(local))
|
|
106
|
+
fail('提醒日期超出支持范围');
|
|
107
|
+
return local - Math.floor(at / 1000) * 1000;
|
|
108
|
+
}
|
|
109
|
+
function localInstant(desired, formatter) {
|
|
110
|
+
const naive = utc(desired);
|
|
111
|
+
if (!Number.isFinite(naive))
|
|
112
|
+
fail('提醒日期超出支持范围');
|
|
113
|
+
const offsets = new Set();
|
|
114
|
+
// A fixed 97 probes cover both sides of a DST or date-line transition.
|
|
115
|
+
// Candidate instants must round-trip exactly; never pick one side of a fold.
|
|
116
|
+
for (let hour = -48; hour <= 48; hour++) {
|
|
117
|
+
const probe = naive + hour * 3_600_000;
|
|
118
|
+
if (Number.isFinite(new Date(probe).getTime()))
|
|
119
|
+
offsets.add(offsetAt(probe, formatter));
|
|
120
|
+
}
|
|
121
|
+
const candidates = [...offsets].map(offset => naive - offset).filter(at => {
|
|
122
|
+
if (!Number.isFinite(new Date(at).getTime()))
|
|
123
|
+
return false;
|
|
124
|
+
const actual = partsAt(at, formatter);
|
|
125
|
+
return Object.keys(desired).every(key => actual[key] === desired[key]);
|
|
126
|
+
});
|
|
127
|
+
if (candidates.length === 0)
|
|
128
|
+
fail('这个本地时间因时区或夏令时切换而不存在,请改用明确日期并带 offset 的 ISO 时间');
|
|
129
|
+
if (candidates.length !== 1)
|
|
130
|
+
fail('这个本地时间因夏令时切换出现两次,请使用带明确 offset 的 ISO 时间选择其中一次');
|
|
131
|
+
return candidates[0];
|
|
132
|
+
}
|
|
133
|
+
function parseClock(text, period) {
|
|
134
|
+
const colon = /^(\d{1,2}):(\d{2})(?::(\d{2}))?$/u.exec(text);
|
|
135
|
+
const point = POINT.exec(text);
|
|
136
|
+
if (!colon && !point)
|
|
137
|
+
fail('时间须写为 09:30、九点、九点半或九点三十分;请同时指定今天、明天或后天');
|
|
138
|
+
let hour = colon ? Number(colon[1]) : parseInteger(point[1]);
|
|
139
|
+
const minute = colon ? Number(colon[2]) : point[2] ? 30 : point[3] ? parseInteger(point[3]) : 0;
|
|
140
|
+
const second = colon ? Number(colon[3] ?? 0) : point[4] ? parseInteger(point[4]) : 0;
|
|
141
|
+
if (minute > 59 || second > 59 || hour > 23)
|
|
142
|
+
fail('小时须为 0–23,分钟和秒须为 0–59');
|
|
143
|
+
if (period === '下午' || period === '晚上') {
|
|
144
|
+
if (hour < 1 || hour > 12 || period === '晚上' && hour === 12)
|
|
145
|
+
fail('时段与钟点不明确,请使用 24 小时制,例如 00:00 或 18:00');
|
|
146
|
+
hour = hour === 12 ? 12 : hour + 12;
|
|
147
|
+
}
|
|
148
|
+
else if (period === '上午' || period === '凌晨') {
|
|
149
|
+
if (hour > 11)
|
|
150
|
+
fail('时段与钟点不明确,请使用 24 小时制,例如 00:00 或 12:00');
|
|
151
|
+
}
|
|
152
|
+
else if (period === '中午') {
|
|
153
|
+
if (hour === 1 || hour === 2)
|
|
154
|
+
hour += 12;
|
|
155
|
+
else if (hour !== 11 && hour !== 12)
|
|
156
|
+
fail('中午的钟点不明确,请使用 24 小时制');
|
|
157
|
+
}
|
|
158
|
+
return { hour, minute, second };
|
|
159
|
+
}
|
|
160
|
+
function parseInteger(text) {
|
|
161
|
+
if (/^\d+$/u.test(text)) {
|
|
162
|
+
const number = Number(text);
|
|
163
|
+
if (!Number.isSafeInteger(number))
|
|
164
|
+
fail('时间数值过大,请使用一年以内的时间');
|
|
165
|
+
return number;
|
|
166
|
+
}
|
|
167
|
+
if (/两(?![百千万]|$)/u.test(text))
|
|
168
|
+
fail('中文数字不明确,请改用阿拉伯数字');
|
|
169
|
+
const normalized = text.replace(/〇/gu, '零').replace(/两/gu, '二');
|
|
170
|
+
let total = 0;
|
|
171
|
+
let section = 0;
|
|
172
|
+
let digit = 0;
|
|
173
|
+
for (const character of normalized) {
|
|
174
|
+
const index = DIGITS.indexOf(character);
|
|
175
|
+
if (index !== -1)
|
|
176
|
+
digit = index;
|
|
177
|
+
else if (character === '万') {
|
|
178
|
+
total += (section + digit) * 10_000;
|
|
179
|
+
section = 0;
|
|
180
|
+
digit = 0;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
const unit = character === '十' ? 10 : character === '百' ? 100 : character === '千' ? 1000 : NaN;
|
|
184
|
+
section += (digit || 1) * unit;
|
|
185
|
+
digit = 0;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const number = total + section + digit;
|
|
189
|
+
if (!Number.isSafeInteger(number) || number < 0 || number > 99_999_999
|
|
190
|
+
|| chineseInteger(number) !== normalized && !(normalized.startsWith('一十') && chineseInteger(number) === normalized.slice(1))) {
|
|
191
|
+
fail('中文数字不明确,请写完整中文整数或改用阿拉伯数字');
|
|
192
|
+
}
|
|
193
|
+
return number;
|
|
194
|
+
}
|
|
195
|
+
function chineseInteger(value) {
|
|
196
|
+
if (value === 0)
|
|
197
|
+
return '零';
|
|
198
|
+
const section = (number) => {
|
|
199
|
+
let result = '';
|
|
200
|
+
let zero = false;
|
|
201
|
+
for (const [unit, label] of [[1000, '千'], [100, '百'], [10, '十'], [1, '']]) {
|
|
202
|
+
const digit = Math.floor(number / unit) % 10;
|
|
203
|
+
if (digit) {
|
|
204
|
+
if (zero)
|
|
205
|
+
result += '零';
|
|
206
|
+
result += `${DIGITS[digit]}${label}`;
|
|
207
|
+
zero = false;
|
|
208
|
+
}
|
|
209
|
+
else if (result && number % unit)
|
|
210
|
+
zero = true;
|
|
211
|
+
}
|
|
212
|
+
return result;
|
|
213
|
+
};
|
|
214
|
+
const high = Math.floor(value / 10_000);
|
|
215
|
+
const low = value % 10_000;
|
|
216
|
+
const result = high ? `${section(high)}万${low ? `${low < 1000 ? '零' : ''}${section(low)}` : ''}` : section(low);
|
|
217
|
+
return result.startsWith('一十') ? result.slice(1) : result;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=natural-time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"natural-time.js","sourceRoot":"","sources":["../src/natural-time.ts"],"names":[],"mappings":"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"}
|
package/lib/service.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type DeliveryTarget, type OutboundHost, type PluginStateStore } from 'zhin.js';
|
|
2
2
|
import type { ReminderConfig } from './config.js';
|
|
3
|
+
import { AdministratorReminderTasks } from './admin-tasks.js';
|
|
4
|
+
export { MAX_DELAY_SECONDS, parseReminderInstant } from './timing.js';
|
|
3
5
|
export declare const REMINDER_STATE_KEY = "reminders/v1";
|
|
4
|
-
export declare const MAX_DELAY_SECONDS: number;
|
|
5
6
|
export declare class ReminderInputError extends Error {
|
|
6
7
|
}
|
|
7
8
|
type TaskStatus = 'pending' | 'unknown' | 'delivered' | 'failed' | 'cancelled';
|
|
@@ -29,6 +30,7 @@ export type ReminderBook = {
|
|
|
29
30
|
/** Generation-owned worker; saved state contains plain identities, never live objects. */
|
|
30
31
|
export declare class ReminderService {
|
|
31
32
|
#private;
|
|
33
|
+
readonly administratorTasks: AdministratorReminderTasks;
|
|
32
34
|
constructor(state: PluginStateStore, outbound: OutboundHost, config: ReminderConfig);
|
|
33
35
|
stop(): void;
|
|
34
36
|
add(actor: ReminderActor, text: string, at: number, intervalMs: number | null): Promise<ReminderTask>;
|
|
@@ -37,6 +39,4 @@ export declare class ReminderService {
|
|
|
37
39
|
tick(): Promise<void>;
|
|
38
40
|
describe(task: ReminderTask): string;
|
|
39
41
|
}
|
|
40
|
-
export declare function parseReminderInstant(value: string): number;
|
|
41
|
-
export {};
|
|
42
42
|
//# sourceMappingURL=service.d.ts.map
|
package/lib/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE9G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE9G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,qBAAa,kBAAmB,SAAQ,KAAK;CAAG;AAEhD,KAAK,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC/E,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAC3F,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC7F,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAA;CAAE,CAAC;AAE5F,0FAA0F;AAC1F,qBAAa,eAAe;;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;gBAQ5C,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc;IAOnF,IAAI,IAAI,IAAI;IAEN,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBrG,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAM5D,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyD3B,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;CAQrC"}
|
package/lib/service.js
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { createDeliveryTarget } from 'zhin.js';
|
|
3
3
|
import { EndpointDeliveryError } from '@zhin.js/im-contract';
|
|
4
|
+
import { AdministratorReminderTasks } from './admin-tasks.js';
|
|
5
|
+
import { MAX_DELAY_SECONDS, nextPeriodicTime } from './timing.js';
|
|
6
|
+
export { MAX_DELAY_SECONDS, parseReminderInstant } from './timing.js';
|
|
4
7
|
export const REMINDER_STATE_KEY = 'reminders/v1';
|
|
5
|
-
export const MAX_DELAY_SECONDS = 365 * 24 * 60 * 60;
|
|
6
8
|
export class ReminderInputError extends Error {
|
|
7
9
|
}
|
|
8
10
|
/** Generation-owned worker; saved state contains plain identities, never live objects. */
|
|
9
11
|
export class ReminderService {
|
|
12
|
+
administratorTasks;
|
|
10
13
|
#state;
|
|
11
14
|
#outbound;
|
|
12
15
|
#config;
|
|
13
16
|
#working = false;
|
|
14
17
|
#stopped = false;
|
|
18
|
+
#administratorFirst = false;
|
|
15
19
|
constructor(state, outbound, config) {
|
|
16
20
|
this.#state = state;
|
|
17
21
|
this.#outbound = outbound;
|
|
18
22
|
this.#config = config;
|
|
23
|
+
this.administratorTasks = new AdministratorReminderTasks(state, outbound, config);
|
|
19
24
|
}
|
|
20
|
-
stop() { this.#stopped = true; }
|
|
25
|
+
stop() { this.#stopped = true; this.administratorTasks.stop(); }
|
|
21
26
|
async add(actor, text, at, intervalMs) {
|
|
22
27
|
this.#assertLive();
|
|
23
28
|
assertActor(actor);
|
|
@@ -67,6 +72,18 @@ export class ReminderService {
|
|
|
67
72
|
for (let count = 0; count < this.#config.batchSize && !this.#stopped; count++) {
|
|
68
73
|
const now = Date.now();
|
|
69
74
|
const claimId = randomUUID();
|
|
75
|
+
const administratorFirst = this.#administratorFirst;
|
|
76
|
+
// Persist priority across ticks too: batchSize=1 must not starve either pool.
|
|
77
|
+
this.#administratorFirst = !this.#administratorFirst;
|
|
78
|
+
if (administratorFirst) {
|
|
79
|
+
const administratorTask = await this.administratorTasks.claim(now, claimId);
|
|
80
|
+
if (this.#stopped)
|
|
81
|
+
break;
|
|
82
|
+
if (administratorTask) {
|
|
83
|
+
await this.administratorTasks.deliver(administratorTask);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
70
87
|
const book = await this.#state.update(REMINDER_STATE_KEY, current => {
|
|
71
88
|
let claimed = false;
|
|
72
89
|
return { version: 1, tasks: readBook(current).tasks.map(task => {
|
|
@@ -84,8 +101,17 @@ export class ReminderService {
|
|
|
84
101
|
}) };
|
|
85
102
|
});
|
|
86
103
|
const task = book?.tasks.find(item => item.claimId === claimId);
|
|
87
|
-
if (
|
|
104
|
+
if (this.#stopped)
|
|
88
105
|
break;
|
|
106
|
+
if (!task) {
|
|
107
|
+
if (administratorFirst)
|
|
108
|
+
break;
|
|
109
|
+
const administratorTask = await this.administratorTasks.claim(now, claimId);
|
|
110
|
+
if (!administratorTask || this.#stopped)
|
|
111
|
+
break;
|
|
112
|
+
await this.administratorTasks.deliver(administratorTask);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
89
115
|
let status = 'unknown';
|
|
90
116
|
let detail = '平台未返回确认的消息 ID;不会自动重试';
|
|
91
117
|
try {
|
|
@@ -123,23 +149,6 @@ export class ReminderService {
|
|
|
123
149
|
#assertLive() { if (this.#stopped)
|
|
124
150
|
throw new Error('提醒服务属于已停止的插件实例'); }
|
|
125
151
|
}
|
|
126
|
-
export function parseReminderInstant(value) {
|
|
127
|
-
if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?(?:Z|[+-]\d{2}:\d{2})$/u.test(value))
|
|
128
|
-
throw new TypeError('绝对时间须为带 Z 或 ±hh:mm 的 ISO 时间,例如 2026-10-14T09:00:00+08:00');
|
|
129
|
-
const [year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0] = value.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?/u).slice(1).map(item => Number(item ?? 0));
|
|
130
|
-
const calendar = new Date(0);
|
|
131
|
-
calendar.setUTCFullYear(year, month, 0);
|
|
132
|
-
const daysInMonth = calendar.getUTCDate();
|
|
133
|
-
if (month < 1 || month > 12 || day < 1 || day > daysInMonth || hour > 23 || minute > 59 || second > 59)
|
|
134
|
-
throw new TypeError('提醒时间无效');
|
|
135
|
-
const time = Date.parse(value);
|
|
136
|
-
if (!Number.isSafeInteger(time))
|
|
137
|
-
throw new TypeError('提醒时间无效');
|
|
138
|
-
return time;
|
|
139
|
-
}
|
|
140
|
-
function nextPeriodicTime(from, interval, now) {
|
|
141
|
-
return from + (Math.floor((now - from) / interval) + 1) * interval;
|
|
142
|
-
}
|
|
143
152
|
function sameActor(task, actor) {
|
|
144
153
|
return task.senderId === actor.senderId && JSON.stringify(task.target) === JSON.stringify(createDeliveryTarget({ conversation: actor.target }));
|
|
145
154
|
}
|
package/lib/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/lib/timing.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,QAAqB,CAAC;AAEpD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU1D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpF"}
|
package/lib/timing.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const MAX_DELAY_SECONDS = 365 * 24 * 60 * 60;
|
|
2
|
+
export function parseReminderInstant(value) {
|
|
3
|
+
if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?(?:Z|[+-]\d{2}:\d{2})$/u.test(value))
|
|
4
|
+
throw new TypeError('绝对时间须为带 Z 或 ±hh:mm 的 ISO 时间,例如 2026-10-14T09:00:00+08:00');
|
|
5
|
+
const [year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0] = value.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?/u).slice(1).map(item => Number(item ?? 0));
|
|
6
|
+
const calendar = new Date(0);
|
|
7
|
+
calendar.setUTCFullYear(year, month, 0);
|
|
8
|
+
const daysInMonth = calendar.getUTCDate();
|
|
9
|
+
if (month < 1 || month > 12 || day < 1 || day > daysInMonth || hour > 23 || minute > 59 || second > 59)
|
|
10
|
+
throw new TypeError('提醒时间无效');
|
|
11
|
+
const time = Date.parse(value);
|
|
12
|
+
if (!Number.isSafeInteger(time))
|
|
13
|
+
throw new TypeError('提醒时间无效');
|
|
14
|
+
return time;
|
|
15
|
+
}
|
|
16
|
+
export function nextPeriodicTime(from, interval, now) {
|
|
17
|
+
return from + (Math.floor((now - from) / interval) + 1) * interval;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEpD,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,IAAI,CAAC,gFAAgF,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC;IACnL,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,wDAAwD,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACxL,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC1C,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,WAAW,IAAI,IAAI,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAgB,EAAE,GAAW;IAC1E,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;AACrE,CAAC"}
|