mirror of
https://github.com/cloudmaker97/FS25-Discord-Bot.git
synced 2025-12-06 08:28:33 +00:00
132 lines
No EOL
5.8 KiB
TypeScript
132 lines
No EOL
5.8 KiB
TypeScript
import IDiscordConfiguration from "../Interfaces/Configuration/IDiscordConfiguration";
|
|
import IApplicationConfiguration from "../Interfaces/Configuration/IApplicationConfiguration";
|
|
import IConfiguration from "../Interfaces/Configuration/IConfiguration";
|
|
import ITranslation from "../Interfaces/Configuration/ITranslation";
|
|
import Logging from "./Logging";
|
|
import {Logger} from "winston";
|
|
|
|
export default class Configuration implements IConfiguration{
|
|
private readonly logger: Logger;
|
|
public readonly discord: IDiscordConfiguration;
|
|
public readonly application: IApplicationConfiguration;
|
|
public readonly translation: ITranslation;
|
|
|
|
constructor() {
|
|
this.logger = Logging.getLogger();
|
|
try {
|
|
let config = require('../../config.json');
|
|
this.discord = config.discord;
|
|
this.application = config.application;
|
|
this.translation = config.translation;
|
|
} catch (exception) {
|
|
this.logger.error("Error while loading configuration file, please check if the configuration file exists and is valid.");
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns true if the value is empty or undefined
|
|
* @param value
|
|
* @private
|
|
*/
|
|
private isValueEmptyOrUndefined(value: any): boolean {
|
|
return value == null || value == "" || value == undefined;
|
|
}
|
|
|
|
/**
|
|
* Returns true if the value is undefined
|
|
* @param value
|
|
* @private
|
|
*/
|
|
private isValueUndefined(value: any): boolean {
|
|
return value == undefined;
|
|
}
|
|
|
|
/**
|
|
* Validates the discord configuration and returns true if the configuration is valid
|
|
* @private
|
|
*/
|
|
private validateDiscordConfiguration(): boolean {
|
|
return !(this.isValueEmptyOrUndefined(this.discord?.botToken) || this.isValueEmptyOrUndefined(this.discord?.channelId));
|
|
}
|
|
|
|
/**
|
|
* Validates the application configuration and returns true if the configuration is valid
|
|
* @private
|
|
*/
|
|
private validateApplicationConfiguration(): boolean {
|
|
return !(
|
|
this.isValueUndefined(this.application?.serverPassword)
|
|
|| this.isValueEmptyOrUndefined(this.application?.serverStatsUrl)
|
|
|| this.isValueEmptyOrUndefined(this.application?.serverMapUrl)
|
|
|| this.isValueEmptyOrUndefined(this.application?.updateIntervalSeconds)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Validates the translation configuration and returns true if the configuration is valid
|
|
* @private
|
|
*/
|
|
private validateTranslationConfiguration(): boolean {
|
|
return !(
|
|
this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.title)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.descriptionOnline)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.descriptionOffline)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.descriptionUnknown)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titleServerName)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titleServerPassword)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titleServerTime)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titleServerMap)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titleServerMods)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titlePlayerCount)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.noPlayersOnline)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthJanuary)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthFebruary)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthMarch)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthApril)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthMay)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthJune)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthJuly)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthAugust)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthSeptember)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthOctober)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthNovember)
|
|
|| this.isValueEmptyOrUndefined(this?.translation?.common?.monthDecember)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Validates the configuration file and returns true if the configuration is valid
|
|
* @returns boolean True if the configuration is valid
|
|
*/
|
|
public isConfigurationValid(): boolean {
|
|
if(!this.validateDiscordConfiguration()) {
|
|
this.logger.error("Discord configuration is not valid. Please check your configuration file.");
|
|
return false;
|
|
} else {
|
|
this.logger.info("Discord configuration is valid.");
|
|
}
|
|
|
|
if(!this.validateApplicationConfiguration()) {
|
|
this.logger.error("Application configuration is not valid. Please check your configuration file.");
|
|
return false;
|
|
} else {
|
|
this.logger.info("Application configuration is valid.");
|
|
}
|
|
|
|
if(!this.validateTranslationConfiguration()) {
|
|
this.logger.error("Translation configuration is not valid. Please check your configuration file.");
|
|
return false;
|
|
} else {
|
|
this.logger.info("Translation configuration is valid.");
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns the configuration object
|
|
*/
|
|
public static getConfiguration(): IConfiguration {
|
|
return new Configuration();
|
|
}
|
|
} |