discord_bot/server/createAndLoadWhitelistTable.js
SileNce5k 92dec35da4
All checks were successful
CI / CI (push) Successful in 1m24s
Improve whitelist feature
* Use a primary autoincrementing primary key because primary keys need
  to be unique
* Cache whitelist on bot startup / only read from database once
* "Externalize" whitelist checking to the messageCreate function.
2025-04-30 16:14:15 +02:00

48 lines
No EOL
1.5 KiB
JavaScript

const sqlite3 = require('sqlite3').verbose();
module.exports = async function (clientWhitelist) {
const db = new sqlite3.Database('data/database.db');
await new Promise ((resolve, reject)=>{
db.run(
`CREATE TABLE IF NOT EXISTS whitelist (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
serverId TEXT,
command TEXT,
dateAdded INTEGER)`,
(err) => {
if (err) {
console.error(`Error while creating table 'whitelist': ${err}`);
reject(err);
} else {
console.log("Table 'whitelist' created successfully.");
resolve();
}
db.close();
}
);
})
loadWhitelist(clientWhitelist);
}
async function loadWhitelist(clientWhitelist) {
const db = new sqlite3.Database('data/database.db');
let rows = await new Promise((resolve) => {
db.all(`SELECT * FROM whitelist`, function (error, rows){
if(error){
console.error("Failed to read whitelist table")
console.error(error);
resolve([]);
}else{
resolve(rows);
}
});
});
rows.forEach(row => {
if(clientWhitelist.has(row.serverId)){
let oldEntry = clientWhitelist.get(row.serverId);
oldEntry.push(row.command)
clientWhitelist.set(row.serverId, oldEntry)
}else {
clientWhitelist.set(row.serverId, [row.command])
}
});
}