mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-01 08:21:27 +03:00
Entrypoint, env and config etc
This commit is contained in:
75
src/index.mjs
Normal file
75
src/index.mjs
Normal file
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* Discord Tickets
|
||||
* Copyright (C) 2022 Isaac Saunders
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* @name discord-tickets/bot
|
||||
* @description An open-source Discord bot for ticket management
|
||||
* @copyright 2022 Isaac Saunders
|
||||
* @license GNU-GPLv3
|
||||
*/
|
||||
|
||||
import dotenv from 'dotenv-cra';
|
||||
import fs from 'fs';
|
||||
import semver from 'semver';
|
||||
import { colours } from 'leeks.js';
|
||||
import logger from './lib/logger.mjs';
|
||||
import banner from './lib/banner.mjs';
|
||||
import YAML from 'yaml';
|
||||
|
||||
process.env.NODE_ENV ??= 'development'; // make sure NODE_ENV is set
|
||||
dotenv.config(); // load env file
|
||||
|
||||
const pkg = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
|
||||
|
||||
// check node version
|
||||
if (!semver.satisfies(process.versions.node, pkg.engines.node)) {
|
||||
console.log('\x07' + colours.redBright(`Error: Discord Tickets requires Node.js version ${pkg.engines.node}; you are currently using ${process.versions.node}`));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (process.env.DB_ENCRYPTION_KEY === undefined) {
|
||||
console.log('\x07' + colours.redBright('Error: The "DB_ENCRYPTION_KEY" environment variable is not set.\nRun "npm run keygen" to generate a key, or set it to "false" to disable encryption (not recommended).'));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log(banner(pkg.version)); // print big title
|
||||
|
||||
process.env.CONFIG_PATH ??= './user/config.yml'; // set default config file path
|
||||
|
||||
if (!fs.existsSync(process.env.CONFIG_PATH)) {
|
||||
const examplePath = './user/example.config.yml';
|
||||
if (!fs.existsSync(examplePath)) {
|
||||
console.log('\x07' + colours.redBright('The config file does not exist, and the example file is missing so cannot be copied from.'));
|
||||
process.exit(1);
|
||||
} else {
|
||||
console.log('Creating config file...');
|
||||
fs.copyFileSync(examplePath, process.env.CONFIG_PATH);
|
||||
console.log(`Copied config to ${process.env.CONFIG_PATH}`);
|
||||
}
|
||||
}
|
||||
|
||||
const config = YAML.parse(fs.readFileSync(process.env.CONFIG_PATH, 'utf8'));
|
||||
|
||||
const log = logger(config);
|
||||
|
||||
|
||||
process.on('unhandledRejection', error => {
|
||||
log.notice(`Discord Tickets v${pkg.version} on Node.js v${process.versions.node} (${process.platform})`);
|
||||
log.notice('An error was not caught');
|
||||
if (error instanceof Error) log.warn(`Uncaught ${error.name}`);
|
||||
log.error(error);
|
||||
});
|
||||
|
22
src/lib/banner.mjs
Normal file
22
src/lib/banner.mjs
Normal file
@@ -0,0 +1,22 @@
|
||||
import { colours } from 'leeks.js';
|
||||
import link from 'terminal-link';
|
||||
|
||||
export default version => colours.cyan(`
|
||||
######## #### ###### ###### ####### ######## ########
|
||||
## ## ## ## ## ## ## ## ## ## ## ## ##
|
||||
## ## ## ## ## ## ## ## ## ## ##
|
||||
## ## ## ###### ## ## ## ######## ## ##
|
||||
## ## ## ## ## ## ## ## ## ## ##
|
||||
## ## ## ## ## ## ## ## ## ## ## ## ##
|
||||
######## #### ###### ###### ####### ## ## ########
|
||||
######## #### ###### ## ## ######## ######## ######
|
||||
## ## ## ## ## ## ## ## ## ##
|
||||
## ## ## ## ## ## ## ##
|
||||
## ## ## ##### ###### ## ######
|
||||
## ## ## ## ## ## ## ##
|
||||
## ## ## ## ## ## ## ## ## ##
|
||||
## #### ###### ## ## ######## ## ######
|
||||
`) +
|
||||
colours.cyanBright(`\n${link('Discord Tickets', 'https://discordtickets.app')} bot v${version} by eartharoid`) +
|
||||
colours.cyanBright('\n' + link('Sponsor this project', 'https://discordtickets.app/sponsor')) +
|
||||
'\n\n';
|
0
src/lib/constants.js
Normal file
0
src/lib/constants.js
Normal file
44
src/lib/logger.mjs
Normal file
44
src/lib/logger.mjs
Normal file
@@ -0,0 +1,44 @@
|
||||
import Logger from 'leekslazylogger';
|
||||
import DTF from '@eartharoid/dtf';
|
||||
import { short } from 'leeks.js';
|
||||
|
||||
const dtf = new DTF();
|
||||
const colours = {
|
||||
critical: ['&!4&f', '&!4&f'],
|
||||
debug: ['&1', '&9'],
|
||||
error: ['&4', '&c'],
|
||||
info: ['&3', '&b'],
|
||||
notice: ['&!6&0', '&!6&0'],
|
||||
success: ['&2', '&a'],
|
||||
warn: ['&6', '&e'],
|
||||
};
|
||||
|
||||
export default config => {
|
||||
const transports = [
|
||||
new Logger.transports.ConsoleTransport({
|
||||
format: log => {
|
||||
const timestamp = dtf.fill('DD/MM/YY HH:mm:ss', log.timestamp);
|
||||
const colour = colours[log.level.name];
|
||||
return short(`&f&!7${timestamp}&r ${colour[0]}[${log.level.name.toUpperCase()}]&r ${log.namespace ? `&d(${log.namespace.toUpperCase()})&r ` : ''}${colour[1]}${log.content}`);
|
||||
},
|
||||
level: config.logs.level,
|
||||
})
|
||||
];
|
||||
|
||||
if (config.logs.files.enabled) {
|
||||
transports.push(
|
||||
new Logger.transports.FileTransport({
|
||||
clean_directory: config.logs.files.keepFor,
|
||||
directory: config.logs.files.directory,
|
||||
level: config.logs.level,
|
||||
name: 'Discord Tickets by eartharoid',
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
return new Logger({
|
||||
namespaces: ['commands', 'http', 'listeners'],
|
||||
transports,
|
||||
});
|
||||
};
|
||||
|
Reference in New Issue
Block a user