Improve whitelist feature
All checks were successful
CI / CI (push) Successful in 1m23s

* 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.
This commit is contained in:
SileNce5k 2025-04-30 15:55:53 +02:00
parent c9d7a54e25
commit ba88243dea
Signed by: SileNce
GPG key ID: B0A142BB4291B204
5 changed files with 56 additions and 46 deletions

View file

@ -1,6 +1,7 @@
const fs = require('fs');
const createInitialConfig = require("./util/createInitialConfig")
const convertJSONToSQL = require('./util/timer/convertJSONToSQL');
const sqlite3 = require('sqlite3').verbose();
if(!fs.existsSync("./data/config.json")) {
createInitialConfig();
}
@ -43,8 +44,36 @@ const {
client.settings = new Collection();
client.commands = new Collection();
client.serverPrefixes = new Collection();
client.whitelist = new Collection();
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])
}
});
}
loadWhitelist(client.whitelist);
client.settings.set("presenceType", presenceType);
client.settings.set("presenceText", presenceText);