feat(server): first version
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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,
|
||||
};
|
||||
Reference in New Issue
Block a user