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.
103 lines
No EOL
2.9 KiB
JavaScript
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); |