import sqlite from 'sqlite3' import { currentTime } from './utility' const db = new sqlite.Database('bot.db') db.run( `CREATE TABLE IF NOT EXISTS chats ( chatId INTEGER, UNIQUE(chatId) )`) db.run( `CREATE TABLE IF NOT EXISTS playerLogouts ( displayName STRING, lastLogoutTime DATETIME, UNIQUE(displayName) )`) db.run( `CREATE TABLE IF NOT EXISTS playerKills ( displayName STRING, entityName STRING, killCount INTEGER, UNIQUE(displayName, entityName) )`) const run = (sql, params) => new Promise((resolve, reject) => { db.run(sql, params, (err) => { if (err) { reject(err) } else { resolve() } }) }) const get = (sql, params, column, defaultParam = null) => new Promise((resolve, reject) => { db.get(sql, params, (err, row) => { if (err) { reject(err) } else { resolve(row ? row[column] : defaultParam) } }) }) export const saveChat = id => run(`INSERT OR IGNORE INTO chats (chatId) VALUES (?)`, [ id ]) export const getChats = () => new Promise((resolve, reject) => { db.all('SELECT * FROM chats', [], (err, rows) => { if (err) { reject(err) } else { resolve(rows) } }) }) export const saveLogout = displayName => run( `INSERT OR REPLACE INTO playerLogouts (displayName, lastLogoutTime) VALUES (?, ?)`, [ displayName, currentTime() ] ) export const getLastLogoutTime = displayName => get( `SELECT lastLogoutTime FROM playerLogouts WHERE displayName = ?`, [ displayName ], 'lastLogoutTime', null ) export const saveKillCount = (displayName, entityName, killCount) => run( `INSERT OR REPLACE INTO playerKills (displayName, entityName, killCount) VALUES (?, ?, ?)`, [ displayName, entityName, killCount ] ) export const getKillCount = (displayName, entityName) => get( `SELECT killCount FROM playerKills WHERE displayName = ? AND entityName = ?`, [ displayName, entityName ], 'killCount', 0 )