名称: 配置-discord 描述: 通过自然语言配置Discord webhook/bot通知 triggers:
- “配置 discord”
- “设置 discord”
- “discord 通知”
- “discord webhook”
配置 Discord 通知
设置 Discord 通知,以便 OMC 在会话结束、需要输入或完成后台任务时能够提醒您。
这个技能如何工作
这是一个交互式、自然语言配置技能。通过使用 AskUserQuestion 提问,引导用户完成设置。将结果写入 ~/.claude/.omc-config.json。
步骤 1: 检测现有配置
CONFIG_FILE="$HOME/.claude/.omc-config.json"
if [ -f "$CONFIG_FILE" ]; then
# 检查现有的 discord 配置
HAS_DISCORD=$(jq -r '.notifications.discord.enabled // false' "$CONFIG_FILE" 2>/dev/null)
HAS_DISCORD_BOT=$(jq -r '.notifications["discord-bot"].enabled // false' "$CONFIG_FILE" 2>/dev/null)
WEBHOOK_URL=$(jq -r '.notifications.discord.webhookUrl // empty' "$CONFIG_FILE" 2>/dev/null)
MENTION=$(jq -r '.notifications.discord.mention // empty' "$CONFIG_FILE" 2>/dev/null)
if [ "$HAS_DISCORD" = "true" ] || [ "$HAS_DISCORD_BOT" = "true" ]; then
echo "EXISTING_CONFIG=true"
echo "WEBHOOK_CONFIGURED=$HAS_DISCORD"
echo "BOT_CONFIGURED=$HAS_DISCORD_BOT"
[ -n "$WEBHOOK_URL" ] && echo "WEBHOOK_URL=$WEBHOOK_URL"
[ -n "$MENTION" ] && echo "MENTION=$MENTION"
else
echo "EXISTING_CONFIG=false"
fi
else
echo "NO_CONFIG_FILE"
fi
如果找到现有配置,向用户显示当前配置,并询问是否要更新或重新配置。
步骤 2: 选择 Discord 方法
使用 AskUserQuestion:
问题: “您希望如何发送 Discord 通知?”
选项:
- Webhook(推荐) - 在您的 Discord 频道中创建一个 webhook。简单,无需 bot。只需粘贴 URL。
- Bot API - 使用 Discord bot token + 频道 ID。更灵活,需要 bot 应用程序。
步骤 3A: Webhook 设置
如果用户选择 Webhook:
使用 AskUserQuestion:
问题: “粘贴您的 Discord webhook URL。创建方法:服务器设置 > 集成 > Webhooks > 新建 Webhook > 复制 URL”
用户将在“其他”字段中键入他们的 webhook URL。
验证 URL:
- 必须以
https://discord.com/api/webhooks/或https://discordapp.com/api/webhooks/开头 - 如果无效,解释格式并再次询问
步骤 3B: Bot API 设置
如果用户选择 Bot API:
询问两个问题:
- “粘贴您的 Discord bot token” - 来自 discord.com/developers > 您的应用 > Bot > Token
- “粘贴频道 ID” - 右键点击频道 > 复制频道 ID(需要开发者模式)
步骤 4: 配置提及(用户 ping)
使用 AskUserQuestion:
问题: “您希望通知提及(ping)某人吗?”
选项:
- 是,提及用户 - 通过 Discord 用户 ID 标记特定用户
- 是,提及角色 - 通过角色 ID 标记角色
- 无提及 - 仅发布消息而不 ping 任何人
如果用户想提及用户:
询问: “要提及的 Discord 用户 ID 是什么?(右键点击用户 > 复制用户 ID,需要开发者模式)”
提及格式: <@USER_ID>(例如,<@1465264645320474637>)
如果用户想提及角色:
询问: “要提及的 Discord 角色 ID 是什么?(服务器设置 > 角色 > 右键点击角色 > 复制角色 ID)”
提及格式: <@&ROLE_ID>(例如,<@&123456789>)
步骤 5: 配置事件
使用 AskUserQuestion,设置 multiSelect:
问题: “哪些事件应触发 Discord 通知?”
选项(multiSelect: true):
- 会话结束(推荐) - 当 Claude 会话完成时
- 需要输入 - 当 Claude 等待您的响应时(适合长时间运行任务)
- 会话开始 - 当新会话开始时
- 会话继续 - 当持久模式保持会话活跃时
默认选择: session-end + ask-user-question。
步骤 6: 可选用户名覆盖
使用 AskUserQuestion:
问题: “自定义 bot 显示名称?(在 Discord 中显示为 webhook 发送者名称)”
选项:
- OMC(默认) - 显示为“OMC”
- Claude Code - 显示为“Claude Code”
- 自定义 - 输入自定义名称
步骤 7: 写入配置
读取现有配置,合并新的 Discord 设置,并写回:
CONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"
if [ -f "$CONFIG_FILE" ]; then
EXISTING=$(cat "$CONFIG_FILE")
else
EXISTING='{}'
fi
对于 Webhook 方法:
使用收集的值构建通知对象,并使用 jq 合并到 .omc-config.json:
# WEBHOOK_URL, MENTION, USERNAME 从用户收集
# EVENTS 是启用的活动列表
echo "$EXISTING" | jq \
--arg url "$WEBHOOK_URL" \
--arg mention "$MENTION" \
--arg username "$USERNAME" \
'.notifications = (.notifications // {enabled: true}) |
.notifications.enabled = true |
.notifications.discord = {
enabled: true,
webhookUrl: $url,
mention: (if $mention == "" then null else $mention end),
username: (if $username == "" then null else $username end)
}' > "$CONFIG_FILE"
对于 Bot API 方法:
echo "$EXISTING" | jq \
--arg token "$BOT_TOKEN" \
--arg channel "$CHANNEL_ID" \
--arg mention "$MENTION" \
'.notifications = (.notifications // {enabled: true}) |
.notifications.enabled = true |
.notifications["discord-bot"] = {
enabled: true,
botToken: $token,
channelId: $channel,
mention: (if $mention == "" then null else $mention end)
}' > "$CONFIG_FILE"
如果用户未选择所有事件,添加事件特定配置:
对于每个未选择的事件,禁用它:
# 示例: 如果未选择 session-start,禁用它
echo "$(cat "$CONFIG_FILE")" | jq \
'.notifications.events = (.notifications.events // {}) |
.notifications.events["session-start"] = {enabled: false}' > "$CONFIG_FILE"
步骤 8: 测试配置
写入配置后,提供发送测试通知:
使用 AskUserQuestion:
问题: “发送测试通知以验证设置?”
选项:
- 是,现在测试(推荐) - 发送测试消息到您的 Discord 频道
- 否,稍后测试 - 跳过测试
如果测试:
# 对于 webhook:
curl -s -o /dev/null -w "%{http_code}" \
-H "Content-Type: application/json" \
-d "{\"content\": \"${MENTION:+$MENTION\
}OMC 测试通知 - Discord 已配置!\"}" \
"$WEBHOOK_URL"
报告成功或失败。如果失败,帮助用户调试(检查 URL、权限等)。
步骤 9: 确认
显示最终配置摘要:
Discord 通知已配置!
方法: Webhook / Bot API
提及: <@1465264645320474637>(或“无”)
事件: session-end, ask-user-question
用户名: OMC
配置保存到: ~/.claude/.omc-config.json
您也可以通过环境变量设置:
OMC_DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
OMC_DISCORD_MENTION=<@1465264645320474637>
重新配置: /oh-my-claudecode:configure-discord
配置 Telegram: /oh-my-claudecode:configure-telegram
环境变量替代方法
用户可以通过在 shell 配置文件中设置环境变量完全跳过此向导:
Webhook 方法:
export OMC_DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."
export OMC_DISCORD_MENTION="<@1465264645320474637>" # 可选
Bot API 方法:
export OMC_DISCORD_NOTIFIER_BOT_TOKEN="您的-bot-token"
export OMC_DISCORD_NOTIFIER_CHANNEL="您的频道-id"
export OMC_DISCORD_MENTION="<@1465264645320474637>" # 可选
环境变量由通知系统自动检测,无需 .omc-config.json。