121 lines
3.1 KiB
JavaScript
121 lines
3.1 KiB
JavaScript
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)
|
|
)`)
|
|
|
|
db.run(
|
|
`CREATE TABLE IF NOT EXISTS levelUps (
|
|
displayName STRING,
|
|
levelUpCount INTEGER DEFAULT 0,
|
|
UNIQUE(displayName)
|
|
)`)
|
|
|
|
db.run(
|
|
`CREATE TABLE IF NOT EXISTS playerData (
|
|
displayName STRING,
|
|
level INTEGER DEFAULT 0,
|
|
online INTEGER DEFAULT 0,
|
|
UNIQUE(displayName)
|
|
)`
|
|
)
|
|
|
|
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)
|
|
}
|
|
})
|
|
})
|
|
|
|
const all = (sql, params = []) => new Promise((resolve, reject) => {
|
|
db.all(sql, params, (err, rows) => {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
resolve(rows)
|
|
}
|
|
})
|
|
})
|
|
|
|
export const saveChat = id => run(`INSERT OR IGNORE INTO chats (chatId) VALUES (?)`, [ id ])
|
|
export const getChats = () => all('SELECT * FROM chats')
|
|
|
|
export const saveLogoutTime = 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
|
|
)
|
|
|
|
export const saveLevelUp = (displayName, levelUpCount) => run(
|
|
`INSERT OR REPLACE INTO levelUps (displayName, levelUpCount) VALUES (?, ?)`,
|
|
[ displayName, levelUpCount ]
|
|
)
|
|
export const getLevelUpCount = displayName => get(
|
|
`SELECT levelUpCount FROM levelUps WHERE displayName = ?`,
|
|
[ displayName ],
|
|
'levelUpCount',
|
|
0
|
|
)
|
|
export const saveLevel = (displayName, newLevel) => run(
|
|
`INSERT OR REPLACE INTO playerData (displayName, level, online) VALUES (?, ?, 1)`,
|
|
[ displayName, newLevel ]
|
|
)
|
|
|
|
export const setOnlineState = displayName => run(
|
|
`INSERT OR REPLACE INTO playerData (displayName, online) VALUES (?, 1)`,
|
|
[ displayName ]
|
|
)
|
|
export const setOfflineState = displayName => run(
|
|
`INSERT OR REPLACE INTO playerData (displayName, online) VALUES (?, 0)`,
|
|
[ displayName ]
|
|
)
|
|
export const getPlayersData = () => all('SELECT * FROM playerData ORDER BY online DESC, displayName ASC')
|