Discord 交互式机器人

一个基于 Discord.js 的交互式机器人,集成 OpenCode 功能,支持私聊对话、定时任务和本地测试。
系统架构
消息处理流程
用户发送消息 → 存入 SQLite 消息队列
↓
每 2 秒轮询取出一条
↓
调用 OpenCode 处理(单线程)
↓
处理完成后发送回复给用户
- 消息队列:防止并发,同一时只处理一条消息
- Session 持久化:记住对话上下文
定时任务流程
AI 调用 CLI 命令 → 添加/删除任务到 DB
↓
每分钟检查任务是否到期
↓
到期任务 → 插入消息队列
↓
OpenCode 处理 → 发送给用户
Skill 架构
SKILL.md # 项目根目录的 Skill 文件
↓ 启动时自动复制(根据 name 字段)
.opencode/skills/schedule/SKILL.md
↓
OpenCode 加载 Skill
↓
AI 根据指南调用 CLI 命令
↓
CLI 操作数据库
SKILL.md 放在项目根目录,会被 Git 追踪
- 启动时根据 frontmatter 中的
name 字段复制到 .opencode/skills/{name}/
- AI 通过 Skill 文档学习如何使用 CLI 命令,无需自定义工具
环境要求
- Node.js >= 18.0.0
- npm 或 yarn
- OpenCode CLI(用于 AI 功能)
快速开始
1. 克隆仓库
git clone https://github.com/958877748/skills.git
cd discord-bot
2. 安装依赖
npm install
3. 配置 Token
dm-bot config --token <your-token>
export DISCORD_TOKEN=<your-token>
4. 获取 Discord 机器人令牌
- 访问 Discord Developer Portal
- 点击 "New Application" 创建新应用
- 进入 "Bot" 标签页,点击 "Add Bot"
- 在 "Privileged Gateway Intents" 中启用:
- 复制 Bot Token
5. 启动机器人
npm start
npm run dev
dm-bot --mock
CLI 命令
dm-bot start [--token <token>] [--mock]
dm-bot config --token <token>
dm-bot reset
dm-bot schedule create "<cron>" "<content>" [repeat]
dm-bot schedule list
dm-bot schedule delete <id>
Schedule 命令示例
dm-bot schedule create "0 8 * * *" "提醒喝水" true
dm-bot schedule create "30 9 * * 1-5" "开会" true
dm-bot schedule create "0 10 1 * *" "月初提醒" false
dm-bot schedule list
dm-bot schedule delete 1
Cron 表达式
┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日 (1-31)
│ │ │ ┌───────────── 月 (1-12)
│ │ │ │ ┌───────────── 星期 (0-6, 0=周日)
│ │ │ │ │
* * * * *
Mock 模式
用于本地测试,无需真实的 Discord 连接:
dm-bot --mock
const { startBot } = require('./index');
await startBot({ mock: 'non-interactive' });
项目结构
discord-bot/
├── bin/cli.js # CLI 入口
├── index.js # 主入口文件
├── db.js # 数据库操作模块
├── mock.js # Mock 模式支持
├── package.json # 项目配置
└── skills/ # Skill 源文件目录
└── schedule/
└── SKILL.md # 定时任务 Skill(AI 指南)
# 启动后自动生成(在 .gitignore 中)
.opencode/
└── skills/ # 从 skills/ 复制而来
└── schedule/
└── SKILL.md
数据库
使用 SQLite 存储数据:
message_queue - 消息队列表
user_sessions - 用户 Session 表(对话上下文)
scheduled_tasks - 定时任务表
数据库文件会自动创建,无需手动初始化。
注意事项
- 机器人只处理私聊消息,服务器中的消息将被忽略
- 确保 OpenCode CLI 已安装并可用
- 不要将
.env 文件提交到版本控制
- 数据库文件 (
*.db) 不会被 Git 追踪
许可证
MIT