Token导航 LogoToken导航TokenDH.com
dicoclerk (Jinwang Mok) logo
音视频未说明官方级别未说明来源级核验

dicoclerk (Jinwang Mok)

MCP Server

Discord语音频道实时语音转文字工具,支持说话人识别、自动会议记录生成和MCP服务器集成,适用于韩英双语会议团队。

工具数

10

提示词数

0

GitHub Stars

0

资源数

0
语音识别JavaScript语音音频

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

JinwangMok

提供方

JinwangMok

最后核验

2026/5/17 20:22

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

狄克克利克

![MIT License](LICENSE)

Discord语音通道会议员——实时语音转文本,演讲者日记化,自动生成会议纪要,MCP服务器集成。

dicoclerk加入Discord语音通道,通过Deepgram的STT引擎实时捕获音频并识别说话者,使用四种智能策略消除重复的话语,并生成包含参与者列表、摘要和行动项的结构化会议纪要。专为使用韩语/英语双语会议的团队而设计。

______________________________________________________________________

特性

  • 斜杠命令: /start 为了开始记录, /stop 结束并自动生成分钟数
  • 具有扬声器日记功能的实时STT:Deepgram's nova-2 model identifies speakers in live audio(支持韩语/英语)
  • 4种重复数据消除策略:内容指纹识别、说话者身份匹配、时间戳接近度和模糊相似性(Levenshtein距离)
  • 结构化会议纪要:带有日期/时间、参与者、摘要、关键讨论点、行动项目和完整成绩单的自动格式化标记
  • 自动断开连接:Bot在语音通道变空时离开
  • 连接弹性:Deepgram通过指数回退自动重新连接(可配置最大重试次数)
  • 连接池:通过可选的多连接池支持5-10个并发扬声器
  • MCP服务器模式:10个外部代理集成工具(会话管理、记录/分钟查询、上下文搜索、摘要)
  • 会议历史记录搜索:按日期、参与者、关键字、频道名称查找和检索过去的分钟数
  • 独立操作:无需Openclaw或外部代理即可运行——可以作为纯Discord机器人运行
  • 交互式安装程序: setup.sh 指导您完成Discord机器人程序配置和API密钥设置
  • 数据持久层:将成绩单、会议纪要和会议索引本地存储在磁盘上

______________________________________________________________________

建筑

┌─────────────────────────────────────────────────────────────────┐
│                      Discord Client                              │
│  (/start, /stop slash commands + voice state events)            │
└─────────────────────────────────────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────────┐
│                  Session Manager                                 │
│  (Tracks active sessions per guild, voice connection lifecycle) │
└─────────────────────────────────────────────────────────────────┘
                            │
        ┌───────────────────┴───────────────────┐
        ▼                                       ▼
┌──────────────────────┐          ┌──────────────────────┐
│ Audio Capture &      │          │   Deepgram STT       │
│ Session Coordinator  │◄────────►│  (Connection Pool)   │
│ (per voice channel)  │          │  (nova-2, diarization)
└──────────────────────┘          └──────────────────────┘
        │
        ▼
┌──────────────────────────────────────────────────────────────────┐
│                    Deduplication Engine                           │
│  (Fingerprint, Similarity, Timestamp, Fuzzy Matching)           │
└──────────────────────────────────────────────────────────────────┘
        │
        ▼
┌──────────────────────────────────────────────────────────────────┐
│              Minutes Generator & Formatter                        │
│  (Markdown formatting, index storage, Discord delivery)          │
└──────────────────────────────────────────────────────────────────┘
        │
        ▼
┌──────────────────────────────────────────────────────────────────┐
│          Data Directory (./data by default)                      │
│  ├─ transcripts/  (raw STT output)                               │
│  ├─ minutes/      (formatted meeting minutes)                    │
│  └─ recordings/   (optional: Discord audio files)                │
└──────────────────────────────────────────────────────────────────┘

Optional: MCP Server Mode
┌──────────────────────────────────────────────────────────────────┐
│              MCP Server (npm run mcp)                             │
│  (10 tools: session control, queries, search, summarization)    │
│  (Integrates with Openclaw or other agents)                      │
└──────────────────────────────────────────────────────────────────┘

______________________________________________________________________

先决条件

- 所需意向:消息内容、儿童语音状态、儿童成员 - 所需权限:连接到语音、用语音说话、发送消息、附加文件、使用应用程序命令

- 免费等级:每月200美元的积分

  • Git (用于克隆存储库)

______________________________________________________________________

