diff --git a/apps/chat.js b/apps/chat.js index a808f01..5ec6bb0 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -1015,6 +1015,16 @@ export class chatgpt extends plugin { opt.qq = e.sender.user_id opt.nickname = e.sender.card 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) => { reply += token diff --git a/apps/intercept.js b/apps/intercept.js deleted file mode 100644 index 46ef8c1..0000000 --- a/apps/intercept.js +++ /dev/null @@ -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 - } -} diff --git a/utils/SydneyAIClient.js b/utils/SydneyAIClient.js index 8dfe5fb..c209d13 100644 --- a/utils/SydneyAIClient.js +++ b/utils/SydneyAIClient.js @@ -213,7 +213,7 @@ export default class SydneyAIClient { abortController = new AbortController(), timeout = Config.defaultTimeoutMs, firstMessageTimeout = Config.sydneyFirstMessageTimeout, - groupId, nickname, qq, groupName + groupId, nickname, qq, groupName, chats } = opts if (typeof onProgress !== 'function') { onProgress = () => {} @@ -448,15 +448,16 @@ export default class SydneyAIClient { context += `以下是一段qq群内的对话,提供给你作为上下文,你在回答所有问题时必须优先考虑这些信息,结合这些上下文进行回答,这很重要!!!。 发言人的格式是"群名片(qq号)[角色(owner是群主,admin是管理员)][地区][年龄]" ` - context += (await redis.lRange('CHATGPT:LATEST_CHAT_RECORD:' + groupId, 0, -1)) - .map((item) => item.toString()) + context += chats .map(chat => { - chat = JSON.parse(chat) - return `发言者:${chat.sender} (${chat.senderId}) [${chat.role}] [${chat.area}] (${chat.age}) 性别:${chat.senderSex} 发言内容:${chat.msg} 发言时间:${chat.time}\n` + let sender = chat.sender + 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') } - logger.info(context) + if (Config.debug) { + logger.info(context) + } if (context) { obj.arguments[0].previousMessages.push({ author: 'user', @@ -696,22 +697,6 @@ export default class SydneyAIClient { conversation.messages.push(userMessage) 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) return { conversationSignature,