const axios = require('axios') class Chat { constructor() { } async createChat(token) { try { const response = await axios.post(`https://hix.ai/api/trpc/hixChat.createChat?batch=1`, { "0": { "json": { "title": `${new Date().toLocaleString()} New Chat`, "botId": 85426 } } }, { headers: { 'Content-Type': 'application/json', 'Cookie': `__Secure-next-auth.session-token=${token}`, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36', 'Accept': 'application/json', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', 'Referer': 'https://hix.ai/', 'Origin': 'https://hix.ai', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'cross-site' } } ) return response.data[0].result.data.json.id } catch (error) { console.log("Token可能已失效,创建聊天失败!!!") return null } } async parserMessagesMode(messages) { try { const userMessages = messages.filter(item => item.role === 'user' || item.role === 'assistant') const assistantMessages = messages.filter(item => item.role === 'assistant') const systemMessages = messages.filter(item => item.role === 'system').map(item => item.content).join('\n') if (userMessages.length === 1) { let newMessage = ` ${systemMessages ? `\n${systemMessages}\n` : ''} ${JSON.stringify(userMessages[userMessages.length - 1].content)} ` return { status: 200, message: newMessage, chatId: null, } } else { const signRegex = /\[ChatID: (.*?)\]/ const sign = assistantMessages[assistantMessages.length - 1].content.match(signRegex) if (sign) { const chatId = sign[1].replace('[ChatID: ', '').replace(']', '') return { status: 200, message: userMessages[userMessages.length - 1].content, chatId: chatId, } } else { return this.createForgeChat(messages) } } } catch (error) { return { status: 500, message: null, chatId: null, } } } async createForgeChat(messages) { let newMessage = ` ${JSON.stringify(messages.filter(item => item.role === 'system').map(item => item.content).join('\n')) ? `\n${JSON.stringify(messages.filter(item => item.role === 'system').map(item => item.content).join('\n'))}\n\n` : ''} ${JSON.stringify(messages.filter(item => item.role === 'user' || item.role === 'assistant').map(item => item.content).join('\n'))} ${messages[messages.length - 1].content} ` return { status: 200, message: newMessage, chatId: null, } } async sendMessage(chatId, message, token) { console.log(chatId) try { const response = await axios.post(`https://hix.ai/api/hix/chat`, { "chatId": chatId, "question": message, "fileUrl": "", "answer": "", "relatedQuestions": [] }, { headers: { 'Content-Type': 'application/json', 'Cookie': `__Secure-next-auth.session-token=${token}` }, responseType: 'stream' } ) return { response: response.data, status: 200, } } catch (error) { if (error.response.status === 403) { return { response: null, status: 403 } } return { response: null, status: error.response.status } } } } module.exports = Chat