diff --git a/README.md b/README.md index 71b92e8..56de873 100644 --- a/README.md +++ b/README.md @@ -227,7 +227,7 @@ pnpm i 可能是由于Yunzai-bot异常退出等原因造成Redis 队列中有残留的等待问题。使用`#清空队列`命令清除队列后再试。 -4. Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'xxx'. +3. Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'xxx'. 请参照本文档前面的安装依赖部分重新依赖。随着项目更新可能引入新的依赖。 @@ -242,7 +242,10 @@ pnpm i > 原因:没装依赖 > > 解决方式:请参考文档在本插件目录下用`pnmp install`安装依赖,安装完就不报错了 - + +4. 反代能自己搭吗? + + 能。参考[这里](https://ikechan8370.com/archives/da-jian-chatgpt-guan-fang-fan-xiang-dai-li) ## 感谢 diff --git a/apps/draw.js b/apps/draw.js index f9cc4aa..1bcdaca 100644 --- a/apps/draw.js +++ b/apps/draw.js @@ -116,8 +116,8 @@ export class dalle extends plugin { this.reply(images[0], true) } } catch (err) { - console.log(err.response?.data?.error?.message) - this.reply(`绘图失败: ${err.response?.data?.error?.message}`, true) + console.log(err.response?.data?.error?.message || err.message || JSON.stringify(err.response || {})) + this.reply(`绘图失败: ${err.response?.data?.error?.message || err.message || JSON.stringify(err.response || {})}`, true) await redis.del(`CHATGPT:VARIATION:${e.sender.user_id}`) } } @@ -136,8 +136,8 @@ export class dalle extends plugin { this.reply(images[0], true) } } catch (err) { - console.log(err.response?.data?.error?.message) - this.reply(`搞失败了: ${err.response?.data?.error?.message}`, true) + console.log(err.response?.data?.error?.message || err.message || JSON.stringify(err.response || {})) + this.reply(`搞失败了: ${err.response?.data?.error?.message || err.message || JSON.stringify(err.response || {})}`, true) await redis.del(`CHATGPT:VARIATION:${e.sender.user_id}`) } } @@ -201,8 +201,8 @@ export class dalle extends plugin { this.reply(images[0], true) } } catch (err) { - logger.error(err.response?.data?.error?.message) - this.reply(`图片编辑失败: ${err.response?.data?.error?.message}`, true) + logger.error(err.response?.data?.error?.message || err.message || JSON.stringify(err.response || {})) + this.reply(`图片编辑失败: ${err.response?.data?.error?.message || err.message || JSON.stringify(err.response || {})}`, true) await redis.del(`CHATGPT:EDIT:${e.sender.user_id}`) } } diff --git a/utils/conversation.js b/utils/conversation.js index 6bd16c4..9a4850d 100644 --- a/utils/conversation.js +++ b/utils/conversation.js @@ -19,7 +19,7 @@ export async function getConversations (qq = '', fetchFn = fetch) { } let conversations try { - conversations = JSON.parse(json) + conversations = JSON.parse(json).body } catch (e) { throw new Error(json) } @@ -33,7 +33,7 @@ export async function getConversations (qq = '', fetchFn = fetch) { map[item.id] = cachedConversationLastMessage } else { // 缓存中没有,就去查官方api - let conversationDetailResponse = await fetchFn(`${Config.apiBaseUrl}/api/conversation/${item.id}`, { + let conversationDetailResponse = await fetchFn(`${Config.apiBaseUrl}/conversation/${item.id}`, { method: 'GET', headers: { 'Content-Type': 'application/json', @@ -44,16 +44,21 @@ export async function getConversations (qq = '', fetchFn = fetch) { if (Config.debug) { logger.mark('conversation detail for conversation ' + item.id, conversationDetail) } - conversationDetail = JSON.parse(conversationDetail) + try { + conversationDetail = JSON.parse(conversationDetail).body + } catch (err) { + logger.warn('跳过') + continue + } let messages = Object.values(conversationDetail.mapping || {}) messages = messages .filter(message => message.message) .map(messages => messages.message) - let messagesAssistant = messages.filter(messages => messages.role === 'assistant') + let messagesAssistant = messages.filter(messages => messages.author.role === 'assistant') .sort((a, b) => b.create_time - a.create_time) - let messagesUser = messages.filter(messages => messages.role === 'user') + let messagesUser = messages.filter(messages => messages.author.role === 'user') .sort((a, b) => b.create_time - a.create_time) await redis.set(`CHATGPT:CONVERSATION_LENGTH:${item.id}`, messagesUser?.length || 0) let lastMessage = null @@ -101,7 +106,7 @@ export async function getLatestMessageIdByConversationId (conversationId, fetchF if (!accessToken) { throw new Error('未绑定ChatGPT AccessToken,请使用#chatgpt设置token命令绑定token') } - let conversationDetailResponse = await fetchFn(`${Config.apiBaseUrl}/api/conversation/${conversationId}`, { + let conversationDetailResponse = await fetchFn(`${Config.apiBaseUrl}/conversation/${conversationId}`, { method: 'GET', headers: { 'Content-Type': 'application/json', @@ -112,12 +117,12 @@ export async function getLatestMessageIdByConversationId (conversationId, fetchF if (Config.debug) { logger.mark('conversation detail for conversation ' + conversationId, conversationDetail) } - conversationDetail = JSON.parse(conversationDetail) + conversationDetail = JSON.parse(conversationDetail).body let messages = Object.values(conversationDetail.mapping) messages = messages .filter(message => message.message) .map(messages => messages.message) - .filter(messages => messages.role === 'assistant') + .filter(messages => messages.author.role === 'assistant') .sort((a, b) => b.create_time - a.create_time) await redis.set(`CHATGPT:CONVERSATION_LAST_MESSAGE_ID:${conversationId}`, messages[0].id) return messages[0].id @@ -129,7 +134,7 @@ export async function deleteConversation (conversationId, fetchFn = fetch) { if (!accessToken) { throw new Error('未绑定ChatGPT AccessToken,请使用#chatgpt设置token命令绑定token') } - let response = await fetchFn(`${Config.apiBaseUrl}/api/conversation/${conversationId}`, { + let response = await fetchFn(`${Config.apiBaseUrl}/conversation/${conversationId}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json', diff --git a/utils/message.js b/utils/message.js index 585df0f..98962ac 100644 --- a/utils/message.js +++ b/utils/message.js @@ -86,6 +86,10 @@ export class OfficialChatGPTClient { referrer: 'https://chat.openai.com/chat' } const res = await this._fetch(url, option) + if (res.status !== 200) { + let body = await res.json() + throw new Error(JSON.stringify(body, null, 2)) + } const decoder = new TextDecoder('utf-8') const bodyBytes = await res.arrayBuffer() const bodyText = decoder.decode(bodyBytes)