告别遗忘:Logseq插件实现智能时间提醒全攻略
你是否曾在知识管理中遇到这些困扰?重要待办事项被淹没在笔记海洋,项目截止日期悄然错过,灵光一闪的创意因未及时跟进而流失。本文将带你构建一个基于Logseq插件的时间提醒系统,通过LSPlugin.Storage.ts持久化存储和LSPlugin.Request.ts定时任务,让知识管理真正服务于高效工作流。
核心功能架构解析
Logseq插件系统提供了三大核心能力支撑时间提醒功能:
-
数据持久化:通过LSPluginFileStorage类实现任务数据的安全存储,关键API包括:
// 存储提醒任务 await storage.setItem('reminder_20251031', JSON.stringify(reminderData)) // 获取所有提醒 const allReminders = await storage.allKeys() -
定时触发机制:利用LSPluginRequestTask的异步任务能力,结合系统时钟实现精准提醒:
// 创建定时检查任务 const task = request._request({ url: 'logseq://internal/reminder-check', method: 'GET', timeout: 24 * 60 * 60 * 1000, // 24小时轮询 success: handleReminderCheck }) -
内容检索能力:通过LSPluginSearchService实现提醒内容与知识库的关联查询:
// 搜索包含提醒标签的块内容 searchService.onQuery('my-graph', '#reminder', (results) => { processReminderBlocks(results.blocks) })
插件开发实战指南
项目结构搭建
遵循Logseq插件开发最佳实践,推荐的项目结构如下:
reminder-plugin/
├── package.json // 插件元数据
├── src/
│ ├── main.ts // 入口文件
│ ├── storage.ts // 基于[LSPluginFileStorage](https://link.gitcode.com/i/de5987b566ccadc6197763d787391c05)的封装
│ ├── scheduler.ts // 定时任务管理
│ └── ui.ts // 提醒界面组件
└── README.md // 用户文档
关键功能实现
1. 提醒数据模型设计
interface Reminder {
id: string; // 唯一标识
pageId: string; // 关联页面ID
blockId: string; // 关联块ID
scheduledTime: Date; // 提醒时间
repeat: 'daily'|'weekly'|'none'; // 重复规则
isCompleted: boolean; // 完成状态
}
2. 存储模块实现
import { LSPluginFileStorage } from "logseq/libs/src/modules/LSPlugin.Storage";
export class ReminderStorage {
private storage: LSPluginFileStorage;
constructor(ctx: any) {
this.storage = new LSPluginFileStorage(ctx);
}
async saveReminder(reminder: Reminder): Promise<void> {
await this.storage.setItem(
`reminder_${reminder.id}`,
JSON.stringify(reminder)
);
}
async getDueReminders(): Promise<Reminder[]> {
const now = new Date();
const keys = await this.storage.allKeys();
const reminders: Reminder[] = [];
for (const key of keys) {
if (key.startsWith('reminder_')) {
const data = await this.storage.getItem(key);
if (data) {
const reminder = JSON.parse(data);
if (new Date(reminder.scheduledTime) <= now && !reminder.isCompleted) {
reminders.push(reminder);
}
}
}
}
return reminders;
}
}
3. 定时检查机制
import { LSPluginRequest } from "logseq/libs/src/modules/LSPlugin.Request";
export class ReminderScheduler {
private request: LSPluginRequest;
private checkInterval: number;
constructor(ctx: any) {
this.request = new LSPluginRequest(ctx);
this.checkInterval = setInterval(
() => this.checkReminders(),
60 * 1000 // 每分钟检查一次
);
}
private async checkReminders() {
const storage = new ReminderStorage();
const dueReminders = await storage.getDueReminders();
dueReminders.forEach(reminder => {
this.showNotification(reminder);
// 如果是一次性提醒,标记为已完成
if (reminder.repeat === 'none') {
reminder.isCompleted = true;
storage.saveReminder(reminder);
}
});
}
private showNotification(reminder: Reminder) {
// 实现系统通知和Logseq内提醒
logseq.UI.showMsg(`提醒: ${reminder.content}`);
}
destroy() {
clearInterval(this.checkInterval);
}
}
界面集成方案
通过Logseq的UI API实现提醒管理界面:
// 在侧边栏添加提醒面板
logseq.App.registerUIItem('sidebar', {
key: 'reminder-panel',
path: 'src/ui/sidebar.tsx',
label: '时间提醒'
});
// 添加编辑器工具栏按钮
logseq.Editor.registerBlockContextMenuItem('添加提醒', async (blockId) => {
const block = await logseq.Editor.getBlock(blockId);
showReminderDialog(blockId, block?.content || '');
});
高级功能扩展
自然语言日期解析
集成date-fns库实现自然语言处理:
import { parse } from 'date-fns';
// 解析"明天下午3点"为Date对象
const parseNaturalDate = (text: string): Date | null => {
const patterns = [
/明天 (\d+)点/,
/(\d+)月(\d+)日 (\d+):(\d+)/,
/(\d+)天后/
];
// 实现解析逻辑...
return parse(text, 'yyyy-MM-dd HH:mm', new Date());
};
与日历应用同步
利用LSPluginRequest实现外部API调用:
// 同步到Google日历
async function syncToGoogleCalendar(reminder: Reminder) {
const event = {
summary: reminder.content,
start: { dateTime: reminder.scheduledTime.toISOString() },
end: { dateTime: new Date(reminder.scheduledTime.getTime() + 30*60*1000).toISOString() }
};
return request._request({
url: 'https://www.googleapis.com/calendar/v3/calendars/primary/events',
method: 'POST',
headers: {
'Authorization': `Bearer ${userToken}`
},
data: event,
returnType: 'json'
});
}
部署与使用指南
插件安装
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/lo/logseq - 进入插件目录:
cd logseq/plugins/reminder-plugin - 安装依赖:
npm install - 构建插件:
npm run build - 在Logseq中加载:设置 > 插件 > 加载已安装插件 > 选择本插件目录
使用场景示例
场景1:项目截止日期提醒
- 在项目页面添加块:
## 网站改版 [due:: 2025-11-15] - 右键点击块,选择"添加提醒"
- 设置提前3天提醒,每日重复
- 系统将在11月12日开始每日提醒
场景2:周期性任务管理
- 创建"每周回顾"页面
- 添加提醒规则:每周日晚8点
- 插件自动创建周期性提醒
- 完成后自动生成下周提醒
常见问题解决
提醒不触发
- 检查系统时间是否准确
- 确认插件是否有权限发送通知:系统设置指南
- 查看插件日志:
~/.logseq/plugins/reminder-plugin/logs.txt
数据备份与迁移
提醒数据存储在:~/.logseq/plugins/reminder-plugin/storage/,定期备份此目录即可。迁移时复制到新设备相同路径下。
总结与展望
通过本文介绍的方法,你已掌握基于Logseq插件系统构建时间提醒功能的核心技术。该方案利用LSPlugin.Storage.ts实现数据持久化,LSPlugin.Request.ts处理异步任务,结合LSPlugin.Search.ts实现内容关联,为知识管理添加了时间维度。
未来可探索的方向:
- 基于AI的提醒智能推荐
- 与第三方日历深度集成
- 团队协作场景下的共享提醒
完整代码示例可参考官方插件模板,更多API细节请查阅Logseq插件开发文档。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



