import hookRequest from '../api/hookRequest' import serverRequest, { TypeFriendAddTask } from '../api/scrm/serverRequest' import commonData from '../store/data' const FRIEND_APPROVED_MESSAGE = '我通过了你的联系人验证请求,现在我们可以开始聊天了' let polling = false function taskBelongsToAccount(task: TypeFriendAddTask, selfwxid: string): boolean { return !task.assistantEntWxId || task.assistantEntWxId === selfwxid } async function pollFriendAddTasks(): Promise { if (polling || commonData.get('wxLoginStatus') !== 1) return const selfwxid = commonData.get('selfwxid') if (!selfwxid) return polling = true try { const tasks = await serverRequest.getFriendAddPending(selfwxid) if (tasks.length > 0) { console.log(`[好友申请] 拉取到${tasks.length}条待处理任务,医助=${selfwxid}`) } for (const task of tasks.filter((item) => taskBelongsToAccount(item, selfwxid))) { try { console.log( `[好友申请] 开始发送,任务=${task.id || ''},医助=${selfwxid},用户=${task.wxUserid},群=${task.wxRoomId || ''}` ) await hookRequest.fetchAddFriend({ chat_room_id: task.wxRoomId || '', user_id: task.wxUserid, msg: task.verifyMessage || '' }) const callbackSuccess = await serverRequest.updateFriendAddStatus({ assistantEntWxId: selfwxid, wxUserid: task.wxUserid, status: 10 }) console.log( `[好友申请] Hook发送成功,任务=${task.id || ''},用户=${task.wxUserid},状态回调=${callbackSuccess ? '成功' : '失败'}` ) } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error) const callbackSuccess = await serverRequest.updateFriendAddStatus({ assistantEntWxId: selfwxid, wxUserid: task.wxUserid, status: 30, errorMessage }) console.error( `[好友申请] Hook发送失败,任务=${task.id || ''},用户=${task.wxUserid},原因=${errorMessage},状态回调=${callbackSuccess ? '成功' : '失败'}` ) } } } finally { polling = false } } async function handleFriendApproved(userId: string, assistantEntWxId: string): Promise { if (!userId || !assistantEntWxId) return console.log(`[好友申请] 收到好友通过消息,医助=${assistantEntWxId},用户=${userId}`) const callbackSuccess = await serverRequest.updateFriendAddStatus({ assistantEntWxId, wxUserid: userId, status: 20 }) console.log( `[好友申请] 好友通过状态回调${callbackSuccess ? '成功' : '失败'},医助=${assistantEntWxId},用户=${userId}` ) } function isFriendApprovedMessage(body): boolean { return ( body?.type === 100 && body?.msg_type === 2 && body?.is_self_msg === 0 && body?.sender === '' && body?.content?.trim() === FRIEND_APPROVED_MESSAGE ) } export default { pollFriendAddTasks, handleFriendApproved, isFriendApprovedMessage }