快速开始

1.克隆存储库

git clone https://github.com/yourusername/dicoclerk.git
cd dicoclerk

2.运行交互式安装程序

bash setup.sh

安装程序将:

  • 提示输入您的Discord机器人令牌和客户端ID
  • 要求提供可选的Discord公会/频道ID(建议用于更快的开发)
  • 请求您的Deegram API密钥
  • 让您选择语言支持(韩语、英语或多语言)
  • 创建 .env 配置文件
  • 安装Node.js依赖项
  • 注册 /start/stop 斜杠命令

3.启动Bot

npm start

机器人将登录并出现在您的Discord服务器中。您将看到:

✅ dicoclerk is online as YourBotName#1234
   Guilds: 1

4.在Discord中测试

  1. 加入服务器中的语音频道
  2. 类型 /start 开始录制
  3. 说话!机器人将实时转录
  4. 类型 /stop 结束会话并生成会议纪要
  5. 分钟数在1-2分钟内以标记文件的形式出现在文本频道中

______________________________________________________________________

配置

创建一个 .env 文件或运行 setup.sh 以自动填充它。文件遵循以下结构:

# Discord Bot Configuration
DISCORD_TOKEN=your_discord_bot_token_here
DISCORD_CLIENT_ID=your_discord_client_id_here

# Optional: Guild ID for development (faster command registration)
DISCORD_GUILD_ID=your_guild_id

# Optional: Default text channel for posting meeting minutes
MINUTES_CHANNEL_ID=your_text_channel_id

# Deepgram API Configuration
DEEPGRAM_API_KEY=your_deepgram_api_key_here

# Language settings: ko (Korean only), en (English only), or multi (both)
STT_LANGUAGE=multi

# Data storage directory (transcripts, minutes, recordings)
DATA_DIR=./data

环境变量

变量必填描述
DISCORD_TOKEN机器人身份验证令牌
DISCORD_CLIENT_IDOAuth2和命令注册的应用程序ID
DISCORD_GUILD_ID开发模式的服务器ID(将命令注册从~15分钟加速到~1秒)
MINUTES_CHANNEL_ID分钟的默认文本频道(可以覆盖每个会话)
DEEPGRAM_API_KEYSTT的Deepcram API密钥
STT_LANGUAGE语言代码: ko, en,或 multi (默认值: multi)
DATA_DIR成绩单/分钟的本地目录(默认: ./data)

______________________________________________________________________

用法

斜杠命令

/start

加入您当前的语音频道并开始录制。

选项:

  • language (可选):覆盖此会话的默认语言

- ko --仅限韩语 - en --仅限英语 - multi --自动检测韩语和英语

答复:

✅ **Recording started** in #voice-channel
🎙️ Language: **Korean + English**
👤 Started by: **yourname#1234**
🔊 Speech recognition: **Active**

Use `/stop` to end the session and generate meeting minutes.

要求:

  • 您必须处于语音通道中
  • 每台服务器只有一个活动会话
  • 机器人必须具有语音通道权限

/stop

结束录制会话,完成记录,并触发分钟生成。

答复:

✅ **Session ended**
⏱️ Duration: **12m 34s**
👥 Participants: **4**
📝 Transcript entries: **156**

Meeting minutes will be generated and posted within 1–2 minutes.

实时状态消息

录制时,机器人会向文本通道发送状态更新:

  • Deepgram重新连接: ⚠️ Speech recognition connection interrupted. Reconnecting... (attempt 1/5)
  • 重新连接成功: ✅ Speech recognition reconnected. Transcription continues.
  • 永久性故障: ❌ **Speech recognition connection lost permanently.** Partial transcript has been saved...
  • 频道为空: ✅ Recording auto-stopped (channel emptied). Processing...

会议纪要格式

生成的分钟是具有以下结构的markdown文件:

# Meeting Minutes: Project Planning Session
**Date:** 2025-04-03 | **Time:** 14:30–14:42 (12m 34s)  
**Channel:** #team-standup  
**Language:** Korean, English  

## Attendees (4 participants)
- Alice (8 utterances, 2m 15s)
- Bob (6 utterances, 1m 42s)
- Charlie (5 utterances, 1m 08s)
- Diana (4 utterances, 0m 49s)

## Summary
Key topics discussed: Project timeline, resource allocation, Q2 roadmap updates.

## Key Discussion Points
- **Timeline**: Q2 launch target confirmed; engineering team needs 2 additional weeks.
- **Resources**: Budget approval for cloud infrastructure in progress.
- **Dependencies**: Marketing content needs finalization by April 10.

