discord_bot/server.js
SileNce5k ba88243dea
All checks were successful
CI / CI (push) Successful in 1m23s
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 15:55:53 +02:00

103 lines
No EOL
2.9 KiB
JavaScript

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();
}
async function checkAndConvertJSONToSQL(){
process.stdout.write("Checking if timers.json exists... ")
if(fs.existsSync("./data/timers.json")){
process.stdout.write(true + "\n")
await createDatabaseTables();
await convertJSONToSQL();
fs.renameSync('data/timers.json', 'data/timers.json.old');
console.log("Renamed timers.json to timers.json.old");
}else{
process.stdout.write(false + "\n")
}
}
const createDatabaseTables = require('./server/createDatabaseTables');
const createLastfmTable = require('./server/createLastfmTable');
const createWhitelistTable = require('./server/createWhitelistTable.js')
createWhitelistTable();
createLastfmTable();
checkAndConvertJSONToSQL();
const { Collection, Client, GatewayIntentBits, Partials } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.GuildPresences
], partials: [Partials.Channel] });
const {
globalPrefix,
token,
loginMessage,
loginChannel,
enableLoginMessage,
owners,
presenceType,
presenceText
} = require('./data/config.json');
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);
const reloadCommands = require("./util/reloadCommands.js");
const onMessage = require('./server/message');
const onReady = require('./server/ready');
reloadCommands(client)
client.once('ready', () => {
onReady(client, enableLoginMessage, loginChannel, loginMessage)
});
client.once('reconnecting', () => {
console.log('Reconnecting!');
});
client.once('disconnect', () => {
console.log('Disconnect!');
});
client.on('messageCreate', async message => {
onMessage(client, owners, message, globalPrefix);
});
client.login(token);