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-05-05 23:29:28 +03:00
2022-05-05 23:47:08 +03:00
const pkg = require ( '../package.json' ) ;
2022-05-05 23:29:28 +03:00
const fs = require ( 'fs' ) ;
const semver = require ( 'semver' ) ;
const { colours } = require ( 'leeks.js' ) ;
const logger = require ( './lib/logger' ) ;
const banner = require ( './lib/banner' ) ;
const YAML = require ( 'yaml' ) ;
const Client = require ( './client' ) ;
2022-05-06 02:01:19 +03:00
const http = require ( './http' ) ;
2022-03-18 18:27:32 +02:00
process . env . NODE _ENV ? ? = 'development' ; // make sure NODE_ENV is set
2022-05-05 23:29:28 +03:00
require ( 'dotenv' ) . config ( ) ; // load env file
2022-03-18 18:27:32 +02:00
// check node version
if ( ! semver . satisfies ( process . versions . node , pkg . engines . node ) ) {
2022-03-22 01:28:20 +02:00
console . log ( '\x07' + colours . redBright ( ` Error: Your current Node.js version, ${ process . versions . node } , does not meet the requirement " ${ pkg . engines . node } ". ` ) ) ;
2022-03-18 18:27:32 +02:00
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 ) ;
}
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 } ` ) ;
}
}
2022-03-22 01:28:20 +02:00
console . log ( banner ( pkg . version ) ) ; // print big title
2022-03-18 18:27:32 +02:00
2022-03-22 01:28:20 +02:00
const config = YAML . parse ( fs . readFileSync ( process . env . CONFIG _PATH , 'utf8' ) ) ;
2022-03-18 18:27:32 +02:00
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 ) ;
} ) ;
2022-03-22 01:28:20 +02:00
const client = new Client ( ) ;
2022-05-05 23:29:28 +03:00
client . config = config ;
client . log = log ;
2022-05-06 02:01:19 +03:00
client . login ( ) . then ( ( ) => {
http ( client ) ;
} ) ;