Seerr Discord 通知配置完全指南:Webhook、角色提及与多语言通知
发布时间:2026/9/15 20:41:30 作者:尧图编辑部 阅读量:1,286

Seerr Discord 通知配置完全指南Webhook、角色提及与多语言通知【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerrSeerr 内置的 Discord 通知代理Notification Agent可以将媒体请求、问题反馈与处理状态等事件实时推送到你管理的 Discord 服务器的指定频道是 Jellyfin / Plex / Emby 家庭媒体栈中最常用的告警渠道之一。本文以官方文档 Discord 通知配置 为主线结合 DiscordAgent 实现 与前端设置表单 NotificationsDiscord.tsx 的源码细节完整讲解每一项配置的语义、底层行为与实战注意事项读完即可独立完成从创建 Webhook 到按语言、按角色定向推送的整套配置。Discord 通知代理能做什么开启 Discord 通知代理后Seerr 会通过 Discord 的 Incoming Webhook 接口向目标频道发送包含富媒体卡片Embed的推送消息。从 通知类型枚举 可以看到它覆盖了完整的媒体生命周期与工单流程通知类型位掩码值触发场景Discord 卡片颜色MEDIA_PENDING2有新的媒体请求等待审批橙色ORANGEMEDIA_APPROVED4请求已批准进入下载流程紫色PURPLEMEDIA_AVAILABLE8媒体已就绪可用绿色GREENMEDIA_FAILED16请求处理失败红色REDTEST_NOTIFICATION32设置页的测试通知默认紫色MEDIA_DECLINED64请求被拒绝红色REDMEDIA_AUTO_APPROVED128请求自动通过紫色PURPLEISSUE_CREATED/ISSUE_REOPENED256 / 2048新问题 / 问题重新打开红色REDISSUE_COMMENT512问题有新评论橙色ORANGEISSUE_RESOLVED1024问题已解决绿色GREENMEDIA_AUTO_REQUESTED4096自动请求如 Plex Watchlist 同步默认紫色每种类型的卡片配色在 buildEmbed 方法 中按Notification类型逐一映射颜色值定义见 EmbedColors 枚举。卡片还会附带“请求人”“请求状态”“上报人”“问题类型”“问题状态”等字段并在配置了applicationUrl时把标题链接到对应的媒体详情页或问题页方便直接从 Discord 跳转处理。前置准备创建 Discord Webhook配置的第一步是在 Discord 中创建 Webhook官方文档给出的路径是Server Settings → Integrations → Webhooks创建一个新的 Webhook 并复制其 URL形如https://discord.com/api/webhooks/id/token。该 URL 就是下面配置中的Webhook URLSeerr 将用它作为通知的发送端点。配置项详解进入 Seerr 的设置 → 通知 → Discord可以看到以下配置项。前端表单的完整字段与校验逻辑可参考 NotificationsDiscord.tsx底层数据模型见 NotificationAgentDiscord 接口。启用代理与通知类型Enable Agent启用代理总开关。shouldSend()方法要求enabled为真且webhookUrl非空才会真正发送见 shouldSend 实现。通知类型选择器使用位掩码bitmask形式保存到types字段勾选后仅发送对应类型的事件未勾选任何类型时types为0。默认值为0不发送任何类型因此启用代理后务必至少勾选一种类型。Embed Poster内嵌海报默认开启embedPoster: true。开启后通知卡片会在缩略图位置展示媒体海报图关闭则只保留文字信息。Webhook URL必填粘贴前面从 Discord 复制的 Webhook URL。前端使用 Yup 校验必须是合法 URL且启用代理时必填服务端在shouldSend()中同样把webhookUrl非空作为发送前提。Notification Role ID可选填写一个 Discord 角色 ID 后该角色会被包含在 Webhook 消息中即发送角色提及。源码实现为当webhookRoleId通过 Snowflake 校验时将其以角色ID形式拼入消息content同时写入allowed_mentions.roles见 send 方法。注意 ID 格式必须是 Discord Snowflake——纯数字。服务端常量DISCORD_SNOWFLAKE_REGEX定义为^\d{17,20}$见 discord.ts 常量前端表单校验为^\d{17,19}$。留空则禁用角色提及。Bot Username可选覆盖机器人在 Discord 中显示的名称。留空时Seerr 会回退使用主设置中的applicationTitle应用标题作为 Webhook 用户名见 send 方法这也是部分用户发现机器人名字与预期不符的原因——只需在这里显式填写即可。Bot Avatar URL可选与用户名同理可覆盖机器人的头像。该值会原样作为avatar_url传给 Discord Webhook。前端校验必须是合法 URL允许留空留空时 Discord 使用 Webhook 默认头像。Use Notification Recipient Locale使用通知接收者语言开启后通知将使用“触发该通知的用户”的显示语言发送——例如提交请求的用户或上报问题的用户。由于 Discord Webhook 是发送到频道而非私信源码中的处理逻辑是取payload.notifyUser.settings.locale作为buildEmbed的国际化 locale见 locale 计算。该选项默认开启useUserLocale: true。Notification Language通知语言当Use Notification Recipient Locale关闭时生效为发往该频道的所有通知固定一种语言。可选项来自 Seerr 支持的全部界面语言AvailableLocale即 server/i18n/locale 下各语言文件对应的语言码默认值为en。Thread ID可选进阶前端表单还提供了一个官方文档之外的隐藏进阶项Thread ID见 NotificationsDiscord.tsx填写 Discord 线程频道 ID 后通知将发布到该线程而不是 Webhook 所在的普通频道。源码通过给 Webhook URL 追加thread_id查询参数实现见 send 方法。留空则发送到 Webhook 关联的默认频道同样需通过 Snowflake 数字校验。用户级 Discord ID 与 提及官方文档提示用户可以在个人设置中填写自己的Discord 用户 ID从而选择是否在相关通知中被 提及。这依赖两个层面的实现数据层用户设置表新增了discordIds字段迁移见 AddDiscordIdsColumn 迁移。发送层当代理开启Enable Mentions启用提及且用户已在个人设置开启 Discord 通知并填写有效 ID 时send()会把匹配的用户以用户ID形式加入消息内容并把去掉了尖括号的纯数字 ID 写入allowed_mentions.users从而精准控制可被提及的用户范围避免everyone式的误打扰见 send 方法。管理员通知场景下还会遍历所有用户筛选出已开启该类型 Discord 通知且shouldSendAdminNotification判定应接收的管理员用户一并提及。发送流程与底层原理一次完整的 Discord 推送在 DiscordAgent.send() 中按以下顺序执行前置过滤若notifySystem为假或当前通知类型不在已勾选的types位掩码内直接跳过。组装提及收集用户提及id与角色提及roleId并同步构造allowed_mentions。确定语言按useUserLocale决定使用接收者语言还是全局通知语言。处理 URL若配置了webhookThreadId向 Webhook URL 追加thread_id参数。构造载荷通过axios.post发送username、avatar_url、embeds由buildEmbed生成与content提及文本其中username未显式配置时回退为应用标题。失败处理任何异常都会被记录为Error sending Discord notification日志中附带错误消息与 Discord 的response.data便于定位 Webhook 失效、限流或权限问题。此外buildEmbed还支持通过payload.extra追加自定义字段并会为嵌入卡片打上当前时间的timestamp使频道内的通知具备清晰的时间线。验证与故障排查测试通知设置页底部提供“发送测试通知”按钮会触发TEST_NOTIFICATION类型推送前端依次展示“发送中 / 发送成功 / 发送失败”三种 Toast见 NotificationsDiscord.tsx。若收不到可先确认代理已启用、types已勾选且 Webhook URL 有效。日志排查推送失败会在 Seerr 后端日志中出现Error sending Discord notification查看其中的response字段即可区分 Discord 返回的错误码如 404 表示 Webhook 被删除、403 表示权限不足。提及不生效确认相关用户的 Discord ID 与角色 ID 是 1720 位的纯数字 Snowflake且用户在个人设置中已为该通知类型开启 Discord 渠道。默认配置速查从 settings 默认值 可以看到 Discord 代理的出厂默认状态discord: { enabled: false, // 默认关闭需手动开启 embedPoster: true, // 默认内嵌海报 types: 0, // 默认不勾选任何通知类型 options: { webhookUrl: , webhookRoleId: , enableMentions: true, // 默认允许提及 locale: en, // 默认通知语言为英文 useUserLocale: true, // 默认优先使用接收者语言 }, }建议的最小可用配置为创建 Webhook → 填入Webhook URL→ 开启Enable Agent→ 在通知类型选择器中勾选需要的类型如媒体可用、请求待审批→ 点击测试按钮验证。如需定向提醒再补充Notification Role ID如需固定统一语言关闭Use Notification Recipient Locale并设置Notification Language。延伸阅读官方 Discord 通知文档docs/using-seerr/notifications/discord.md通知代理核心实现server/lib/notifications/agents/discord.ts颜色与 Snowflake 校验常量server/constants/discord.ts配置类型定义server/interfaces/api/settingsInterfaces.ts前端设置表单src/components/Settings/Notifications/NotificationsDiscord.tsx通知类型位掩码server/lib/notifications/index.ts用户 Discord ID 字段迁移server/migration/postgres/1779783365432-AddDiscordIdsColumn.ts【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考