From ab0e80e0e6e353dde1a907b9d0e9323854bb3389 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Fri, 10 Mar 2023 21:31:49 +0800 Subject: [PATCH 1/4] Update README.md --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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) ## 感谢 From 89d3bb52dd7e2bbb09d95adc096f8200bf1084b1 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Sat, 11 Mar 2023 00:56:55 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=E9=80=82=E9=85=8D=E5=AE=98=E7=BD=91?= =?UTF-8?q?conversation=20API=E5=8F=98=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/conversation.js | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) 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', From 08fe3314d1683df8e000591365037fbf45768317 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Sat, 11 Mar 2023 11:16:40 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20API3=E7=9A=84=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/config.js | 2 +- utils/message.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/utils/config.js b/utils/config.js index 80c549a..1c682eb 100644 --- a/utils/config.js +++ b/utils/config.js @@ -55,7 +55,7 @@ const defaultConfig = { noiseScaleW: 0.668, lengthScale: 1.2, initiativeChatGroups: [], - version: 'v2.1.3' + version: 'v2.1.4' } const _path = process.cwd() let config = {} 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) From a277228a72fee09bfc3d3f44e9a3f37facf8020d Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Sat, 11 Mar 2023 11:30:33 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E7=94=BB=E5=9B=BE=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/draw.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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}`) } }