## Action Items
1. **Alice** — Update project charter by 2025-04-08
2. **Bob** — Prepare resource estimates by 2025-04-06
3. **Charlie** — Coordinate with marketing on content timeline

## Full Transcript
**Alice** [00:05–00:12] "Good afternoon everyone. Let's start with the Q2 roadmap."

**Bob** [00:15–00:28] "Yep, we reviewed the timeline yesterday. Engineering needs about two more weeks..."
...

分钟数自动:

  • 已保存到 ./data/minutes/YYYY-MM-DD_HH-MM-SS_GuildName_ChannelName.md
  • 作为附件发布到文本频道
  • 索引在 ./data/minutes/index.jsonl 搜索

______________________________________________________________________

MCP服务器模式

dicoclerk包括一个MCP(模型上下文协议)服务器,用于与Openclaw等外部代理集成。

启动MCP服务器

npm run mcp

服务器监听stdio(代理连接)。

可用工具(共10个)

会话管理

start_session 在语音通道中启动新的录制会话。

参数:

  • guild_id (字符串,必填):Discord公会ID
  • voice_channel_id (字符串,必填):要录制的语音通道ID
  • text_channel_id (字符串,必填):状态/分钟的文本通道
  • language (枚举:'ko'|'en'|'multi',可选):STT语言(默认值:'multi')

退货: { success, session_id, message }

stop_session 停止正在进行的录制会话。

参数:

  • guild_id (字符串,必填):具有活动会话的公会

退货: { success, duration, transcriptCount, minutesPath }

list_sessions 列出所有公会的所有活动录音会话。

退货: { sessions: [ { guild_id, channel_id, started_at, duration, participants } ] }

会话查询

get_session 获取特定会话的详细信息。

参数:

  • guild_id (字符串,必填):帮会ID

退货: { session: { guildId, channelId, startedAt, duration, participants, status } }

get_transcript 获取当前或已完成的成绩单。

参数:

  • guild_id (字符串,必填):帮会ID
  • format (枚举:“原始”|“格式化”,可选):输出格式(默认:“格式化”)

退货: { transcript: [ { speaker, text, timestamp, confidence, isFinal } ] }

get_minutes 获取会话生成的会议纪要。

参数:

  • guild_id (字符串,必填):帮会ID
  • session_id (字符串,可选):特定会话(默认为最新)

退货: { minutes: markdown_content }

存储和搜索

list_recordings 列出磁盘上存储的所有成绩单和会议记录。

参数:

  • limit (数字,可选):最大结果(默认值:20)
  • guild_id (字符串,可选):按公会ID筛选

退货: { recordings: [ { date, guild_name, channel_name, participants, duration } ] }

search_minutes 按日期、渠道、参与者或自由文本搜索会议纪要。

参数:

  • query (字符串,可选):自由文本搜索
  • guild_id (字符串,可选):按公会过滤
  • channel_name (字符串,可选):部分通道名称匹配
  • participant (字符串,可选):部分参与者姓名匹配
  • date_from (字符串,可选):开始日期(YYYY-MM-DD)
  • date_to (字符串,可选):结束日期(YYYY-MM-DD)
  • language (字符串,可选):语言代码(KO/EN)
  • limit (数字,可选):最大结果(默认值:20)
  • offset (数字,可选):分页偏移量(默认值:0)

退货: { results: [ { date, guild_name, channel_name, participants, duration } ] }

search_meeting_minutes 搜索并检索包含完整降价内容的前几分钟。

参数:

  • query (字符串,可选):跨元数据和内容的自由文本搜索
  • guild_id (字符串,可选):按公会过滤
  • channel_name (字符串,可选):部分通道匹配
  • participant (字符串,可选):部分参与者匹配
  • date_from (字符串,可选):开始日期(YYYY-MM-DD)
  • date_to (字符串,可选):结束日期(YYYY-MM-DD)
  • keywords (字符串数组,可选):搜索关键字内容
  • language (字符串,可选):语言代码
  • limit (数字,可选):最大结果(默认值:5)
  • offset (数字,可选):分页偏移
  • include_content (布尔值,可选):包含完整的markdown(默认值:true)

退货: { results: [ { date, guild_name, channel_name, participants, content } ] }

summarize_minutes 根据过去的会议记录生成简明的上下文摘要。

