配置Discord通知技能Skill configure-discord

这个技能用于通过自然语言交互配置Discord webhook或bot通知,使OMC工具能够在会话结束、需要用户输入或完成后台任务时自动发送通知。它包括检测现有配置、选择通知方法、设置webhook或bot、配置提及选项、选择触发事件、测试配置等步骤,简化了开发运维中的通知设置流程。关键词:Discord、通知配置、webhook、bot、OMC、自然语言、DevOps、自动化、技能设置。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

名称: 配置-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 通知?”

选项:

  1. Webhook(推荐) - 在您的 Discord 频道中创建一个 webhook。简单,无需 bot。只需粘贴 URL。
  2. 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:

询问两个问题:

  1. “粘贴您的 Discord bot token” - 来自 discord.com/developers > 您的应用 > Bot > Token
  2. “粘贴频道 ID” - 右键点击频道 > 复制频道 ID(需要开发者模式)

步骤 4: 配置提及(用户 ping)

使用 AskUserQuestion:

问题: “您希望通知提及(ping)某人吗?”

选项:

  1. 是,提及用户 - 通过 Discord 用户 ID 标记特定用户
  2. 是,提及角色 - 通过角色 ID 标记角色
  3. 无提及 - 仅发布消息而不 ping 任何人

如果用户想提及用户:

询问: “要提及的 Discord 用户 ID 是什么?(右键点击用户 > 复制用户 ID,需要开发者模式)”

提及格式: <@USER_ID>(例如,<@1465264645320474637>

如果用户想提及角色:

询问: “要提及的 Discord 角色 ID 是什么?(服务器设置 > 角色 > 右键点击角色 > 复制角色 ID)”

提及格式: <@&ROLE_ID>(例如,<@&123456789>

步骤 5: 配置事件

使用 AskUserQuestion,设置 multiSelect:

问题: “哪些事件应触发 Discord 通知?”

选项(multiSelect: true):

  1. 会话结束(推荐) - 当 Claude 会话完成时
  2. 需要输入 - 当 Claude 等待您的响应时(适合长时间运行任务)
  3. 会话开始 - 当新会话开始时
  4. 会话继续 - 当持久模式保持会话活跃时

默认选择: session-end + ask-user-question。

步骤 6: 可选用户名覆盖

使用 AskUserQuestion:

问题: “自定义 bot 显示名称?(在 Discord 中显示为 webhook 发送者名称)”

选项:

  1. OMC(默认) - 显示为“OMC”
  2. Claude Code - 显示为“Claude Code”
  3. 自定义 - 输入自定义名称

步骤 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:

问题: “发送测试通知以验证设置?”

选项:

  1. 是,现在测试(推荐) - 发送测试消息到您的 Discord 频道
  2. 否,稍后测试 - 跳过测试

如果测试:

# 对于 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