DiscordTickets/src/index.js

76 lines
2.8 KiB
JavaScript
Raw Normal View History

2022-03-18 18:27:32 +02:00
/**
* 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
*/
2022-10-05 21:55:52 +03:00
/* eslint-disable no-console */
2022-05-05 23:47:08 +03:00
const pkg = require('../package.json');
2022-10-05 21:55:08 +03:00
const banner = require('./lib/banner');
console.log(banner(pkg.version)); // print big title
2022-05-05 23:29:28 +03:00
const semver = require('semver');
const { colours } = require('leeks.js');
2022-03-18 18:27:32 +02:00
// check node version
if (!semver.satisfies(process.versions.node, pkg.engines.node)) {
2023-03-07 00:09:05 +02:00
console.log('\x07' + colours.redBright(`Error: Your current Node.js version, ${process.versions.node}, does not meet the requirement "${pkg.engines.node}". Please update to version ${semver.minVersion(pkg.engines.node).version} or higher.`));
2022-03-18 18:27:32 +02:00
process.exit(1);
}
// this could be done first, but then there would be no banner :(
2023-02-24 02:18:38 +02:00
process.env.NODE_ENV ??= 'production'; // make sure NODE_ENV is set
require('./env').load(); // load and check environment variables
const fs = require('fs');
const YAML = require('yaml');
const logger = require('./lib/logger');
const Client = require('./client');
const http = require('./http');
2022-03-18 18:27:32 +02:00
2022-07-21 16:30:03 +03:00
if (!fs.existsSync('./user/config.yml')) {
2022-03-18 18:27:32 +02:00
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...');
2022-07-21 16:30:03 +03:00
fs.copyFileSync(examplePath, './user/config.yml');
console.log(`Copied config to ${'./user/config.yml'}`);
2022-03-18 18:27:32 +02:00
}
}
2022-07-21 16:30:03 +03:00
const config = YAML.parse(fs.readFileSync('./user/config.yml', 'utf8'));
2022-03-18 18:27:32 +02:00
const log = logger(config);
2023-06-19 01:57:11 +03:00
process.on('uncaughtException', (error, origin) => {
2022-09-11 23:11:12 +03:00
log.notice(`Discord Tickets v${pkg.version} on Node.js ${process.version} (${process.platform})`);
2023-06-19 01:57:11 +03:00
log.warn(origin === 'uncaughtException' ? 'Uncaught exception' : 'Unhandled promise rejection' + ` (${error.name})`);
2022-03-18 18:27:32 +02:00
log.error(error);
});
2023-06-19 01:57:11 +03:00
process.on('warning', warning => log.warn(warning.stack));
2022-07-17 00:18:50 +03:00
const client = new Client(config, log);
2022-05-06 02:01:19 +03:00
client.login().then(() => {
http(client);
2023-06-19 01:57:11 +03:00
});