const inquirer = require("inquirer"); const sqlite3 = require("@journeyapps/sqlcipher"); const sqlite = require("sqlite"); let pushSQL = "INSERT INTO msg (\ msg_id,\ create_time,\ msg_type,\ composed_type,\ content,\ from_name,\ from_nickname,\ to_name,\ to_nickname,\ is_group_message,\ speaking_group_member_name,\ filename,\ display_filename\ ) VALUES (\ $messageID,\ $createTimestamp,\ $messageType,\ $type,\ $content,\ $fromName,\ $fromNickName,\ $toName,\ $toNickName,\ $isGroupMessage,\ $speakingGroupMemberName,\ $filename,\ $displayFilename\ )"; let db, pushStatement; async function initDB(dbFile) { db = await sqlite.open({ filename: dbFile, driver: sqlite3.Database, }); while (true) { try { const { password } = await inquirer.prompt([ { type: "password", name: "password", message: "密码:", prefix: "" }, ]); password && (await db.exec(`PRAGMA KEY=${password}`)); await db.exec( `CREATE TABLE IF NOT EXISTS msg ( msg_id TEXT NOT NULL, create_time INTEGER NOT NULL, msg_type INTEGER NOT NULL, composed_type TEXT NOT NULL, content TEXT, from_name TEXT, from_nickname TEXT, to_name TEXT, to_nickname TEXT, is_group_message INTEGER, speaking_group_member_name TEXT, filename TEXT, display_filename TEXT)` ); break; } catch (e) { if (e.name === "SQLITE_NOTADB") { console.warn("密码错误"); } else { throw e; } } } pushStatement = await db.prepare(pushSQL); } /** 将消息存储到数据库 */ async function pushMessage(message) { const m = {}; for (const key of Object.keys(message)) { m["$" + key] = message[key]; } await pushStatement.run(m); } module.exports = { initDB, pushMessage, };