fix: memory forward

This commit is contained in:
ikechan8370 2025-11-07 16:02:38 +08:00
parent d0e365cb32
commit 82de8308b3
3 changed files with 96 additions and 32 deletions

View file

@ -1,26 +1,10 @@
import Config from '../config/config.js'
import { GroupMessageCollector } from '../models/memory/collector.js'
import { memoryService } from '../models/memory/service.js'
import common from '../../../lib/common/common.js'
const collector = new GroupMessageCollector()
function formatUserMemoryList (memories) {
if (!memories.length) {
return '暂无记录~'
}
return memories.map(item => `${item.id}. ${item.value}(重要度 ${item.importance.toFixed(2)}`).join('\n')
}
function formatGroupFactList (facts) {
if (!facts.length) {
return '暂无群记忆。'
}
return facts.map(item => {
const topic = item.topic ? `${item.topic}` : ''
return `${item.id}. ${topic}${item.fact}`
}).join('\n')
}
function isGroupManager (e) {
if (e.isMaster) {
return true
@ -55,6 +39,10 @@ export class MemoryManager extends plugin {
reg: '^#?(我的)?记忆$',
fnc: 'showUserMemory'
},
{
reg: '^#?他的记忆$',
fnc: 'showTargetUserMemory'
},
{
reg: '^#?(删除|清除)(我的)?记忆\\s*(\\d+)$',
fnc: 'deleteUserMemory'
@ -96,9 +84,52 @@ export class MemoryManager extends plugin {
await e.reply('私人记忆未开启或您未被授权。')
return false
}
const memories = memoryService.listUserMemories(e.sender.user_id, e.isGroup ? e.group_id : null, 10)
const content = formatUserMemoryList(memories)
await e.reply(`🧠 您的记忆:\n${content}`)
const memories = memoryService.listUserMemories(e.sender.user_id, e.isGroup ? e.group_id : null)
if (!memories.length) {
await e.reply('🧠 您的记忆:\n暂无记录~')
return true
}
const msgs = memories.map(item =>
`${item.id}. ${item.value}(重要度 ${item.importance.toFixed(2)}`
)
const forwardMsg = await common.makeForwardMsg(e, ['🧠 您的记忆:', ...msgs], '私人记忆列表')
await e.reply(forwardMsg)
return true
}
async showTargetUserMemory (e) {
if (!e.isGroup) {
await e.reply('该指令仅可在群聊中使用。')
return false
}
const at = e.at || (e.message?.find(m => m.type === 'at')?.qq)
if (!at) {
await e.reply('请@要查询的用户。')
return false
}
if (!memoryService.isUserMemoryEnabled(at)) {
await e.reply('该用户未开启私人记忆或未被授权。')
return false
}
const memories = memoryService.listUserMemories(at, e.group_id)
if (!memories.length) {
await e.reply('🧠 TA的记忆\n暂无记录~')
return true
}
const msgs = memories.map(item =>
`${item.id}. ${item.value}(重要度 ${item.importance.toFixed(2)}`
)
const forwardMsg = await common.makeForwardMsg(e, ['🧠 TA的记忆', ...msgs], 'TA的记忆列表')
await e.reply(forwardMsg)
return true
}
@ -130,9 +161,20 @@ export class MemoryManager extends plugin {
return false
}
await collector.flush(e.group_id)
const facts = memoryService.listGroupFacts(e.group_id, 10)
const content = formatGroupFactList(facts)
await e.reply(`📚 本群记忆:\n${content}`)
const facts = memoryService.listGroupFacts(e.group_id)
if (!facts.length) {
await e.reply('📚 本群记忆:\n暂无群记忆。')
return true
}
const msgs = facts.map(item => {
const topic = item.topic ? `${item.topic}` : ''
return `${item.id}. ${topic}${item.fact}`
})
const forwardMsg = await common.makeForwardMsg(e, ['📚 本群记忆:', ...msgs], '群记忆列表')
await e.reply(forwardMsg)
return true
}

View file

@ -5,7 +5,13 @@ import path from 'path'
import https from 'https'
import { pipeline } from 'stream'
import { promisify } from 'util'
import AdmZip from 'adm-zip'
let AdmZip
try {
AdmZip = (await import('adm-zip')).default
} catch (e) {
logger.warn('Failed to load AdmZip, maybe you need to install it manually:', e)
}
import { execSync } from "child_process"
import {
Chaite,
ChaiteResponse,
@ -219,14 +225,28 @@ async function downloadSimpleExtensionArchive ({ assetKey, assetName, targetDir
await downloadToFile(downloadUrl, tempFile)
removeDirectoryIfExists(targetDir)
ensureDirectoryExists(targetDir)
try {
const zip = new AdmZip(tempFile)
zip.extractAllTo(targetDir, true)
} finally {
if (fs.existsSync(tempFile)) {
fs.unlinkSync(tempFile)
if (AdmZip) {
try {
const zip = new AdmZip(tempFile)
zip.extractAllTo(targetDir, true)
} finally {
if (fs.existsSync(tempFile)) {
fs.unlinkSync(tempFile)
}
}
} else {
// 尝试使用 unzip 命令解压
try {
execSync(`unzip "${tempFile}" -d "${targetDir}"`, { stdio: 'inherit' })
} catch (error) {
throw new Error(`Failed to extract zip file: ${error.message}. Please install adm-zip manually: pnpm i`)
} finally {
if (fs.existsSync(tempFile)) {
fs.unlinkSync(tempFile)
}
}
}
const libraryFile = findLibraryFile(targetDir)
if (!libraryFile) {
throw new Error('Downloaded extension package does not contain libsimple library.')

View file

@ -1,6 +1,6 @@
{
"name": "chatgpt-plugin",
"version": "3.0.0-beta.1",
"version": "3.0.0",
"type": "module",
"author": "ikechan8370",
"dependencies": {
@ -12,8 +12,10 @@
"keyv-file": "^5.1.2",
"lowdb": "^7.0.1",
"sqlite-vec": "^0.1.7-alpha.2",
"sqlite3": "^5.1.6",
"vectra": "^0.9.0"
},
"peerDependencies": {
"sqlite3": ">=5.1.6"
},
"pnpm": {}
}