From 7ae248e5c4dce6d43a7771e7cd702876ba5a8d50 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Sat, 22 Apr 2023 18:07:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AF=AD=E9=9F=B3=E4=BA=91=E8=BD=AC?= =?UTF-8?q?=E7=A0=81=E5=AE=8C=E5=96=84file=E5=92=8Curl=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/chat.js | 25 +++++++++++++------------ utils/config.js | 2 +- utils/uploadRecord.js | 38 +++++++++++++++++++++++++++++--------- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/apps/chat.js b/apps/chat.js index c86d032..963b9c7 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -29,7 +29,7 @@ import { convertFaces } from '../utils/face.js' import uploadRecord from '../utils/uploadRecord.js' import { SlackClaudeClient } from '../utils/slack/slackClient.js' import { ChatgptManagement } from './management.js' -import {getPromptByName} from "../utils/prompts.js"; +import { getPromptByName } from '../utils/prompts.js' try { await import('keyv') } catch (err) { @@ -620,7 +620,7 @@ export class chatgpt extends plugin { logger.info('chatgpt闭嘴中,不予理会') return false } - //获取用户配置 + // 获取用户配置 const userData = await getUserData(e.user_id) const use = (userData.mode === 'default' ? null : userData.mode) || await redis.get('CHATGPT:USE') || 'api' // 自动化插件本月已发送xx条消息更新太快,由于延迟和缓存问题导致不同客户端不一样,at文本和获取的card不一致。因此单独处理一下 @@ -918,19 +918,20 @@ export class chatgpt extends plugin { if (Config.ttsSpace && ttsResponse.length <= Config.ttsAutoFallbackThreshold) { try { let wav = await generateAudio(ttsResponse, speaker, '中日混合(中文用[ZH][ZH]包裹起来,日文用[JA][JA]包裹起来)') - try { - let sendable = await uploadRecord(wav) - if (sendable) { - await e.reply(sendable) - } else { - //如果合成失败,尝试使用ffmpeg合成 - await e.reply(segment.record(wav)) - } - } catch (err) { - logger.error(err) + try { + let sendable = await uploadRecord(wav) + if (sendable) { + await e.reply(sendable) + } else { + // 如果合成失败,尝试使用ffmpeg合成 await e.reply(segment.record(wav)) } + } catch (err) { + logger.error(err) + await e.reply(segment.record(wav)) + } } catch (err) { + logger.error(err) await this.reply('合成语音发生错误~') } } else if (!Config.ttsSpace) { diff --git a/utils/config.js b/utils/config.js index 546005e..43c6384 100644 --- a/utils/config.js +++ b/utils/config.js @@ -102,7 +102,7 @@ const defaultConfig = { slackClaudeEnableGlobalPreset: true, slackClaudeGlobalPreset: '', slackClaudeSpecifiedChannel: '', - cloudTranscode: '', + cloudTranscode: 'https://silk.201666.xyz', cloudMode: 'url', version: 'v2.5.6' } diff --git a/utils/uploadRecord.js b/utils/uploadRecord.js index 09fe3c0..6b3972d 100644 --- a/utils/uploadRecord.js +++ b/utils/uploadRecord.js @@ -1,6 +1,6 @@ // import Contactable, { core } from 'oicq' import querystring from 'querystring' -import fetch from 'node-fetch' +import fetch, { File } from 'node-fetch' import fs from 'fs' import os from 'os' import util from 'util' @@ -41,17 +41,25 @@ async function uploadRecord (recordUrl) { method: 'GET', headers: { 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 12; MI 9 Build/SKQ1.211230.001)' - }, + } }) if (Config.cloudMode === 'file') { - const file = await response.blob() + const blob = await response.blob() + const arrayBuffer = await blob.arrayBuffer() + const buffer = Buffer.from(arrayBuffer) const formData = new FormData() - formData.append('file', file) + formData.append('file', new File([buffer], 'audio.wav')) const resultres = await fetch(`${Config.cloudTranscode}/audio`, { method: 'POST', body: formData }) - result = await resultres.json() + let t = await resultres.text() + try { + result = JSON.parse(t) + } catch (e) { + logger.error(t) + throw e + } } else { const buf = Buffer.from(await response.arrayBuffer()) const resultres = await fetch(`${Config.cloudTranscode}/audio`, { @@ -59,9 +67,15 @@ async function uploadRecord (recordUrl) { headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({recordBuffer: buf}) + body: JSON.stringify({ recordBuffer: buf }) }) - result = await resultres.json() + let t = await resultres.text() + try { + result = JSON.parse(t) + } catch (e) { + logger.error(t) + throw e + } } } else { const resultres = await fetch(`${Config.cloudTranscode}/audio`, { @@ -69,9 +83,15 @@ async function uploadRecord (recordUrl) { headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({recordUrl: recordUrl}) + body: JSON.stringify({ recordUrl }) }) - result = await resultres.json() + let t = await resultres.text() + try { + result = JSON.parse(t) + } catch (e) { + logger.error(t) + throw e + } } if (result.error) { logger.error('云转码API报错:' + result.error)