2021-12-10 21:39:54 +05:00
/* eslint-disable no-async-promise-executor */
2022-07-31 17:08:00 +05:00
const { GatewayIntentBits } = require ( "discord.js" ) ,
2022-07-26 17:20:10 +05:00
config = require ( "../config" ) ,
fetch = require ( "node-fetch" ) ,
chalk = require ( "chalk" ) ,
success = ( message ) => console . log ( ` ${ chalk . green ( "✓" ) } ${ message } ` ) ,
error = ( message , howToFix ) => console . log ( ` ${ chalk . red ( "✗" ) } ${ message } ${ howToFix ? ` : ${ howToFix } ` : "" } ` ) ,
ignore = ( message ) => console . log ( ` ${ chalk . yellow ( "~" ) } ${ message } ` ) ;
2021-12-10 21:39:54 +05:00
const checks = [
( ) => {
console . log ( "\n\nEnvironnement" ) ;
2023-02-01 00:23:01 +05:00
return new Promise ( res => {
2023-03-30 15:52:58 +05:00
if ( parseInt ( process . versions . node . split ( "." ) [ 0 ] ) >= 18 ) {
2023-03-28 16:19:20 +05:00
success ( "node.js version equal or higher than v18" ) ;
2021-12-10 21:39:54 +05:00
} else {
2023-03-28 16:19:20 +05:00
error ( "node.js version should be equal or higher than v18" ) ;
2022-01-13 00:26:23 +05:00
}
2021-12-10 21:39:54 +05:00
res ( ) ;
} ) ;
} ,
( ) => {
console . log ( "\n\nDiscord Bot" ) ;
2023-02-01 00:23:01 +05:00
return new Promise ( res => {
2021-12-10 21:39:54 +05:00
const Discord = require ( "discord.js" ) ;
2022-07-31 17:08:00 +05:00
const client = new Discord . Client ( { intents : [ GatewayIntentBits . Guilds ] } ) ;
2021-12-10 21:39:54 +05:00
let readyResolve ;
2023-02-01 00:23:01 +05:00
new Promise ( resolve => readyResolve = resolve ) ;
2021-12-10 21:39:54 +05:00
client . login ( config . token ) . then ( async ( ) => {
2021-12-22 19:13:26 +05:00
success ( "Valid bot token" ) ;
2021-12-10 21:39:54 +05:00
await readyResolve ( ) ;
if ( ! client . guilds . cache . has ( "568120814776614924" ) ) {
2021-12-22 19:13:26 +05:00
error ( "Should be added to the emojis server" , "please add your bot on this server: https://discord.gg/5wrBEwE4bc to make the emojis working" ) ;
2021-12-10 21:39:54 +05:00
} else {
2021-12-22 19:13:26 +05:00
success ( "Added to the emojis server" ) ;
2022-01-13 00:26:23 +05:00
}
2021-12-10 21:39:54 +05:00
res ( ) ;
} ) . catch ( ( ) => {
2021-12-22 19:13:26 +05:00
error ( "Should be a valid bot token" ) ;
2021-12-10 21:39:54 +05:00
res ( ) ;
} ) ;
client . on ( "ready" , readyResolve ) ;
} ) ;
} ,
( ) => {
console . log ( "\n\nMongoDB" ) ;
2023-02-01 00:23:01 +05:00
return new Promise ( res => {
2021-12-10 21:39:54 +05:00
const MongoClient = require ( "mongodb" ) . MongoClient ;
const dbName = config . mongoDB . split ( "/" ) . pop ( ) ;
const baseURL = config . mongoDB . substr ( 0 , config . mongoDB . length - dbName . length ) ;
const client = new MongoClient ( baseURL , {
2022-12-15 21:02:38 +05:00
useUnifiedTopology : true ,
2021-12-10 21:39:54 +05:00
} ) ;
client . connect ( ) . then ( async ( ) => {
2021-12-16 16:05:15 +05:00
success ( "Connection to Mongo database success" ) ;
2021-12-10 21:39:54 +05:00
res ( ) ;
} ) . catch ( ( ) => {
2022-07-26 17:20:10 +05:00
error ( "Not able to connect to Mongo database" , "please verify if the MongoDB server is started" ) ;
2021-12-10 21:39:54 +05:00
res ( ) ;
} ) ;
} ) ;
} ,
( ) => {
console . log ( "\n\nAPI keys" ) ;
return new Promise ( async ( resolve ) => {
if ( ! config . apiKeys . amethyste ) {
2022-07-26 17:20:10 +05:00
ignore ( "Amethyste API is not configured, skipping check." ) ;
2021-12-10 21:39:54 +05:00
} else {
const res = await fetch ( "https://v1.api.amethyste.moe/generate/blurple" , {
method : "POST" ,
headers : {
2022-12-15 21:02:38 +05:00
Authorization : ` Bearer ${ config . apiKeys . amethyste } ` ,
} ,
2021-12-10 21:39:54 +05:00
} ) ;
const result = await res . json ( ) ;
if ( result . status === 401 ) {
2022-07-26 17:20:10 +05:00
error ( "Not valid Amethyste API key" , "get your key here: https://api.amethyste.moe/" ) ;
2021-12-10 21:39:54 +05:00
} else {
2021-12-22 19:13:26 +05:00
success ( "Valid Amethyste API key" ) ;
2022-01-13 00:26:23 +05:00
}
2021-12-10 21:39:54 +05:00
}
resolve ( ) ;
} ) ;
} ,
( ) => {
console . log ( "\n\nDashboard" ) ;
return new Promise ( async ( resolve ) => {
if ( ! config . dashboard . enabled ) {
2022-07-26 17:20:10 +05:00
ignore ( "Dashboard is not enabled, skipping check." ) ;
2021-12-10 21:39:54 +05:00
} else {
2023-06-26 17:25:17 +05:00
const checkPortTaken = port => {
2023-02-01 00:23:01 +05:00
return new Promise ( resolve => {
2021-12-10 21:39:54 +05:00
const net = require ( "net" ) ;
const tester = net . createServer ( )
. once ( "error" , ( ) => {
resolve ( true ) ;
} )
2021-12-26 19:29:37 +05:00
. once ( "listening" , function ( ) {
2021-12-10 21:39:54 +05:00
tester
2021-12-26 19:29:37 +05:00
. once ( "close" , function ( ) {
2021-12-10 21:39:54 +05:00
resolve ( false ) ;
} )
. close ( ) ;
} )
. listen ( port ) ;
} ) ;
} ;
const isPortTaken = await checkPortTaken ( config . dashboard . port ) ;
if ( isPortTaken ) {
2022-07-26 17:20:10 +05:00
error ( "Dashboard port not available" , "you have probably another process using this port" ) ;
2021-12-10 21:39:54 +05:00
} else {
2021-12-22 19:13:26 +05:00
success ( "Dashboard port is available" ) ;
2022-01-13 00:26:23 +05:00
}
}
2021-12-10 21:39:54 +05:00
resolve ( ) ;
} ) ;
2022-12-15 21:02:38 +05:00
} ,
2021-12-10 21:39:54 +05:00
] ;
( async ( ) => {
console . log ( chalk . yellow ( "This script will check if your config is errored, and some other important things such as whether your database is started, etc..." ) ) ;
2021-12-11 21:08:37 +05:00
for ( const check of checks ) {
2021-12-10 21:39:54 +05:00
await check ( ) ;
2022-01-13 00:26:23 +05:00
}
2021-12-10 21:39:54 +05:00
process . exit ( 0 ) ;
} ) ( ) ;