mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-17 13:57:10 +00:00
feat: 改用调接口拿聊天记录,不用自己记录了
This commit is contained in:
parent
3885527a7d
commit
1c79ff00b7
3 changed files with 17 additions and 74 deletions
10
apps/chat.js
10
apps/chat.js
|
|
@ -1015,6 +1015,16 @@ export class chatgpt extends plugin {
|
||||||
opt.qq = e.sender.user_id
|
opt.qq = e.sender.user_id
|
||||||
opt.nickname = e.sender.card
|
opt.nickname = e.sender.card
|
||||||
opt.groupName = e.group.name
|
opt.groupName = e.group.name
|
||||||
|
let latestChat = await e.group.getChatHistory(0, 1)
|
||||||
|
let seq = latestChat[0].seq
|
||||||
|
let chats = []
|
||||||
|
while (chats.length < Config.groupContextLength) {
|
||||||
|
let chatHistory = await e.group.getChatHistory(seq, 20)
|
||||||
|
chats.push(...chatHistory)
|
||||||
|
}
|
||||||
|
chats = chats.slice(0, Config.groupContextLength)
|
||||||
|
console.log(chats)
|
||||||
|
opt.chats = chats
|
||||||
}
|
}
|
||||||
response = await bingAIClient.sendMessage(prompt, opt, (token) => {
|
response = await bingAIClient.sendMessage(prompt, opt, (token) => {
|
||||||
reply += token
|
reply += token
|
||||||
|
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
||||||
import plugin from '../../../lib/plugins/plugin.js'
|
|
||||||
import { Config } from '../utils/config.js'
|
|
||||||
import { formatDate } from '../utils/common.js'
|
|
||||||
|
|
||||||
export class intercepter extends plugin {
|
|
||||||
constructor () {
|
|
||||||
super({
|
|
||||||
/** 功能名称 */
|
|
||||||
name: 'ChatGPT-Plugin 监听群聊对话',
|
|
||||||
/** 功能描述 */
|
|
||||||
dsc: 'ChatGPT-Plugin 监听群聊对话,以便了解上下文',
|
|
||||||
event: 'message',
|
|
||||||
/** 优先级,数字越小等级越高 */
|
|
||||||
priority: 1,
|
|
||||||
rule: [
|
|
||||||
{
|
|
||||||
/** 学习群友聊天 **/
|
|
||||||
reg: '^[^#][sS]*',
|
|
||||||
fnc: 'recordChat',
|
|
||||||
log: false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
async recordChat (e) {
|
|
||||||
// let gl = await this.e.group.getMemberMap()
|
|
||||||
if (!e.raw_message) {
|
|
||||||
if (e.img && e.img.length > 0) {
|
|
||||||
e.msg = '[图片]'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (e.isGroup && e.raw_message) {
|
|
||||||
const chat = {
|
|
||||||
sender: e.sender.card,
|
|
||||||
senderId: e.sender.user_id,
|
|
||||||
senderSex: e.sender.sex,
|
|
||||||
msg: e.raw_message,
|
|
||||||
role: e.sender.role,
|
|
||||||
area: e.sender.area,
|
|
||||||
age: e.sender.age,
|
|
||||||
time: formatDate(new Date())
|
|
||||||
}
|
|
||||||
// console.log(chat)
|
|
||||||
await redis.rPush('CHATGPT:LATEST_CHAT_RECORD:' + e.group_id, JSON.stringify(chat))
|
|
||||||
if (await redis.lLen('CHATGPT:LATEST_CHAT_RECORD:' + e.group_id) > Config.groupContextLength) {
|
|
||||||
await redis.lPop('CHATGPT:LATEST_CHAT_RECORD:' + e.group_id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -213,7 +213,7 @@ export default class SydneyAIClient {
|
||||||
abortController = new AbortController(),
|
abortController = new AbortController(),
|
||||||
timeout = Config.defaultTimeoutMs,
|
timeout = Config.defaultTimeoutMs,
|
||||||
firstMessageTimeout = Config.sydneyFirstMessageTimeout,
|
firstMessageTimeout = Config.sydneyFirstMessageTimeout,
|
||||||
groupId, nickname, qq, groupName
|
groupId, nickname, qq, groupName, chats
|
||||||
} = opts
|
} = opts
|
||||||
if (typeof onProgress !== 'function') {
|
if (typeof onProgress !== 'function') {
|
||||||
onProgress = () => {}
|
onProgress = () => {}
|
||||||
|
|
@ -448,15 +448,16 @@ export default class SydneyAIClient {
|
||||||
context += `以下是一段qq群内的对话,提供给你作为上下文,你在回答所有问题时必须优先考虑这些信息,结合这些上下文进行回答,这很重要!!!。
|
context += `以下是一段qq群内的对话,提供给你作为上下文,你在回答所有问题时必须优先考虑这些信息,结合这些上下文进行回答,这很重要!!!。
|
||||||
发言人的格式是"群名片(qq号)[角色(owner是群主,admin是管理员)][地区][年龄]"
|
发言人的格式是"群名片(qq号)[角色(owner是群主,admin是管理员)][地区][年龄]"
|
||||||
`
|
`
|
||||||
context += (await redis.lRange('CHATGPT:LATEST_CHAT_RECORD:' + groupId, 0, -1))
|
context += chats
|
||||||
.map((item) => item.toString())
|
|
||||||
.map(chat => {
|
.map(chat => {
|
||||||
chat = JSON.parse(chat)
|
let sender = chat.sender
|
||||||
return `发言者:${chat.sender} (${chat.senderId}) [${chat.role}] [${chat.area}] (${chat.age}) 性别:${chat.senderSex} 发言内容:${chat.msg} 发言时间:${chat.time}\n`
|
return `发言者:${sender.card} (${sender.user_id}) [${sender.role}] [${sender.area}] (${sender.age}) [${sender.title}] 性别:${sender.sex} 发言内容:${chat.raw_message} 发言时间:${formatDate(new Date(chat.time))}\n`
|
||||||
})
|
})
|
||||||
.join('\n')
|
.join('\n')
|
||||||
}
|
}
|
||||||
logger.info(context)
|
if (Config.debug) {
|
||||||
|
logger.info(context)
|
||||||
|
}
|
||||||
if (context) {
|
if (context) {
|
||||||
obj.arguments[0].previousMessages.push({
|
obj.arguments[0].previousMessages.push({
|
||||||
author: 'user',
|
author: 'user',
|
||||||
|
|
@ -696,22 +697,6 @@ export default class SydneyAIClient {
|
||||||
conversation.messages.push(userMessage)
|
conversation.messages.push(userMessage)
|
||||||
conversation.messages.push(replyMessage)
|
conversation.messages.push(replyMessage)
|
||||||
}
|
}
|
||||||
if (groupId) {
|
|
||||||
const chat = {
|
|
||||||
sender: Config.sydneyBrainWashName || 'Sydney',
|
|
||||||
senderId: Bot.uin,
|
|
||||||
msg: reply.text,
|
|
||||||
role: 'robot',
|
|
||||||
area: 'Microsoft',
|
|
||||||
age: 1,
|
|
||||||
time: formatDate(new Date())
|
|
||||||
}
|
|
||||||
// console.log(chat)
|
|
||||||
await redis.rPush('CHATGPT:LATEST_CHAT_RECORD:' + groupId, JSON.stringify(chat))
|
|
||||||
if (await redis.lLen('CHATGPT:LATEST_CHAT_RECORD:' + groupId) > Config.groupContextLength) {
|
|
||||||
await redis.lPop('CHATGPT:LATEST_CHAT_RECORD:' + groupId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await this.conversationsCache.set(conversationKey, conversation)
|
await this.conversationsCache.set(conversationKey, conversation)
|
||||||
return {
|
return {
|
||||||
conversationSignature,
|
conversationSignature,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue