mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 13:27:08 +00:00
fix: 调整sydney token过期方式;画图调整增加成功概率
This commit is contained in:
parent
cc78143c0e
commit
3c437ddfc5
4 changed files with 85 additions and 59 deletions
31
apps/chat.js
31
apps/chat.js
|
|
@ -1683,21 +1683,22 @@ export class chatgpt extends plugin {
|
|||
// 不减次数
|
||||
} else if (message && typeof message === 'string' && message.indexOf('UnauthorizedRequest') > -1) {
|
||||
// token过期了
|
||||
let bingTokens = JSON.parse(await redis.get('CHATGPT:BING_TOKENS'))
|
||||
const badBingToken = bingTokens.findIndex(element => element.Token === bingToken)
|
||||
// 可能是微软抽风,给三次机会
|
||||
if (bingTokens[badBingToken].exception) {
|
||||
if (bingTokens[badBingToken].exception <= 3) {
|
||||
bingTokens[badBingToken].exception += 1
|
||||
} else {
|
||||
bingTokens[badBingToken].exception = 0
|
||||
bingTokens[badBingToken].State = '过期'
|
||||
}
|
||||
} else {
|
||||
bingTokens[badBingToken].exception = 1
|
||||
}
|
||||
await redis.set('CHATGPT:BING_TOKENS', JSON.stringify(bingTokens))
|
||||
logger.warn(`token${bingToken}已过期`)
|
||||
// let bingTokens = JSON.parse(await redis.get('CHATGPT:BING_TOKENS'))
|
||||
// const badBingToken = bingTokens.findIndex(element => element.Token === bingToken)
|
||||
// // 可能是微软抽风,给三次机会
|
||||
// if (bingTokens[badBingToken].exception) {
|
||||
// if (bingTokens[badBingToken].exception <= 3) {
|
||||
// bingTokens[badBingToken].exception += 1
|
||||
// } else {
|
||||
// bingTokens[badBingToken].exception = 0
|
||||
// bingTokens[badBingToken].State = '过期'
|
||||
// }
|
||||
// } else {
|
||||
// bingTokens[badBingToken].exception = 1
|
||||
// }
|
||||
// await redis.set('CHATGPT:BING_TOKENS', JSON.stringify(bingTokens))
|
||||
logger.warn(`token${bingToken}疑似不存在或已过期,再试试`)
|
||||
retry = retry - 0.1
|
||||
} else {
|
||||
retry--
|
||||
errorMessage = message === 'Timed out waiting for response. Try enabling debug mode to see more information.' ? (reply ? `${reply}\n不行了,我的大脑过载了,处理不过来了!` : '必应的小脑瓜不好使了,不知道怎么回答!') : message
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import fetch from 'node-fetch'
|
||||
import fetch, { FormData } from 'node-fetch'
|
||||
import { makeForwardMsg } from './common.js'
|
||||
import { Config } from './config.js'
|
||||
|
||||
|
|
@ -22,8 +22,8 @@ export default class BingDrawClient {
|
|||
async getImages (prompt, e) {
|
||||
let urlEncodedPrompt = encodeURIComponent(prompt)
|
||||
let url = `${this.opts.baseUrl}/images/create?q=${urlEncodedPrompt}&rt=4&FORM=GENCRE`
|
||||
let d = Math.ceil(Math.random() * 255)
|
||||
let randomIp = '141.11.138.' + d
|
||||
// let d = Math.ceil(Math.random() * 255)
|
||||
// let randomIp = '141.11.138.' + d
|
||||
let headers = {
|
||||
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
||||
'accept-language': 'en-US,en;q=0.9',
|
||||
|
|
@ -31,27 +31,44 @@ export default class BingDrawClient {
|
|||
'content-type': 'application/x-www-form-urlencoded',
|
||||
referrer: 'https://www.bing.com/images/create/',
|
||||
origin: 'https://www.bing.com',
|
||||
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.63',
|
||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50',
|
||||
cookie: this.opts.cookies || `_U=${this.opts.userToken}`,
|
||||
'x-forwarded-for': randomIp
|
||||
// 'x-forwarded-for': randomIp,
|
||||
Dnt: '1',
|
||||
'sec-ch-ua': '"Microsoft Edge";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
|
||||
'sec-ch-ua-arch': '"x86"',
|
||||
'sec-ch-ua-bitness': '"64"',
|
||||
'sec-ch-ua-full-version': '"113.0.5672.126"',
|
||||
'sec-ch-ua-full-version-list': '"Google Chrome";v="113.0.5672.126", "Chromium";v="113.0.5672.126", "Not-A.Brand";v="24.0.0.0"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-model': '',
|
||||
'sec-ch-ua-platform': '"macOS"',
|
||||
'sec-ch-ua-platform-version': '"13.1.0"',
|
||||
'sec-fetch-dest': 'document',
|
||||
'sec-fetch-mode': 'navigate',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'sec-fetch-user': '?1',
|
||||
'Referrer-Policy': 'origin-when-cross-origin',
|
||||
'x-edge-shopping-flag': '1'
|
||||
}
|
||||
// headers['x-forwarded-for'] = '141.11.138.30'
|
||||
let body = new FormData()
|
||||
body.append('q', prompt)
|
||||
body.append('qs', 'ds')
|
||||
let fetchOptions = {
|
||||
method: 'POST',
|
||||
headers,
|
||||
redirect: 'manual'
|
||||
headers
|
||||
}
|
||||
if (Config.proxy) {
|
||||
fetchOptions.agent = proxy(Config.proxy)
|
||||
}
|
||||
let response = await fetch(url, fetchOptions)
|
||||
let response = await fetch(url, Object.assign(fetchOptions, { body, redirect: 'manual', method: 'POST' }))
|
||||
let res = await response.text()
|
||||
if (res.toLowerCase().indexOf('this prompt has been blocked') > -1) {
|
||||
throw new Error('Your prompt has been blocked by Bing. Try to change any bad words and try again.')
|
||||
}
|
||||
if (response.status !== 302) {
|
||||
url = `${this.opts.baseUrl}/images/create?q=${urlEncodedPrompt}&rt=3&FORM=GENCRE`
|
||||
let response3 = await fetch(url, fetchOptions)
|
||||
let response3 = await fetch(url, Object.assign(fetchOptions, { body, redirect: 'manual', method: 'POST' }))
|
||||
if (response3.status !== 302) {
|
||||
throw new Error('绘图失败,请检查Bing token和代理/反代配置')
|
||||
}
|
||||
|
|
@ -72,9 +89,7 @@ export default class BingDrawClient {
|
|||
if (found) {
|
||||
return
|
||||
}
|
||||
let r = await fetch(pollingUrl, {
|
||||
headers
|
||||
})
|
||||
let r = await fetch(pollingUrl, fetchOptions)
|
||||
let rText = await r.text()
|
||||
if (rText) {
|
||||
// logger.info(rText)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import fetch, {
|
|||
Response
|
||||
} from 'node-fetch'
|
||||
import crypto from 'crypto'
|
||||
|
||||
import WebSocket from 'ws'
|
||||
import HttpsProxyAgent from 'https-proxy-agent'
|
||||
import { Config, pureSydneyInstruction } from './config.js'
|
||||
import { formatDate, getMasterQQ, isCN, getUserData } from './common.js'
|
||||
|
|
@ -29,15 +29,16 @@ if (Config.proxy) {
|
|||
console.warn('未安装https-proxy-agent,请在插件目录下执行pnpm add https-proxy-agent')
|
||||
}
|
||||
}
|
||||
async function getWebSocket () {
|
||||
let WebSocket
|
||||
try {
|
||||
WebSocket = (await import('ws')).default
|
||||
} catch (error) {
|
||||
throw new Error('ws依赖未安装,请使用pnpm install ws安装')
|
||||
}
|
||||
return WebSocket
|
||||
}
|
||||
|
||||
// async function getWebSocket () {
|
||||
// let WebSocket
|
||||
// try {
|
||||
// WebSocket = (await import('ws')).default
|
||||
// } catch (error) {
|
||||
// throw new Error('ws依赖未安装,请使用pnpm install ws安装')
|
||||
// }
|
||||
// return WebSocket
|
||||
// }
|
||||
async function getKeyv () {
|
||||
let Keyv
|
||||
try {
|
||||
|
|
@ -80,29 +81,33 @@ export default class SydneyAIClient {
|
|||
const fetchOptions = {
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'accept-language': 'en-US,en;q=0.9',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
|
||||
'content-type': 'application/json',
|
||||
'sec-ch-ua': '"Chromium";v="112", "Microsoft Edge";v="112", "Not:A-Brand";v="99"',
|
||||
'sec-ch-ua-arch': '"x86"',
|
||||
'sec-ch-ua-bitness': '"64"',
|
||||
'sec-ch-ua-full-version': '"112.0.1722.7"',
|
||||
'sec-ch-ua-full-version-list': '"Chromium";v="112.0.5615.20", "Microsoft Edge";v="112.0.1722.7", "Not:A-Brand";v="99.0.0.0"',
|
||||
'sec-ch-ua': '"Microsoft Edge";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
|
||||
// 'sec-ch-ua-arch': '"x86"',
|
||||
// 'sec-ch-ua-bitness': '"64"',
|
||||
// 'sec-ch-ua-full-version': '"112.0.1722.7"',
|
||||
// 'sec-ch-ua-full-version-list': '"Chromium";v="112.0.5615.20", "Microsoft Edge";v="112.0.1722.7", "Not:A-Brand";v="99.0.0.0"',
|
||||
'sec-ch-ua-mobile': '?0',
|
||||
'sec-ch-ua-model': '',
|
||||
'sec-ch-ua-platform': '"Windows"',
|
||||
'sec-ch-ua-platform-version': '"15.0.0"',
|
||||
// 'sec-ch-ua-model': '',
|
||||
'sec-ch-ua-platform': '"macOS"',
|
||||
// 'sec-ch-ua-platform-version': '"15.0.0"',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'x-ms-client-request-id': crypto.randomUUID(),
|
||||
'x-ms-useragent': 'azsdk-js-api-client-factory/1.0.0-beta.1 core-rest-pipeline/1.10.0 OS/Win32',
|
||||
cookie: this.opts.cookies || `_U=${this.opts.userToken}`,
|
||||
Referer: 'https://www.bing.com/search?q=Bing+AI&showconv=1&FORM=hpcodx',
|
||||
'x-ms-useragent': 'azsdk-js-api-client-factory/1.0.0-beta.1 core-rest-pipeline/1.10.3 OS/macOS',
|
||||
// cookie: this.opts.cookies || `_U=${this.opts.userToken}`,
|
||||
Referer: 'https://edgeservices.bing.com/edgesvc/chat?udsframed=1&form=SHORUN&clientscopes=chat,noheader,channelstable,',
|
||||
'Referrer-Policy': 'origin-when-cross-origin',
|
||||
// Workaround for request being blocked due to geolocation
|
||||
'x-forwarded-for': '1.1.1.1'
|
||||
}
|
||||
}
|
||||
if (this.opts.cookies || this.opts.userToken) {
|
||||
// 疑似无需token了
|
||||
fetchOptions.headers.cookie = this.opts.cookies || `_U=${this.opts.userToken}`
|
||||
}
|
||||
if (this.opts.proxy) {
|
||||
fetchOptions.agent = proxy(Config.proxy)
|
||||
}
|
||||
|
|
@ -115,7 +120,7 @@ export default class SydneyAIClient {
|
|||
logger.mark('使用host:' + this.opts.host)
|
||||
let response = await fetch(`${this.opts.host}/turing/conversation/create`, fetchOptions)
|
||||
let text = await response.text()
|
||||
let retry = 30
|
||||
let retry = 10
|
||||
while (retry >= 0 && response.status === 200 && !text) {
|
||||
await delay(400)
|
||||
response = await fetch(`${this.opts.host}/turing/conversation/create`, fetchOptions)
|
||||
|
|
@ -138,7 +143,7 @@ export default class SydneyAIClient {
|
|||
|
||||
async createWebSocketConnection () {
|
||||
await this.initCache()
|
||||
let WebSocket = await getWebSocket()
|
||||
// let WebSocket = await getWebSocket()
|
||||
return new Promise((resolve, reject) => {
|
||||
let agent
|
||||
let sydneyHost = 'wss://sydney.bing.com'
|
||||
|
|
@ -149,7 +154,7 @@ export default class SydneyAIClient {
|
|||
sydneyHost = Config.sydneyReverseProxy.replace('https://', 'wss://').replace('http://', 'ws://')
|
||||
}
|
||||
logger.mark(`use sydney websocket host: ${sydneyHost}`)
|
||||
let ws = new WebSocket(sydneyHost + '/sydney/ChatHub', { agent })
|
||||
let ws = new WebSocket(sydneyHost + '/sydney/ChatHub', undefined, { agent, origin: 'https://edgeservices.bing.com' })
|
||||
ws.on('error', (err) => {
|
||||
console.error(err)
|
||||
reject(err)
|
||||
|
|
@ -354,13 +359,18 @@ export default class SydneyAIClient {
|
|||
'responsible_ai_policy_235',
|
||||
'enablemm',
|
||||
toneOption,
|
||||
'dtappid',
|
||||
'cricinfo',
|
||||
'cricinfov2',
|
||||
'dv3sugg'
|
||||
'dagslnv1',
|
||||
'sportsansgnd',
|
||||
'dl_edge_desc',
|
||||
'noknowimg',
|
||||
// 'dtappid',
|
||||
// 'cricinfo',
|
||||
// 'cricinfov2',
|
||||
'dv3sugg',
|
||||
'gencontentv3'
|
||||
]
|
||||
if (Config.enableGenerateContents) {
|
||||
optionsSets.push(...['clgalileo', 'gencontentv3', 'rai267'])
|
||||
optionsSets.push(...['gencontentv3'])
|
||||
}
|
||||
const obj = {
|
||||
arguments: [
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ const defaultConfig = {
|
|||
enhanceAzureTTSEmotion: false,
|
||||
autoJapanese: false,
|
||||
enableGenerateContents: false,
|
||||
version: 'v2.6.1'
|
||||
version: 'v2.6.2'
|
||||
}
|
||||
const _path = process.cwd()
|
||||
let config = {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue