From 4f9dce70d38ab0821e18b41b3500cefda27523fc Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sun, 10 May 2026 21:47:35 +0800 Subject: [PATCH] feat: add wechat clawbot notification setup UI --- src/assets/images/logos/clawbot.png | Bin 0 -> 64064 bytes .../cards/NotificationChannelCard.vue | 310 ++++++++++++++++++ src/components/dialog/UserAddEditDialog.vue | 10 + src/composables/useSetupWizard.ts | 17 +- src/locales/en-US.ts | 46 ++- src/locales/zh-CN.ts | 45 ++- src/locales/zh-TW.ts | 45 ++- src/utils/imageUtils.ts | 2 + .../setting/AccountSettingNotification.vue | 15 +- src/views/setup/NotificationSettingsStep.vue | 59 +++- src/views/user/UserProfileView.vue | 9 + 11 files changed, 534 insertions(+), 24 deletions(-) create mode 100644 src/assets/images/logos/clawbot.png diff --git a/src/assets/images/logos/clawbot.png b/src/assets/images/logos/clawbot.png new file mode 100644 index 0000000000000000000000000000000000000000..a4726688bc44f6b48a850690cc8fb015b3ea825a GIT binary patch literal 64064 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%0AjVDvhrsDOB5PS(GSe?mKFojgkJl zj4C{gQhwfI4{78)T$Cc7hDHU%Q3kwc?_6%Do$pTm!}h!7*=SA#Mdl!EYzJ5w8~ZuP zGu)Q=!Xvj>OYS~&B)Uc2>HQ$(f*qNuy23^SadM1T_*~=BT)`U%7mL3SlPYlOA&8D) zkVPZ=KXC+&c!+E{DInqdheoE&x{qwG3HiI(&vlu@JTfuZRye{_;2|Lr0@bjSvGjx) z>Bl9Tc-b6LX|8`a7Wa3a?dCC0c3?RKAzvqwk=I{OYNVm&trTzNDvBLnynNd)u{A)H zXSX^-V|vMkUj83jSO~cdh~D-~^`0Vxybsg8p&D;&P<_vyddoC3$2|c8jELshJ*fWg z?Jpcj3ao>nkI_aj>dp%)f#5qmX!)3^@D(K)mBDe%(3?xy=HH8pk4%WTgEwwVBR@A? z{D659R+4wLt|h$Xq%(*lM=o>XQpA8wG~>IQ3Oj!z>KIFa7wgEjKc0|!-RyqJQBRSr zw5vo%svnIljLtsf8WaTfw(2W!o78_i(k=%Xa~5?Npc#bf%+x)IJ@QJ-BhL~$hTc_; zHd@YeR7CC@lsTYX@#fzRfcebT`3MIy;FMR04{>Zz62v;6nN`W)msQ1@255any`|(i z*D4}w27qt(@1w%FT2zOA&@0+Y5s(;b9e3I;@Bb>GDgfYImx!r>#eetWk!&GUtsxmN?%MlY$`(giht_IIfI!oG$-`_O+WpT}L^)_|u?#H)#^Q>OWokBJHO+ToO`DC4u zuaf15yoEr9gmCcl&J8EFTYfe5)jxTRrl>bCYe(OMP@N6Yy7e{bb+P;4yPY!E=g>8> zni3Zs%(^TsOJp#|*ft54XS%n1F&-TKbGWwydqk(={o&=jQtMASWmC=DmMVHfDv}Ax zH{>oS@AtwJT!4=yYG`!dOx}LKq<=_}siF9h5{raq_-{(@(}&*W z6LQR-rG;|9Jrz+V%S@rVi+?gai>@)&JNOxUWOTC3ti|+8#>&Mc(eR3;nW|($WoRQjj*tM z$0Ng7ST+f=zzbp#w_#oXzr}q0qyNXp%q#!BntA2ltN)je|Np-CKmQ!_JICiFs#uhp WcniqHC)ZfupT6G3Q$$^x(EkG#FgXtZ literal 0 HcmV?d00001 diff --git a/src/components/cards/NotificationChannelCard.vue b/src/components/cards/NotificationChannelCard.vue index 70306cd6..c63086a9 100644 --- a/src/components/cards/NotificationChannelCard.vue +++ b/src/components/cards/NotificationChannelCard.vue @@ -1,4 +1,5 @@ + + + + + + + + + + + + + + + + + + +
+
+
{{ t('notification.wechatclawbot.loginStatus') }}
+
{{ wechatClawBotStatusText }}
+
+
+ + {{ t('common.refresh') }} + + + {{ t('notification.wechatclawbot.refreshQrcode') }} + + + {{ t('notification.wechatclawbot.logout') }} + +
+
+ + +
+ + +
+ {{ t('notification.wechatclawbot.noQrcode') }} +
+
+
+ + +
{{ t('notification.wechatclawbot.scanHint') }}
+
+ {{ t('notification.wechatclawbot.accountId') }}: {{ wechatClawBotStatus.account_id }} +
+
+ {{ t('notification.wechatclawbot.qrcodeUpdatedAt') }}: + {{ formatWechatClawBotTime(wechatClawBotStatus.qrcode_updated_at) }} +
+
+
{{ t('notification.wechatclawbot.knownTargets') }}
+ + + +
+ {{ t('notification.wechatclawbot.noKnownTargets') }} +
+
+
+
+
+
({ }, settings: { wechat_userid: null, + wechatclawbot_userid: null, telegram_userid: null, slack_userid: null, discord_userid: null, @@ -503,6 +504,15 @@ onMounted(() => { prepend-inner-icon="mdi-wechat" /> + + + = { + wechat: '企业微信', + wechatclawbot: '微信 ClawBot', + telegram: 'Telegram', + slack: 'Slack', + synologychat: 'SynologyChat', + qqbot: 'QQ', + vocechat: 'VoceChat', + webpush: 'WebPush', + } + wizardData.value.notification.name = `${displayNameMap[type] || type} 通知` } wizardData.value.notification.enabled = true // 不清空config和switchs,保留用户已输入的值 @@ -656,6 +667,8 @@ export function useSetupWizard() { validationErrors.value.notification.WECHAT_APP_SECRET = true } break + case 'wechatclawbot': + break case 'telegram': if (!config.TELEGRAM_TOKEN?.trim()) { errors.push(t('notification.telegram.tokenRequired')) @@ -854,7 +867,7 @@ export function useSetupWizard() { case 5: // 媒体服务器测试 - 只有选择了媒体服务器才测试 return !!wizardData.value.mediaServer.type case 6: // 消息通知测试 - 只有选择了通知才测试 - return !!wizardData.value.notification.type + return !!wizardData.value.notification.type && wizardData.value.notification.type !== 'wechatclawbot' default: return false } diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index 8ab1e6e9..2ffcce2e 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -353,7 +353,8 @@ export default { }, notification: { title: 'Notifications', - description: 'Notification channels (WeChat, Telegram, Slack, SynologyChat, VoceChat, WebPush), message scope', + description: + 'Notification channels (WeChat Work, WeChat ClawBot, Telegram, Slack, SynologyChat, VoceChat, WebPush), message scope', }, about: { title: 'About', @@ -472,6 +473,38 @@ export default { adminsHint: 'User IDs that can use admin menu and commands, separated by commas', adminsPlaceholder: 'User IDs list, separated by commas', }, + wechatclawbot: { + name: 'WeChat ClawBot', + baseUrl: 'iLink Base URL', + baseUrlHint: 'iLink service URL for WeChat ClawBot, keep default in most cases', + defaultTarget: 'Default Target', + defaultTargetHint: 'Optional target userid; leave empty to notify interacted users', + defaultTargetPlaceholder: 'userid (optional)', + admins: 'Admin Whitelist', + adminsHint: 'User IDs allowed to run slash commands, separated by commas', + adminsPlaceholder: 'User IDs list, separated by commas', + pollTimeout: 'Poll Timeout (seconds)', + pollTimeoutHint: 'Long polling timeout, recommended 20-30 seconds', + loginStatus: 'Login Status', + connected: 'Connected', + waiting: 'Waiting for QR scan', + scanned: 'Scanned, waiting for confirmation', + confirmed: 'Confirmed, establishing connection', + expired: 'QR code expired', + refreshQrcode: 'Refresh QR Code', + logout: 'Logout', + noQrcode: 'No QR code yet. Refresh or save config first.', + scanHint: 'Scan with WeChat to bind. Save and enable this channel before first use.', + accountId: 'Account ID', + qrcodeUpdatedAt: 'QR Updated At', + knownTargets: 'Recent Interacted Users', + noKnownTargets: 'No interaction records yet', + statusLoadFailed: 'Failed to load WeChat ClawBot status', + qrcodeRefreshSuccess: 'WeChat ClawBot QR code refreshed', + qrcodeRefreshFailed: 'Failed to refresh WeChat ClawBot QR code', + logoutSuccess: 'WeChat ClawBot logged out', + logoutFailed: 'Failed to logout WeChat ClawBot', + }, telegram: { name: 'Telegram', token: 'Bot Token', @@ -1732,7 +1765,8 @@ export default { timeSaveSuccess: 'Notification send time saved successfully', timeSaveFailed: 'Failed to save notification send time!', channel: 'Notification', - wechat: 'WeChat', + wechat: 'WeChat Work', + wechatClawBot: 'WeChat ClawBot', resourceDownload: 'Resource Download', mediaImport: 'Media Import', subscription: 'Subscription', @@ -1816,7 +1850,7 @@ export default { animeCategory: 'Anime', downloadUser: 'Remote Search Auto Download User List', downloadUserHint: - 'Whether to automatically download when searching with Telegram, WeChat, etc., comma separated, set to all to represent all users auto-download', + 'Whether to auto-download when searching with Telegram, WeChat Work, etc., comma separated, set to all for all users', multipleNameSearch: 'Multiple Name Resource Search', multipleNameSearchHint: 'Search site resources using multiple names (Chinese, English, etc.) and merge search results, will increase site access frequency', @@ -2061,7 +2095,8 @@ export default { resetDefaultAvatar: 'Reset Default Avatar', restoreCurrentAvatar: 'Restore Current Avatar', notifications: 'Notifications', - wechat: 'WeChat UserID', + wechat: 'WeChat Work UserID', + wechatClawBot: 'WeChat ClawBot UserID', telegram: 'Telegram UserID', slack: 'Slack UserID', discord: 'Discord UserID', @@ -2787,7 +2822,8 @@ export default { nickname: 'Nickname', nicknamePlaceholder: 'Display nickname, takes precedence over username', accountBinding: 'Account Binding', - wechatUser: 'WeChat User', + wechatUser: 'WeChat Work User', + wechatClawBotUser: 'WeChat ClawBot User', telegramUser: 'Telegram User', slackUser: 'Slack User', discordUser: 'Discord User', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index cee563db..6ba5a185 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -351,7 +351,7 @@ export default { }, notification: { title: '通知', - description: '通知渠道(微信、Telegram、Slack、SynologyChat、VoceChat、WebPush)、消息发送范围', + description: '通知渠道(企业微信、微信 ClawBot、Telegram、Slack、SynologyChat、VoceChat、WebPush)、消息发送范围', }, about: { title: '关于', @@ -468,6 +468,38 @@ export default { adminsHint: '可使用管理菜单及命令的用户ID列表,多个ID使用,分隔', adminsPlaceholder: '用户ID列表,多个ID使用,分隔', }, + wechatclawbot: { + name: '微信 ClawBot', + baseUrl: 'iLink 地址', + baseUrlHint: '微信 ClawBot iLink 服务地址,通常使用默认值', + defaultTarget: '默认通知目标', + defaultTargetHint: '可填写用户 userid;不填则默认发给已互动用户', + defaultTargetPlaceholder: '用户 userid(可选)', + admins: '管理员白名单', + adminsHint: '允许执行斜杠命令的用户ID列表,多个ID使用,分隔', + adminsPlaceholder: '用户ID列表,多个ID使用,分隔', + pollTimeout: '轮询超时(秒)', + pollTimeoutHint: '长轮询请求超时时间,建议 20-30 秒', + loginStatus: '登录状态', + connected: '已连接', + waiting: '等待扫码', + scanned: '已扫码,待确认', + confirmed: '已确认,正在建立连接', + expired: '二维码已过期', + refreshQrcode: '刷新二维码', + logout: '退出登录', + noQrcode: '暂无二维码,请先刷新或保存配置后重试', + scanHint: '使用微信扫码绑定后,状态会自动刷新。首次使用请先保存并启用该通知渠道。', + accountId: '账号ID', + qrcodeUpdatedAt: '二维码更新时间', + knownTargets: '最近互动用户', + noKnownTargets: '暂无互动用户记录', + statusLoadFailed: '获取微信 ClawBot 状态失败', + qrcodeRefreshSuccess: '微信 ClawBot 二维码已刷新', + qrcodeRefreshFailed: '刷新微信 ClawBot 二维码失败', + logoutSuccess: '微信 ClawBot 已退出登录', + logoutFailed: '微信 ClawBot 退出登录失败', + }, telegram: { name: 'Telegram', token: 'Bot Token', @@ -1703,7 +1735,8 @@ export default { timeSaveSuccess: '通知发送时间保存成功', timeSaveFailed: '通知发送时间保存失败!', channel: '通知', - wechat: '微信', + wechat: '企业微信', + wechatClawBot: '微信 ClawBot', resourceDownload: '资源下载', mediaImport: '整理入库', subscription: '订阅', @@ -1781,7 +1814,7 @@ export default { tvCategory: '电视剧', animeCategory: '动漫', downloadUser: '远程搜索自动下载用户', - downloadUserHint: '使用Telegram、微信等搜索时是否自动下载,使用逗号分割,设置为 all 代表所有用户自动择优下载', + downloadUserHint: '使用Telegram、企业微信等搜索时是否自动下载,使用逗号分割,设置为 all 代表所有用户自动择优下载', multipleNameSearch: '多名称资源搜索', multipleNameSearchHint: '使用多个名称(中文、英文等)搜索站点资源并合并搜索结果,会增加站点访问频率', downloadSubtitle: '下载站点字幕', @@ -2021,7 +2054,8 @@ export default { resetDefaultAvatar: '重置默认头像', restoreCurrentAvatar: '还原当前头像', notifications: '通知', - wechat: '微信ID', + wechat: '企业微信ID', + wechatClawBot: '微信 ClawBot ID', telegram: 'Telegram ID', slack: 'Slack ID', discord: 'Discord ID', @@ -2740,7 +2774,8 @@ export default { nickname: '昵称', nicknamePlaceholder: '显示昵称,优先于用户名显示', accountBinding: '账号绑定', - wechatUser: '微信用户', + wechatUser: '企业微信用户', + wechatClawBotUser: '微信 ClawBot 用户', telegramUser: 'Telegram用户', slackUser: 'Slack用户', discordUser: 'Discord用户', diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts index f2b32880..5e346049 100644 --- a/src/locales/zh-TW.ts +++ b/src/locales/zh-TW.ts @@ -352,7 +352,7 @@ export default { }, notification: { title: '通知', - description: '通知渠道(微信、Telegram、Slack、SynologyChat、VoceChat、WebPush)、消息發送範圍', + description: '通知渠道(企業微信、微信 ClawBot、Telegram、Slack、SynologyChat、VoceChat、WebPush)、消息發送範圍', }, about: { title: '關於', @@ -469,6 +469,38 @@ export default { adminsHint: '可使用管理菜單及命令的用戶ID列表,多個ID使用,分隔', adminsPlaceholder: '用戶ID列表,多個ID使用,分隔', }, + wechatclawbot: { + name: '微信 ClawBot', + baseUrl: 'iLink 地址', + baseUrlHint: '微信 ClawBot iLink 服務地址,通常使用預設值', + defaultTarget: '預設通知目標', + defaultTargetHint: '可填寫使用者 userid;不填則預設發給已互動使用者', + defaultTargetPlaceholder: '使用者 userid(可選)', + admins: '管理員白名單', + adminsHint: '允許執行斜線命令的用戶ID列表,多個ID使用,分隔', + adminsPlaceholder: '用戶ID列表,多個ID使用,分隔', + pollTimeout: '輪詢超時(秒)', + pollTimeoutHint: '長輪詢請求超時時間,建議 20-30 秒', + loginStatus: '登入狀態', + connected: '已連線', + waiting: '等待掃碼', + scanned: '已掃碼,待確認', + confirmed: '已確認,正在建立連線', + expired: '二維碼已過期', + refreshQrcode: '刷新二維碼', + logout: '退出登入', + noQrcode: '暫無二維碼,請先刷新或保存配置後再試', + scanHint: '使用微信掃碼綁定後,狀態會自動刷新。首次使用請先保存並啟用該通知渠道。', + accountId: '帳號ID', + qrcodeUpdatedAt: '二維碼更新時間', + knownTargets: '最近互動用戶', + noKnownTargets: '暫無互動用戶記錄', + statusLoadFailed: '獲取微信 ClawBot 狀態失敗', + qrcodeRefreshSuccess: '微信 ClawBot 二維碼已刷新', + qrcodeRefreshFailed: '刷新微信 ClawBot 二維碼失敗', + logoutSuccess: '微信 ClawBot 已退出登入', + logoutFailed: '微信 ClawBot 退出登入失敗', + }, telegram: { name: 'Telegram', token: 'Bot Token', @@ -1705,7 +1737,8 @@ export default { timeSaveSuccess: '通知發送時間保存成功', timeSaveFailed: '通知發送時間保存失敗!', channel: '通知', - wechat: '微信', + wechat: '企業微信', + wechatClawBot: '微信 ClawBot', resourceDownload: '資源下載', mediaImport: '整理入庫', subscription: '訂閱', @@ -1791,7 +1824,7 @@ export default { mediaSourceHint: '搜索媒體信息時使用的數據源以及排序', filterRuleGroupHint: '搜索媒體信息時按選定的過濾規則組對結果進行過濾', downloadUserPlaceholder: '用戶ID1,用戶ID2', - downloadUserHint: '使用Telegram、微信等搜索時是否自動下載,使用逗號分割,設置為 all 代表所有用戶自動擇優下載', + downloadUserHint: '使用Telegram、企業微信等搜索時是否自動下載,使用逗號分割,設置為 all 代表所有用戶自動擇優下載', downloadLabelPlaceholder: 'MOVIEPILOT', }, directory: { @@ -2023,7 +2056,8 @@ export default { resetDefaultAvatar: '重置默認頭像', restoreCurrentAvatar: '還原當前頭像', notifications: '通知', - wechat: '微信UserID', + wechat: '企業微信 UserID', + wechatClawBot: '微信 ClawBot ID', telegram: 'Telegram UserID', slack: 'Slack UserID', discord: 'Discord UserID', @@ -2742,7 +2776,8 @@ export default { nickname: '暱稱', nicknamePlaceholder: '顯示暱稱,優先於用戶名顯示', accountBinding: '賬號綁定', - wechatUser: '微信用戶', + wechatUser: '企業微信用戶', + wechatClawBotUser: '微信 ClawBot 用戶', telegramUser: 'Telegram用戶', slackUser: 'Slack用戶', discordUser: 'Discord用戶', diff --git a/src/utils/imageUtils.ts b/src/utils/imageUtils.ts index 25e74fdd..1a1ffaeb 100644 --- a/src/utils/imageUtils.ts +++ b/src/utils/imageUtils.ts @@ -13,6 +13,7 @@ import plexLogo from '@/assets/images/logos/plex.png' import trimemediaLogo from '@/assets/images/logos/trimemedia.png' import ugreenLogo from '@/assets/images/logos/ugreen.png' import wechatLogo from '@/assets/images/logos/wechat.png' +import clawbotLogo from '@/assets/images/logos/clawbot.png' import telegramLogo from '@/assets/images/logos/telegram.webp' import slackLogo from '@/assets/images/logos/slack.webp' import discordLogo from '@/assets/images/logos/discord.png' @@ -44,6 +45,7 @@ const logoMap: Record = { trimemedia: trimemediaLogo, ugreen: ugreenLogo, wechat: wechatLogo, + wechatclawbot: clawbotLogo, telegram: telegramLogo, slack: slackLogo, discord: discordLogo, diff --git a/src/views/setting/AccountSettingNotification.vue b/src/views/setting/AccountSettingNotification.vue index 66da39fa..2fb87cf0 100644 --- a/src/views/setting/AccountSettingNotification.vue +++ b/src/views/setting/AccountSettingNotification.vue @@ -299,12 +299,15 @@ onMounted(() => { - - {{ t('setting.notification.wechat') }} - - - {{ t('setting.notification.telegram') }} - + + {{ t('setting.notification.wechat') }} + + + {{ t('setting.notification.wechatClawBot') }} + + + {{ t('setting.notification.telegram') }} + {{ t('setting.notification.slack') }} diff --git a/src/views/setup/NotificationSettingsStep.vue b/src/views/setup/NotificationSettingsStep.vue index 94048dec..4e98f861 100644 --- a/src/views/setup/NotificationSettingsStep.vue +++ b/src/views/setup/NotificationSettingsStep.vue @@ -49,7 +49,20 @@ const notificationTypes = [ > -
微信
+
企业微信
+
+ +
+ + + + +
WeChat ClawBot
@@ -251,6 +264,50 @@ const notificationTypes = [ />
+ + + + + + + + + + + + + + + + +