参数:

  • query (字符串,可选):搜索/筛选条件
  • guild_id (字符串,可选):按公会过滤
  • date_from (字符串,可选):开始日期
  • date_to (字符串,可选):结束日期
  • summarize_count (number,可选):要总结的会议数(默认值:5)
  • context_type (字符串,可选):摘要类型(“执行”、“详细”或“快速”)

退货: { summary: contextual_narrative, references: [ { date, source } ] }

______________________________________________________________________

项目结构

dicoclerk/
├── README.md                          # This file
├── LICENSE                            # MIT license
├── package.json                       # Dependencies & npm scripts
├── .env.example                       # Configuration template
├── setup.sh                           # Interactive installer
│
├── src/
│   ├── index.js                       # Main Discord bot entry point
│   ├── deploy-commands.js             # Register /start, /stop commands
│   ├── mcp-server.js                  # MCP server entry point
│   │
│   ├── commands/
│   │   ├── start.js                   # /start slash command handler
│   │   └── stop.js                    # /stop slash command handler
│   │
│   ├── voice/
│   │   ├── session-manager.js         # Session lifecycle & voice connection pool
│   │   └── connection-manager.js      # Discord voice connection wrapper
│   │
│   ├── audio/
│   │   ├── session-coordinator.js     # Orchestrates audio capture & Deepgram
│   │   └── audio-capture-pipeline.js  # Subscribes to voice receiver, forwards audio
│   │
│   ├── stt/
│   │   ├── deepgram-client.js         # Deepgram streaming client (nova-2 + diarization)
│   │   ├── connection-pool.js         # Multi-connection pooling for 5-10 speakers
│   │   ├── connection-resilience.js   # Auto-reconnect with exponential backoff
│   │   └── dedup.js                   # 4 deduplication strategies
│   │
│   ├── minutes/
│   │   ├── generator.js               # End-to-end minutes generation pipeline
│   │   ├── formatter.js               # Markdown formatting logic
│   │   ├── summarizer.js              # Heuristic summary extraction
│   │   └── index-store.js             # Meeting index (JSONL file storage)
│   │
│   ├── session/
│   │   └── session-cleanup.js         # Shared teardown (Deepgram, transcript, voice)
│   │
│   └── mcp/
│       ├── server.js                  # MCP server setup & lifecycle
│       ├── tools.js                   # Tool definitions (10 tools)
│       ├── handlers.js                # Tool implementation logic
│       ├── transport.js               # Stdio transport for MCP
│       └── index.js                   # MCP module exports
│
├── tests/
│   ├── *.test.js                      # Node.js test files (using built-in test runner)
│   └── *.py                           # Python test utilities
│
└── data/                              # (Auto-created by setup.sh)
    ├── transcripts/                   # Raw STT output (JSON)
    ├── minutes/                       # Formatted meeting minutes (Markdown)
    │   └── index.jsonl                # Meeting index for search
    └── recordings/                    # Optional: Discord audio files

______________________________________________________________________

重复数据消除策略

dicoclerk使用四种互补的重复数据删除方法来清理实时STT输出:

  1. 内容指纹:标准化文本的SHA-256哈希+说话者ID。快速精确匹配检测。
  2. 说话者身份匹配:只有来自同一说话者的话语才被视为重复。
  3. 时间戳接近度:检查可配置时间窗口内的话语;窗外的旧话语是安全的。
  4. 模糊相似性(Levenshtein):对于近似重复(拼写错误、部分重复),如果高于相似性阈值(默认值:0.75),则计算编辑距离和匹配。

配置(在dedup.js中):

const DEFAULT_DEDUP_CONFIG = {
  timeWindow: 5.0,           // Seconds
  similarityThreshold: 0.75, // 0.0–1.0
  windowSize: 100,           // Utterances
  deduplicateInterim: true,  // Treat interim results as replaceable
  exactMatchWindow: 10.0,    // Seconds for exact-match grace period
};

______________________________________________________________________

连接弹性

Deegram连接可能会由于网络问题或API速率限制而失败。dicoclerk自动:

  1. 发现 连接丢失
  2. 等待 具有指数回退(1s→ 2s → 4s → 8s、 可配置最大60秒)
  3. 再连接 最多5次尝试(可配置)
  4. 通知 尝试与成功/失败的文本频道
  5. 倒退 如果重新连接重试失败,则转换为部分转录

配置(在connection resilience.js中):

const RECONNECT_DEFAULTS = {
  maxAttempts: 5,           // Max reconnection attempts
  initialDelayMs: 1000,     // 1 second
  maxDelayMs: 60000,        // Cap at 60 seconds
  backoffMultiplier: 2.0,   // Exponential growth
};

______________________________________________________________________

自动断开连接

当语音通道变空(最后一个参与者离开)时,机器人会自动:

  1. 等待2秒(可配置的宽限期,以防止切换频道时出现误报)
  2. 检查通道是否仍然为空
  3. 停止音频捕获和Deepgram连接
  4. 生成并交付分钟数
  5. 离开语音通道
  6. 将清理摘要发布到文本频道

______________________________________________________________________

测试

运行完整的测试套件:

npm test

这将执行所有操作 .test.js 文件在 tests/ 使用Node.js内置的测试运行器。

测试覆盖范围包括:

  • 音频捕获管道和会话协调
  • 连接池管理和弹性
  • 重复数据消除策略(所有4种变体)
  • 格式化程序输出和markdown结构
  • 分钟生成器和文件I/O
  • 索引存储(JSONL查询)
  • MCP服务器和工具处理程序
  • Slash命令验证
  • 会话生命周期和清理

______________________________________________________________________

发展

自动重新加载模式

对于快速迭代:

npm run dev

使用Node.js --watch 在文件更改时重新启动。

重新注册Slash命令

如果修改命令定义:

npm run deploy-commands

命令在全球范围内注册(约15分钟)或立即注册到您的开发公会(如果 DISCORD_GUILD_ID 已设置)。

环境调试

检查您的配置:

cat .env

确保所有必需的变量都已设置且非空。

______________________________________________________________________

故障排除

Bot没有响应 /start

  1. 验证斜线命令是否已注册:

- 在Discord中右键单击机器人→ 检查 /start/stop 命令 - 如果缺失,请运行: npm run deploy-commands

  1. 检查机器人权限:

- 右键单击服务器→ 服务器设置→ 角色→ 狄克勒克角色 - 确保启用了“连接到语音”、“语音通话”、“发送消息”、“附加文件”

  1. 确认意图:

- 转到Discord开发者门户→ 您的应用程序→ Bot - 启用:消息内容、GUI语音状态、GUI成员

“未配置Deepcram API密钥”

  • DEEPGRAM_API_KEY.env
  • 重启机器人程序: npm start

机器人加入语音,但没有出现文字记录

  1. 检查Deegram API密钥的有效性:

- 访问https://console.deepgram.com并验证您的密钥是否未过期 - 确保您的帐户有可用的信用额度

  1. 检查机器人音频权限:

- 服务器设置→ 角色→ 狄克克利克→ 语音权限 - 启用:“连接”、“说话”、“使用语音活动”

  1. 检查机器人是否可以看到语音频道:

- 服务器设置→ 频道→ 语音频道→ 权限 - 确保dicoclerk角色具有“连接”和“查看频道”权限

未生成分钟数

  1. 检查 /stop 已成功执行:

- 在文本通道中查找清理消息(转录计数、持续时间)

  1. 检查文件权限:

- 确保 ./data/minutes/ 目录可写: ls -la data/

  1. 检查日志:

- 寻找 [MinutesGenerator] bot控制台输出中的消息

Deepgram成本高

  • 使用 STT_LANGUAGE=koSTT_LANGUAGE=en 而不是 multi 减少加工
  • 更短的会话=更低的成本
  • 监控实时使用情况https://console.deepgram.com/usage

______________________________________________________________________

业绩说明

  • 典型会话:30名参与者,1小时→ ~2–3 MB转录本,0.5-1 MB分钟,在\<2分钟内生成
  • 连接池:默认单连接可轻松处理5-10个扬声器;负载下自动扩展到2-3个连接
  • 分钟存储:每分钟会议时间约1 KB(降价)
  • 重复数据删除开销:每句话\<50ms(可忽略不计)

______________________________________________________________________

许可证

MIT。看 许可证 了解详情。

______________________________________________________________________

贡献

欢迎投稿!拜托:

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature/your-feature
  3. 以明确的信息承诺: git commit -m "Add feature X"
  4. 推: git push origin feature/your-feature
  5. 打开拉取请求

______________________________________________________________________

支持

  • 文档:参见 README.md 以及内联代码注释
  • 问题:针对bug或功能请求打开GitHub问题
  • Discord帮助:检查 Discord.js深度图 文档

______________________________________________________________________

致谢

目录标签

目录标签

语音识别JavaScript语音音频本地部署会议记录说话人识别实时转写Discord集成

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

session

工具数量(toolCount,工具数)

10

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明session部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP