mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-16 21:37:11 +00:00
feat: add support for Claude and Poe(WIP)
This commit is contained in:
parent
a3a16bc5ff
commit
7ef6051da8
38 changed files with 882 additions and 19 deletions
33
apps/chat.js
33
apps/chat.js
|
|
@ -6,6 +6,7 @@ import delay from 'delay'
|
|||
import { ChatGPTAPI } from 'chatgpt'
|
||||
import { BingAIClient } from '@waylaidwanderer/chatgpt-api'
|
||||
import SydneyAIClient from '../utils/SydneyAIClient.js'
|
||||
import { PoeClient } from '../utils/poe/index.js'
|
||||
import {
|
||||
render, renderUrl,
|
||||
getMessageById,
|
||||
|
|
@ -25,6 +26,7 @@ import { convertSpeaker, generateAudio, speakers } from '../utils/tts.js'
|
|||
import ChatGLMClient from '../utils/chatglm.js'
|
||||
import { convertFaces } from '../utils/face.js'
|
||||
import uploadRecord from '../utils/uploadRecord.js'
|
||||
import {SlackClaudeClient} from "../utils/slack/slackClient.js";
|
||||
try {
|
||||
await import('keyv')
|
||||
} catch (err) {
|
||||
|
|
@ -708,7 +710,7 @@ export class chatgpt extends plugin {
|
|||
num: 0
|
||||
}
|
||||
}
|
||||
} else {
|
||||
} else if (use !== 'poe' && use === 'claude') {
|
||||
switch (use) {
|
||||
case 'api': {
|
||||
key = `CHATGPT:CONVERSATIONS:${e.sender.user_id}`
|
||||
|
|
@ -758,7 +760,7 @@ export class chatgpt extends plugin {
|
|||
// 字数超限直接返回
|
||||
return false
|
||||
}
|
||||
if (use !== 'api3') {
|
||||
if (use !== 'api3' && use !== 'poe' && use !== 'claude') {
|
||||
previousConversation.conversation = {
|
||||
conversationId: chatMessage.conversationId
|
||||
}
|
||||
|
|
@ -1331,6 +1333,33 @@ export class chatgpt extends plugin {
|
|||
let sendMessageResult = await this.chatGPTApi.sendMessage(prompt, conversation)
|
||||
return sendMessageResult
|
||||
}
|
||||
case 'poe': {
|
||||
const cookie = await redis.get('CHATGPT:POE_TOKEN')
|
||||
if (!cookie) {
|
||||
throw new Error('未绑定Poe Cookie,请使用#chatgpt设置Poe token命令绑定cookie')
|
||||
}
|
||||
let client = new PoeClient({
|
||||
quora_cookie: cookie
|
||||
})
|
||||
await client.setCredentials()
|
||||
await client.getChatId()
|
||||
let ai = 'a2' // todo
|
||||
await client.sendMsg(ai, prompt)
|
||||
const response = await client.getResponse(ai)
|
||||
return {
|
||||
text: response.data
|
||||
}
|
||||
}
|
||||
case 'claude': {
|
||||
let client = new SlackClaudeClient({
|
||||
slackUserToken: Config.slackUserToken,
|
||||
slackChannelId: Config.slackChannelId
|
||||
})
|
||||
let text = await client.sendMessage(prompt)
|
||||
return {
|
||||
text
|
||||
}
|
||||
}
|
||||
default: {
|
||||
let completionParams = {}
|
||||
if (Config.model) {
|
||||
|
|
|
|||
|
|
@ -138,8 +138,8 @@ let helpData = [
|
|||
},
|
||||
{
|
||||
icon: 'switch',
|
||||
title: '#chatgpt切换浏览器/API/API3/Bing/ChatGLM',
|
||||
desc: '切换使用的后端为浏览器或OpenAI API/反代官网API/Bing/自建ChatGLM'
|
||||
title: '#chatgpt切换浏览器/API/API3/Bing/ChatGLM/Claude/Poe',
|
||||
desc: '切换使用的后端为浏览器或OpenAI API/反代官网API/Bing/自建ChatGLM/Slack Claude/Poe'
|
||||
},
|
||||
{
|
||||
icon: 'confirm',
|
||||
|
|
|
|||
|
|
@ -32,6 +32,11 @@ export class ChatgptManagement extends plugin {
|
|||
fnc: 'setAccessToken',
|
||||
permission: 'master'
|
||||
},
|
||||
{
|
||||
reg: '#chatgpt(设置|绑定)(Poe|POE)(token|Token)',
|
||||
fnc: 'setPoeCookie',
|
||||
permission: 'master'
|
||||
},
|
||||
{
|
||||
reg: '#chatgpt(设置|绑定|添加)(必应|Bing |bing )(token|Token)',
|
||||
fnc: 'setBingAccessToken',
|
||||
|
|
@ -77,6 +82,16 @@ export class ChatgptManagement extends plugin {
|
|||
fnc: 'useBingSolution',
|
||||
permission: 'master'
|
||||
},
|
||||
{
|
||||
reg: '^#chatgpt切换(Poe|poe)$',
|
||||
fnc: 'useClaudeBasedSolution',
|
||||
permission: 'master'
|
||||
},
|
||||
{
|
||||
reg: '^#chatgpt切换(Claude|claude|slack)$',
|
||||
fnc: 'useSlackClaudeBasedSolution',
|
||||
permission: 'master'
|
||||
},
|
||||
{
|
||||
reg: '^#chatgpt(必应|Bing)切换',
|
||||
fnc: 'changeBingTone',
|
||||
|
|
@ -404,6 +419,25 @@ export class ChatgptManagement extends plugin {
|
|||
return false
|
||||
}
|
||||
|
||||
async setPoeCookie () {
|
||||
this.setContext('savePoeToken')
|
||||
await this.reply('请发送Poe Cookie', true)
|
||||
return false
|
||||
}
|
||||
|
||||
async savePoeToken (e) {
|
||||
if (!this.e.msg) return
|
||||
let token = this.e.msg
|
||||
if (!token.startsWith('p-b=')) {
|
||||
await this.reply('Poe cookie格式错误', true)
|
||||
this.finish('savePoeToken')
|
||||
return
|
||||
}
|
||||
await redis.set('CHATGPT:POE_TOKEN', token)
|
||||
await this.reply('Poe cookie设置成功', true)
|
||||
this.finish('savePoeToken')
|
||||
}
|
||||
|
||||
async setBingAccessToken (e) {
|
||||
this.setContext('saveBingToken')
|
||||
await this.reply('请发送Bing Cookie Token.("_U" cookie from bing.com)', true)
|
||||
|
|
@ -587,22 +621,32 @@ export class ChatgptManagement extends plugin {
|
|||
let use = await redis.get('CHATGPT:USE')
|
||||
if (use !== 'bing') {
|
||||
await redis.set('CHATGPT:USE', 'bing')
|
||||
// 结束所有人的对话
|
||||
const keys = await redis.keys('CHATGPT:CONVERSATIONS:*')
|
||||
if (keys.length) {
|
||||
const response = await redis.del(keys)
|
||||
if (Config.debug) {
|
||||
console.log('Deleted keys:', response)
|
||||
}
|
||||
} else {
|
||||
console.log('No keys matched the pattern')
|
||||
}
|
||||
await this.reply('已切换到基于微软新必应的解决方案,如果已经对话过务必执行`#结束对话`避免引起404错误')
|
||||
} else {
|
||||
await this.reply('当前已经是必应Bing模式了')
|
||||
}
|
||||
}
|
||||
|
||||
async useClaudeBasedSolution (e) {
|
||||
let use = await redis.get('CHATGPT:USE')
|
||||
if (use !== 'poe') {
|
||||
await redis.set('CHATGPT:USE', 'poe')
|
||||
await this.reply('已切换到基于Quora\'s POE的解决方案')
|
||||
} else {
|
||||
await this.reply('当前已经是POE模式了')
|
||||
}
|
||||
}
|
||||
|
||||
async useSlackClaudeBasedSolution () {
|
||||
let use = await redis.get('CHATGPT:USE')
|
||||
if (use !== 'claude') {
|
||||
await redis.set('CHATGPT:USE', 'claude')
|
||||
await this.reply('已切换到基于slack claude机器人的解决方案')
|
||||
} else {
|
||||
await this.reply('当前已经是claude模式了')
|
||||
}
|
||||
}
|
||||
|
||||
async changeBingTone (e) {
|
||||
let tongStyle = e.msg.replace(/^#chatgpt(必应|Bing)切换/, '')
|
||||
if (!tongStyle) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue