diff --git a/packages/xhs/package.json b/packages/xhs/package.json index 28ea457..1161556 100644 --- a/packages/xhs/package.json +++ b/packages/xhs/package.json @@ -33,6 +33,10 @@ }, "./index": { "import": "./src/index.ts" + }, + "./index.ts": { + "import": "./src/index.ts", + "types": "./src/index.ts" } }, "dependencies": { diff --git a/packages/xhs/src/app.ts b/packages/xhs/src/app.ts index ed0788e..2964cef 100644 --- a/packages/xhs/src/app.ts +++ b/packages/xhs/src/app.ts @@ -1,6 +1,6 @@ import { QueryRouterServer } from '@kevisual/router/browser'; import { XhsServices, XhsClient } from '@kevisual/xhs/services/xhs-services.ts'; - +export { XhsServices }; export const app = new QueryRouterServer(); export const xhsServices = new XhsServices(); // Semicolon separated Cookie File diff --git a/packages/xhs/src/index.ts b/packages/xhs/src/index.ts index 4e0074d..d390a64 100644 --- a/packages/xhs/src/index.ts +++ b/packages/xhs/src/index.ts @@ -1,5 +1,5 @@ import { XhsClient } from './libs/xhs.ts'; -import { app, xhsServices, xhsRootClient } from './app.ts'; +import { app, xhsServices, xhsRootClient, XhsServices } from './app.ts'; import './routes/index.ts'; -export { XhsClient, app, xhsServices, xhsRootClient }; +export { XhsClient, app, xhsServices, xhsRootClient, XhsServices }; diff --git a/packages/xhs/src/routes/mentions/mention.ts b/packages/xhs/src/routes/mentions/mention.ts index 754838b..56261c9 100644 --- a/packages/xhs/src/routes/mentions/mention.ts +++ b/packages/xhs/src/routes/mentions/mention.ts @@ -125,22 +125,26 @@ app const handleMention: any[] = []; for (const mention of mentionList) { const mention_id = mention.id; - const note_id = mention.item_info.id; + const note_id = mention.item_info.id; // item_info 是笔记信息 + const note_userid = mention.item_info.user_info?.userid || ''; + const note_username = mention.item_info.user_info?.nickname || ''; const xsec_token = mention.item_info.xsec_token; let comment: any = Parse.getComment(mention); // console.log('note_id', note_id, 'xsec_token', xsec_token, comment); handleMention.push({ mention_id, note_id, + note_userid, + note_username, xsec_token, comment, mention, }); } - console.log('获取提及列表成功', res.code, res.data?.message_list?.length); + console.log('获取提及列表成功', '[小红书code]', res.code, '提及数量', res.data?.message_list?.length); ctx.body = handleMention; } else { - console.log('获取提及列表失败', res.code); + console.log('获取提及列表失败', '[小红书code]', res.code); ctx.throw(res.code, '获取提及列表失败'); } }) diff --git a/packages/xhs/src/services/xhs-services.ts b/packages/xhs/src/services/xhs-services.ts index 0396528..c7e0afb 100644 --- a/packages/xhs/src/services/xhs-services.ts +++ b/packages/xhs/src/services/xhs-services.ts @@ -7,6 +7,8 @@ export { XhsClient }; type XhsClientOptions = { key: string; cookie: string; + userid?: string; + username?: string; signConfig?: { signUrl: string; }; @@ -88,4 +90,37 @@ export class XhsServices { const xhsClient = this.map.get(this.getKey(key)); return xhsClient; } + getXhsUserInfo(key?: string) { + const xhsClient = this.map.get(this.getKey(key)); + return { + userid: xhsClient?.options?.userid || '', + username: xhsClient?.options?.username || '', + }; + } + isOwner(user: { username: string; userid: string }, key?: string) { + const xhsUserInfo = this.getXhsUserInfo(key); + if (!xhsUserInfo.userid || !xhsUserInfo.username) { + return false; + } + return user.userid === xhsUserInfo.userid; + } + setCookie(cookie: string, key?: string) { + const xhsClient = this.map.get(this.getKey(key)); + if (xhsClient) { + xhsClient.options.cookie = cookie; + xhsClient.client.setCookie(cookie); + } + } + /** + * 设置用户信息 + * @param user + * @param key + */ + setUserInfo(user: { userid: string; username: string }, key?: string) { + const xhsClient = this.map.get(this.getKey(key)); + if (xhsClient) { + xhsClient.options.userid = user.userid; + xhsClient.options.username = user.username; + } + } } diff --git a/src/task/routes/mention.ts b/src/task/routes/mention.ts index 26d3281..f9fa7c6 100644 --- a/src/task/routes/mention.ts +++ b/src/task/routes/mention.ts @@ -1,5 +1,5 @@ import { agent } from '@/agent/index.ts'; -import { taskApp, queue, xhsApp } from '../task.ts'; +import { taskApp, queue, xhsApp, xhsServices } from '../task.ts'; import { random, omit } from 'lodash-es'; import util from 'node:util'; @@ -111,14 +111,29 @@ taskApp .define(async (ctx) => { const data = ctx.query.data; // 为提及的相关信息 const note_id = data.note_id; + const note_userid = data.note_userid; + const note_username = data.note_username; + + // 检测是这个用户的username的笔记,如果是的话,需要有at的用户信息才继续。 + const isOwner = xhsServices.isOwner({ username: note_username, userid: note_userid }); const xsec_token = data.xsec_token; const comment_id = data.comment.comment_id; - const content = data.comment?.content || 'test'; + let content: string = data.comment?.content || 'test'; const postData = { note_id, content, comment_id, }; + if (isOwner) { + // 如果是自己的笔记,且笔记不包含 @信息 则不需要AI回复, + const hasAt = content.includes('@' + note_username) || content.includes('@' + note_userid); + if (!hasAt) { + // console.log('不需要AI回复自己的笔记', note_username, note_id, content); + return; + } + } + content = content.replace('@' + note_username, ''); + const resAgent = await agent.call({ path: 'xhs', payload: { diff --git a/src/task/task.ts b/src/task/task.ts index 686e923..9977327 100644 --- a/src/task/task.ts +++ b/src/task/task.ts @@ -3,16 +3,23 @@ import { QueryRouterServer } from '@kevisual/router'; import { redis } from '@/modules/redis.ts'; import { Queue } from 'bullmq'; -import { app as xhsApp, xhsServices, xhsRootClient, XhsClient } from '@kevisual/xhs/index'; +import { app as xhsApp, xhsServices as xhs, xhsRootClient, XhsServices } from '@kevisual/xhs/index.ts'; import { nanoid } from 'nanoid'; export const XHS_GET_UNREAD = 'unread_count'; export const XHS_QUEUE_NAME = 'XHS_QUEUE'; import { config } from '../modules/config.ts'; -const xhsClient: XhsClient = xhsRootClient; -xhsClient.setCookie(config.XHS_ROOT_COOKIE || ''); -console.log('XHS_ROOT_COOKIE', xhsClient.cookie); + +const server: XhsServices = xhs; +server.setCookie(config.XHS_ROOT_COOKIE || ''); +server.setUserInfo({ + userid: config.XHS_USER_ID || '', + username: config.XHS_USER_NAME || '', +}); +console.log('XHS_USER_INFO', config.XHS_USER_ID, config.XHS_USER_NAME, 'XHS_ROOT_COOKIE', config.XHS_ROOT_COOKIE); export const taskApp = new QueryRouterServer(); -export { xhsApp, xhsServices, xhsRootClient }; +export { xhsApp }; +export const xhsServices = server; + export const queue = new Queue(XHS_QUEUE_NAME, { connection: redis, });