849 lines
32 KiB
JavaScript
849 lines
32 KiB
JavaScript
var mongoose = require('mongoose');
|
||
|
||
mongoose.model('Host', new mongoose.Schema({
|
||
hostname: String,
|
||
ip: String,
|
||
region: String,
|
||
provider: String,
|
||
memory: String,
|
||
status: String,
|
||
ipGateway: String,
|
||
memFree: Number,
|
||
cpuUsage: Number,
|
||
diskFree: Number,
|
||
lastSeen: { type: Number, default: Date.now() }, // Add this
|
||
lostInUse: { type: [Number], default: [] },
|
||
statsHistory: [{
|
||
timestamp: Number,
|
||
memFree: Number,
|
||
cpuUsage: Number,
|
||
diskFree: Number
|
||
}]
|
||
}));
|
||
|
||
// Update for each new game
|
||
mongoose.model('User', new mongoose.Schema({
|
||
email: String,
|
||
discordID: {type: String, default: ""},
|
||
customerId: String,
|
||
usedPaypal: {type: Boolean, default: false},
|
||
passwordHash: String,
|
||
resetPasswordToken: String,
|
||
resetPasswordExpires: Date,
|
||
sessionToken: {type: String, default: null},
|
||
indifferentBroccoli: {type: Boolean, default: false},
|
||
paymentLink: {type: String, default: null},
|
||
palpocalypseEligible: {type: Boolean, default: false},
|
||
palpocalypseClaimed: {type: Boolean, default: false},
|
||
//Admin
|
||
machineStats: [{
|
||
name: String,
|
||
memoryFree: Number,
|
||
cpuUsagePercentage: Number,
|
||
diskFree: Number
|
||
}],
|
||
|
||
//Subusers
|
||
subUserServers: [{
|
||
linuxUsername: String,
|
||
permissions: { type: Object, default: {} }
|
||
}],
|
||
|
||
subusers: [{
|
||
email: String,
|
||
inviteToken: String,
|
||
inviteExpires: Date,
|
||
}],
|
||
|
||
// Activity log
|
||
activities: [{
|
||
serverId: mongoose.Schema.Types.ObjectId,
|
||
action: String,
|
||
timestamp: { type: Number, default: Date.now }
|
||
}],
|
||
|
||
serverOrder: [String],
|
||
|
||
servers: [{
|
||
// Public server page info
|
||
tags: String,
|
||
thumbnailImageLink: String,
|
||
links: [String],
|
||
|
||
// Server settings
|
||
status: {type: String, default: "Setting Up"},
|
||
isTrial: {type: Boolean, default: false},
|
||
trialExpiry: {type: Date, default: null},
|
||
sentExpiryNotification: {type: Boolean, default: false},
|
||
sentTrialEndedNotification: {type: Boolean, default: false},
|
||
sentWelcomeFeedbackRequest: {type: Boolean, default: false},
|
||
sentUpcomingCancellationNotice : {type: Boolean, default: false},
|
||
linuxUsername: String,
|
||
linuxPassword: String, //todo: store hash
|
||
telnetPassword: String,
|
||
controlPanelPassword: String,
|
||
subscriptionId: {type:String,default:null},
|
||
subscriptionId_PayPal: {type:String,default:null},
|
||
subscriptionId_PayPalFrozen: {type:String,default:null},
|
||
subscriptionActive: {type: Boolean, default: false},
|
||
subscriptionStatus: {type: String, default: null},
|
||
subscriptionScheduledFreeze: {type: String, default: null},
|
||
subscriptionScheduledFreezeJobId: {type: String, default: null},
|
||
subscriptionScheduledCancel: {type: String, default: null},
|
||
subscriptionScheduledCancelJobId: {type: String, default: null},
|
||
ip: String,
|
||
ipGateway: {type: String, default: null},
|
||
serverPort: {type: Number, default: null},
|
||
serverPortGateway: {type: Number, default: null},
|
||
region: {type: String, default: "na-east"},
|
||
game: String,
|
||
discordAdmins: {type: [String], default: []},
|
||
// Generic game settings
|
||
serverName: String,
|
||
serverPassword: String, //todo: store hash?
|
||
gameWorld: String, // pre-Alpha 17
|
||
serverDescription: String,
|
||
serverMaxPlayerCount: Number,
|
||
worldName: String,
|
||
|
||
// StarRupture settings
|
||
sessionName: {type: String, default: "IndifferentWorld"},
|
||
saveGameInterval: {type: Number, default: 300},
|
||
saveGameName: {type: String, default: "AutoSave0.sav"},
|
||
loadSavedGame: {type: Boolean, default: true},
|
||
|
||
scheduledRestarts: {
|
||
type: [{
|
||
command: {type: String, default: "restart"},
|
||
rconCommand: String,
|
||
minute: Number,
|
||
hour: Number,
|
||
day: Number,
|
||
intervalValue: Number,
|
||
intervalUnit: String,
|
||
intervalMinute: Number
|
||
}],
|
||
default: []
|
||
},
|
||
admins: [{
|
||
steamId: String,
|
||
permissionLevel: Number
|
||
}],
|
||
backups: [{
|
||
timestamp: Number
|
||
}],
|
||
ActiveMods: [{
|
||
modId: String
|
||
}],
|
||
playersOnline: [{
|
||
name: String,
|
||
raw: {
|
||
score: Number,
|
||
time: Number
|
||
}
|
||
}],
|
||
|
||
//-----7 Day to Die-----//
|
||
serverIsPublic: String, // pre-Alpha 17
|
||
adminPassword: String, //todo: store hash?,
|
||
serverWebsiteUrl: String,
|
||
gameName: String,
|
||
gameDifficulty: Number,
|
||
gameMode: String, // don't make the GameModeSurvival or else anyone can place blocks anywhere
|
||
zombiesRun: Number,
|
||
buildCreate: String,
|
||
dayNightLength: Number,
|
||
dayLightLength: Number,
|
||
playerKillingMode: Number,
|
||
persistentPlayerProfiles: String,
|
||
playerSafeZoneLevel: Number,
|
||
playerSafeZoneHours: Number,
|
||
deathPenalty: Number,
|
||
dropOnDeath: Number,
|
||
dropOnQuit: Number,
|
||
bloodMoonEnemyCount: Number,
|
||
enemySpawnMode: String,
|
||
enemyDifficulty: Number,
|
||
blockDurabilityModifier: Number,
|
||
lootAbundance: Number,
|
||
lootRespawnDays: Number,
|
||
landClaimSize: Number,
|
||
landClaimDeadZone: Number,
|
||
landClaimExpiryTime: Number,
|
||
landClaimDecayMode: Number,
|
||
landClaimOnlineDurabilityModifier: Number,
|
||
landClaimOfflineDurabilityModifier: Number,
|
||
airDropFrequency: Number,
|
||
airDropMarker: String,
|
||
maxSpawnedZombies: Number,
|
||
maxSpawnedAnimals: Number,
|
||
eacEnabled: String,
|
||
maxUncoveredMapChunksPerPlayer: Number,
|
||
bedrollDeadZoneSize: Number,
|
||
questProgressionDailyLimit: Number,
|
||
maxChunkAge: Number,
|
||
serverAllowCrossplay: {type: String, default: "false"},
|
||
biomeProgression: {type: String, default: "true"},
|
||
stormFreq: {type: Number, default: 100},
|
||
allowSpawnNearFriend: {type: Number, default: 2},
|
||
ignoreEOSSanctions: {type: String, default: "false"},
|
||
playerCount: Number,
|
||
jarRefund: {type: Number, default: 0},
|
||
|
||
// Alpha >= 17 only
|
||
version: Number,
|
||
serverVisibility: Number,
|
||
serverReservedSlots: Number,
|
||
serverReservedSlotsPermission: Number,
|
||
serverDisabledNetworkProtocols: String,
|
||
worldGenSeed: String,
|
||
worldGenSize: Number, //todo: figure out max
|
||
telnetFailedLoginLimit: Number, // todo: figure out max or don't use
|
||
telnetFailedLoginsBlocktime: Number, // todo: figure out max or don't use
|
||
terminalWindowEnabled: Boolean, //pre Alpha 17.2 default was false
|
||
partySharedKillRange: Number,
|
||
hideCommandExecutionLog: Number,
|
||
serverLoginConfirmationText: String,
|
||
zombieFeralSense: Number,
|
||
zombieMove: Number,
|
||
zombieMoveNight: Number,
|
||
zombieFeralMove: Number,
|
||
zombieBMMove: Number,
|
||
// Alpha >= 17.2 only
|
||
bloodMoonFrequency: Number,
|
||
bloodMoonRange: Number,
|
||
bloodMoonWarning: Number,
|
||
xpMultiplier: Number,
|
||
blockDamagePlayer: Number,
|
||
blockDamageAI: Number,
|
||
blockDamageAIBM: Number,
|
||
landClaimCount: Number,
|
||
// Alpha >= 18 only
|
||
serverMaxAllowedViewDistance: Number,
|
||
serverMaxWorldTransferSpeedKiBs: Number,
|
||
bedrollExpiryTime: Number,
|
||
|
||
sevenDaysRegion: String,
|
||
language: String,
|
||
|
||
//-----Abiotic Factor-----//
|
||
|
||
//-----ARK-----//
|
||
BETA: {type: String, default: "public"},
|
||
AdminLogging: Boolean,
|
||
AllowCaveBuildingPvE: Boolean,
|
||
AllowFlyerCarryPvE: Boolean,
|
||
AllowHideDamageSourceFromLogs: Boolean,
|
||
AllowSharedConnections: Boolean,
|
||
AllowTekSuitPowersInGenesis: Boolean,
|
||
allowThirdPersonPlayer: Boolean,
|
||
alwaysNotifyPlayerJoined: Boolean,
|
||
alwaysNotifyPlayerLeft: Boolean,
|
||
AutoSavePeriodMinutes: Number,
|
||
bAllowPlatformSaddleMultiFloors: Boolean,
|
||
BanListURL: String,
|
||
bForceCanRideFliers: Boolean,
|
||
ClampResourceHarvestDamage: Boolean,
|
||
Cluster: [{
|
||
serverName: String,
|
||
gameWorld: String,
|
||
clusterId: String,
|
||
serverId: String,
|
||
serverPort: Number,
|
||
serverMaxPlayerCount: Number
|
||
}],
|
||
CrossARKAllowForeignDinoDownloads: Boolean,
|
||
Crossplay: {type: Boolean, default: false},
|
||
NoBattlEye: {type: Boolean, default: false},
|
||
ForceAllowCaveFlyers: {type: Boolean, default: false},
|
||
ShowFloatingDamageText: {type: Boolean, default: false},
|
||
CryopodNerfDamageMult: Number,
|
||
CryopodNerfDuration: Number,
|
||
CryopodNerfIncomingDamageMultPercent: Number,
|
||
CustomDynamicConfigUrl: String,
|
||
DayCycleSpeedScale: Number,
|
||
DayTimeSpeedScale: Number,
|
||
DifficultyOffset: Number,
|
||
DinoCharacterFoodDrainMultiplier: Number,
|
||
DinoCharacterHealthRecoveryMultiplier: Number,
|
||
DinoCharacterStaminaDrainMultiplier: Number,
|
||
DinoCountMultiplier: Number,
|
||
DinoDamageMultiplier: Number,
|
||
DinoResistanceMultiplier: Number,
|
||
DisableDinoDecayPvE: Boolean,
|
||
DisablePvEGamma: Boolean,
|
||
DisableStructureDecayPvE: Boolean,
|
||
DisableWeatherFog: Boolean,
|
||
EnableCryopodNerf: Boolean,
|
||
EnableCryoSicknessPVE: Boolean,
|
||
EnablePvPGamma: Boolean,
|
||
GameIniSettings: [{
|
||
text: String
|
||
}],
|
||
globalVoiceChat: Boolean,
|
||
HarvestAmountMultiplier: Number,
|
||
HarvestHealthMultiplier: Number,
|
||
ItemStackSizeMultiplier: Number,
|
||
MaxGateFrameOnSaddles: Number,
|
||
MaxPlatformSaddleStructureLimit: Number,
|
||
MaxPlayers: Number,
|
||
MaxStructuresInRange: Number,
|
||
MaxTamedDinos: Number,
|
||
MaxTributeDinos: Number,
|
||
MaxTributeItems: Number,
|
||
NightTimeSpeedScale: Number,
|
||
noTributeDownloads: Boolean,
|
||
PerPlatformMaxStructuresMultiplier: Number,
|
||
PlatformSaddleBuildAreaBoundsMultiplier: Number,
|
||
PlayerCharacterFoodDrainMultiplier: Number,
|
||
PlayerCharacterHealthRecoveryMultiplier: Number,
|
||
PlayerCharacterStaminaDrainMultiplier: Number,
|
||
PlayerCharacterWaterDrainMultiplier: Number,
|
||
PlayerDamageMultiplier: Number,
|
||
PlayerResistanceMultiplier: Number,
|
||
proximityChat: Boolean,
|
||
PvEDinoDecayPeriodMultiplier: Number,
|
||
PvEStructureDecayDestructionPeriod: Number,
|
||
PvEStructureDecayPeriodMultiplier: Number,
|
||
PvPStructureDecay: Boolean,
|
||
RandomSupplyCratePoints: Boolean,
|
||
ResourcesRespawnPeriodMultiplier: Number,
|
||
ServerAdminPassword: String,
|
||
serverForceNoHud: Boolean,
|
||
serverHardcore: Boolean,
|
||
serverPVE: Boolean,
|
||
ShowMapPlayerLocation: Boolean,
|
||
SpectatorPassword: String,
|
||
StructureDamageMultiplier: Number,
|
||
StructureResistanceMultiplier: Number,
|
||
TamingSpeedMultiplier: Number,
|
||
TheMaxStructuresInRange: Number,
|
||
TribeNameChangeCooldown: Number,
|
||
TributeCharacterExpirationSeconds: Number,
|
||
TributeDinoExpirationSeconds: Number,
|
||
TributeItemExpirationSeconds: Number,
|
||
XPMultiplier: Number,
|
||
|
||
gameIni: String,
|
||
|
||
//-----Conan Exiles-----//
|
||
modList: String,
|
||
|
||
//-----Core Keeper-----//
|
||
gameID: String,
|
||
worldSeed: {type: Number, default: 0},
|
||
worldIndex: {type: Number, default: 0},
|
||
worldMode: {type: Number, default: 0},
|
||
season: {type: Number, default: -1},
|
||
corekeeperMods: {type: String, default: ""},
|
||
|
||
//-----Counter Strike 2 (CS2)-----//
|
||
|
||
//-----DayZ-----//
|
||
enableWhitelist: { type: Boolean, default: false },
|
||
disable3rdPerson: { type: Boolean, default: false },
|
||
disableCrosshair: { type: Boolean, default: false },
|
||
disablePersonalLight: { type: Boolean, default: false },
|
||
disableVoicechat: { type: Boolean, default: false },
|
||
modList: {type: String, default: ""},
|
||
|
||
//-----ECO-----//
|
||
|
||
//-----Enshrouded-----//
|
||
|
||
//-----Factorio-----//
|
||
spaceAgeEnabled: {type: Boolean, default: true},
|
||
autoUpdateMods: {type: Boolean, default: false},
|
||
visibilityPublic: {type: Boolean, default: true},
|
||
factorioUsername: {type: String, default: ""},
|
||
factorioPassword: {type: String, default: ""},
|
||
factorioToken: {type: String, default: ""},
|
||
requireUserVerification: {type: Boolean, default: true},
|
||
allowCommands: {type: String, default: "admins-only"},
|
||
afkAutokickInterval: {type: Number, default: 0},
|
||
autoPause: {type: Boolean, default: true},
|
||
autoPauseWhenPlayersConnect: {type: Boolean, default: false},
|
||
onlyAdminsCanPause: {type: Boolean, default: true},
|
||
|
||
//-----FiveM-----//
|
||
licenseKey: {type: String, default: ""},
|
||
locale: String,
|
||
|
||
//-----The Front-----//
|
||
extraArgs: String,
|
||
|
||
//-----Garry's Mod-----//
|
||
workshopCollection: String,
|
||
serverCheats: Boolean,
|
||
customParameters: String,
|
||
GLST: String,
|
||
|
||
//-----Hytale-----//
|
||
viewDistance: {type: Number, default: 12},
|
||
MaxViewRadius: {type: Number, default: 32},
|
||
serverMOTD: {type: String, default: ""},
|
||
defaultWorld: {type: String, default: "default"},
|
||
selectedWorld: {type: String, default: "default"},
|
||
IsPvpEnabled: {type: Boolean, default: false},
|
||
IsFallDamageEnabled: {type: Boolean, default: true},
|
||
IsGameTimePaused: {type: Boolean, default: false},
|
||
IsSpawningNPC: {type: Boolean, default: true},
|
||
IsSpawnMarkersEnabled: {type: Boolean, default: true},
|
||
IsAllNPCFrozen: {type: Boolean, default: false},
|
||
IsCompassUpdating: {type: Boolean, default: true},
|
||
IsObjectiveMarkersEnabled: {type: Boolean, default: true},
|
||
itemsLossMode: {type: String, default: "Configured"},
|
||
itemsAmountLossPercentage: {type: Number, default: 10},
|
||
itemsDurabilityLossPercentage: {type: Number, default: 10},
|
||
gameMode: {type: String, default: "Adventure"},
|
||
hytaleOAuthUrl: String,
|
||
hytaleAuthLinkClicked: {type: Boolean, default: false},
|
||
|
||
//-----Palworld-----//
|
||
AutoResetGuildTimeNoOnlinePlayers: {type: Number, default: 72},
|
||
bActiveUNKO: {type: Boolean, default: false},
|
||
BanListURL: {type: String, default: "https://api.palworldgame.com/api/banlist.txt"},
|
||
BaseCampMaxNum: {type: Number, default: 128},
|
||
BaseCampWorkerMaxNum: {type: Number, default: 15},
|
||
bAutoResetGuildNoOnlinePlayers: {type: Boolean, default: false},
|
||
bCanPickupOtherGuildDeathPenaltyDrop: {type: Boolean, default: false},
|
||
bEnableAimAssistKeyboard: {type: Boolean, default: false},
|
||
bEnableAimAssistPad: {type: Boolean, default: true},
|
||
bEnableDefenseOtherGuildPlayer: {type: Boolean, default: false},
|
||
bEnableFastTravel: {type: Boolean, default: true},
|
||
bEnableFriendlyFire: {type: Boolean, default: false},
|
||
bEnableInvaderEnemy: {type: Boolean, default: true},
|
||
bEnableNonLoginPenalty: {type: Boolean, default: true},
|
||
bEnablePlayerToPlayerDamage: {type: Boolean, default: false},
|
||
bExistPlayerAfterLogout: {type: Boolean, default: false},
|
||
bIsMultiplay: {type: Boolean, default: false},
|
||
bIsPvP: {type: Boolean, default: false},
|
||
bIsStartLocationSelectByMap: {type: Boolean, default: true},
|
||
BuildObjectDamageRate: {type: Number, default: 1},
|
||
BuildObjectDeteriorationDamageRate: {type: Number, default: 1},
|
||
bUseAuth: {type: Boolean, default: true},
|
||
CollectionDropRate: {type: Number, default: 1},
|
||
CollectionObjectHpRate: {type: Number, default: 1},
|
||
CollectionObjectRespawnSpeedRate: {type: Number, default: 1},
|
||
CoopPlayerMaxNum: {type: Number, default: 4},
|
||
DayTimeSpeedRate: {type: Number, default: 1},
|
||
DeathPenalty: {type: String, default: "All"},
|
||
Difficulty: {type: String, default: "None"},
|
||
DropItemAliveMaxHours: {type: Number, default: 1},
|
||
DropItemMaxNum: {type: Number, default: 3000},
|
||
DropItemMaxNum_UNKO: {type: Number, default: 100},
|
||
EnemyDropItemRate: {type: Number, default: 1},
|
||
ExpRate: {type: Number, default: 1},
|
||
GuildPlayerMaxNum: {type: Number, default: 20},
|
||
NightTimeSpeedRate: {type: Number, default: 1},
|
||
PalAutoHPRegeneRate: {type: Number, default: 1},
|
||
PalAutoHpRegeneRateInSleep: {type: Number, default: 1},
|
||
PalCaptureRate: {type: Number, default: 1},
|
||
PalDamageRateAttack: {type: Number, default: 1},
|
||
PalDamageRateDefense: {type: Number, default: 1},
|
||
PalEggDefaultHatchingTime: {type: Number, default: 72},
|
||
PalSpawnNumRate: {type: Number, default: 1},
|
||
PalStaminaDecreaceRate: {type: Number, default: 1},
|
||
PalStomachDecreaceRate: {type: Number, default: 1},
|
||
PlayerAutoHPRegeneRate: {type: Number, default: 1},
|
||
PlayerAutoHpRegeneRateInSleep: {type: Number, default: 1},
|
||
PlayerDamageRateAttack: {type: Number, default: 1},
|
||
PlayerDamageRateDefense: {type: Number, default: 1},
|
||
PlayerStaminaDecreaceRate: {type: Number, default: 1},
|
||
PlayerStomachDecreaceRate: {type: Number, default: 1},
|
||
palRegion: {type: String, default: ""},
|
||
WorkSpeedRate: {type: Number, default: 1},
|
||
Community: {type: Boolean, default: false},
|
||
BaseCampMaxNumInGuild : {type: Number, default: 3},
|
||
ConnectPlatform: {type: String, default: "Steam"},
|
||
SupplyDropSpan : {type: Number, default: 180},
|
||
palworldVersion: {type: String, default: "Latest"},
|
||
RandomizerType: {type: String, default: "None"},
|
||
RandomizerSeed: {type: String, default: ""},
|
||
ChatPostLimitPerMinute: {type: Number, default: 10},
|
||
EnablePredatorBossPal: {type: Boolean, default: true},
|
||
BuildObjectHpRate: {type: Number, default: 1},
|
||
Hardcore: {type: Boolean, default: false},
|
||
CharacterRecreateInHardcore: {type: Boolean, default: false},
|
||
PalLost: {type: Boolean, default: false},
|
||
BuildAreaLimit: {type: Boolean, default: false},
|
||
ItemWeightRate: {type: Number, default: 1},
|
||
MaxBuildingLimitNum: {type: Number, default: 0},
|
||
CrossplayPlatforms: {type: String, default: "(Steam,Xbox,PS5,Mac)"},
|
||
AllowGlobalPalboxExport: {type: Boolean, default: true},
|
||
AllowGlobalPalboxImport: {type: Boolean, default: false},
|
||
randomPalLevels: {type: Boolean, default: false},
|
||
equipmentDurabilityDamageRate: {type: Number, default: 1},
|
||
itemContainerForceMarkDirtyInterval: {type: Number, default: 1},
|
||
itemCorruptionMultiplier: {type: Number, default: 1},
|
||
|
||
//-----Project Zomboid-----//
|
||
autoRestartEnabled: {type: Boolean, default: false},
|
||
build42Unstable: {type: Boolean, default: false},
|
||
PZVersion: {type: String, default: "41.78.16"},
|
||
|
||
//-----Rust-----//
|
||
mapSize: Number,
|
||
maxMapSize: Number,
|
||
mapSeed: Number,
|
||
oxideEnabled: Boolean,
|
||
|
||
//-----Valheim-----//
|
||
valheimPlusEnabled: Boolean,
|
||
valheimPlusFork: {type: String, default: "valheimPlus"},
|
||
|
||
//-----Satisfactory-----//
|
||
serverVersion: {type: String, default: "public"},
|
||
satisfactoryAdminPassword: {type: String, default: ''},
|
||
satisfactoryHealth: {type: String, default: ''},
|
||
satisfactoryActiveSession: {type: String, default: ''},
|
||
satisfactoryTechTier: {type: Number, default: 0},
|
||
satisfactoryTickRate: {type: Number, default: 0},
|
||
satisfactoryGameDuration: {type: Number, default: 0},
|
||
satisfactoryActiveSchematic: {type: String, default: ''},
|
||
satisfactoryIsGamePaused: {type: Boolean, default: false},
|
||
|
||
//-----Sons of the Forest-----//
|
||
|
||
//-----Soulmask-----//
|
||
pvMode: {type: String, default: "pvp"},
|
||
|
||
//-----Terraria-----//
|
||
//----Already made/Non-config.json----//
|
||
//gameDifficulty: Number - 7days
|
||
//WorldGenSize: Number - 7days
|
||
MaxSlots: Number, //uses serverMaxPlayerCount
|
||
MOTD: String,
|
||
secure: Number,
|
||
//----Booleans----//
|
||
UseServerName: Boolean,
|
||
DebugLogs: Boolean,
|
||
DisableLoginBeforeJoin: Boolean,
|
||
IgnoreChestStacksOnLoad: Boolean,
|
||
Autosave: Boolean,
|
||
AnnounceSave: Boolean,
|
||
SaveWorldOnCrash: Boolean,
|
||
SaveWorldOnLastPlayerExit: Boolean,
|
||
InfiniteInvasion: Boolean,
|
||
SpawnProtection: Boolean,
|
||
RangeChecks: Boolean,
|
||
HardcoreOnly: Boolean,
|
||
MediumCoreOnly: Boolean,
|
||
DisableBuild: Boolean,
|
||
DisableHardmode: Boolean,
|
||
DisableDungeonGuardian: Boolean,
|
||
DisableClownBombs: Boolean,
|
||
DisableSnowBalls: Boolean,
|
||
DisableTombstones: Boolean,
|
||
DisableInvisPvP: Boolean,
|
||
RegionProtectChests: Boolean,
|
||
RegionProtectGemLocks: Boolean,
|
||
IgnoreProjUpdate: Boolean,
|
||
IgnoreProjKill: Boolean,
|
||
AllowCutTilesAndBreakables: Boolean,
|
||
AllowIce: Boolean,
|
||
AllowCrimsonCreep: Boolean,
|
||
AllowCorruptionCreep: Boolean,
|
||
AllowHallowCreep: Boolean,
|
||
PreventBannedItemSpawn: Boolean,
|
||
PreventDeadModification: Boolean,
|
||
PreventInvalidPlaceStyle: Boolean,
|
||
ForceXmas: Boolean,
|
||
ForceHalloween: Boolean,
|
||
AllowAllowedGroupsToSpawnBannedItems: Boolean,
|
||
AnonymousBossInvasions: Boolean,
|
||
RememberLeavePos: Boolean,
|
||
KickOnMediumcoreDeath: Boolean,
|
||
BanOnMediumCoreDeath: Boolean,
|
||
KickOnHardcoreDeath: Boolean,
|
||
BanOnHardcoreDeath: Boolean,
|
||
EnableWhitelist: Boolean,
|
||
EnableIPBans: Boolean,
|
||
EnableUUIDBans: Boolean,
|
||
EnableBanOnUsernames: Boolean,
|
||
KickProxyUsers: Boolean,
|
||
RequireLogin: Boolean,
|
||
AllowLoginAnyUsername: Boolean,
|
||
AllowRegisterAnyUsername: Boolean,
|
||
DisableUUIDLogin: Boolean,
|
||
KickEmptyUUID: Boolean,
|
||
KickOnTilePaintThresholdBroken: Boolean,
|
||
KickOnTileLiquidThresholdBroken: Boolean,
|
||
KickOnTileKillThresholdBroken: Boolean,
|
||
KickOnTilePlaceThresholdBroken: Boolean,
|
||
KickOnDamageThresholdBroken: Boolean,
|
||
KickOnProjectileThresholdBroken: Boolean,
|
||
KickOnHealOtherThresholdBroken: Boolean,
|
||
ProjIgnoreShrapnel: Boolean,
|
||
DisableSpewLogs: Boolean,
|
||
DisableSecondUpdateLogs: Boolean,
|
||
EnableGeoIP: Boolean,
|
||
DisplayIPToAdmins: Boolean,
|
||
EnableChatAboveHeads: Boolean,
|
||
//----Numbers----//
|
||
ReservedSlots: Number,
|
||
InvasionMultiplier: Number,
|
||
DefaultSpawnRate: Number,
|
||
DefaultMaximumSpawns: Number,
|
||
SpawnProtectionRadius: Number,
|
||
MaxRangeForDisabled: Number,
|
||
StatueSpawn200: Number,
|
||
StatueSpawn600: Number,
|
||
StatueSpawnWorld: Number,
|
||
RespawnSeconds: Number,
|
||
RespawnBossSeconds: Number,
|
||
MaxHP: Number,
|
||
MaxMP: Number,
|
||
BombExplosionRadius: Number,
|
||
MaximumLoginAttempts: Number,
|
||
MinimumPasswordLength: Number,
|
||
BCryptWorkFactor: Number,
|
||
TilePaintThreshold: Number,
|
||
TileKillThreshold: Number,
|
||
TilePlaceThreshold: Number,
|
||
TileLiquidThreshold: Number,
|
||
MaxDamage: Number,
|
||
MaxProjDamage: Number,
|
||
ProjectileThreshold: Number,
|
||
HealOtherThreshold: Number,
|
||
//----Strings----//
|
||
PvPMode: String,
|
||
ForceTime: String,
|
||
DefaultRegistrationGroupName: String,
|
||
DefaultGuestGroupName: String,
|
||
MediumcoreKickReason: String,
|
||
MediumcoreBanReason: String,
|
||
HardcoreKickReason: String,
|
||
HardcoreBanReason: String,
|
||
WhitelistKickReason: String,
|
||
ServerFullReason: String,
|
||
ServerFullNoReservedReason: String,
|
||
HashAlgorithm: String,
|
||
CommandSpecifier: String,
|
||
CommandSilentSpecifier: String,
|
||
SuperAdminChatPrefix: String,
|
||
SuperAdminChatSuffix: String,
|
||
ChatFormat: String,
|
||
ChatAboveHeadsFormat: String,
|
||
|
||
//-----Minecraft-----//
|
||
saveName: String,
|
||
enableCommandBlock: Boolean,
|
||
allowFlight: Boolean,
|
||
iconLink: String,
|
||
resourcePackLink: String,
|
||
resourcePackLinkSHA1: String,
|
||
requireResourcePack: Boolean,
|
||
resourcePackPrompt: String,
|
||
enforceWhitelist: Boolean,
|
||
maxBuildHeight: Number,
|
||
allowNether: Boolean,
|
||
generateStructures: Boolean,
|
||
spawnAnimals: Boolean,
|
||
spawnNPCS: Boolean,
|
||
spawnMonsters: Boolean,
|
||
forceGamemode: Boolean,
|
||
enableHardcore: Boolean,
|
||
enablePvP: Boolean,
|
||
playerIdleTimeout: Number,
|
||
serverMaxAllowedViewDistance: Number,
|
||
levelType: String,
|
||
generatorSettings: String,
|
||
enableRcon: Boolean,
|
||
rconPassword: String,
|
||
broadcastRconToOps: Boolean,
|
||
broadcastConsoleToOps: Boolean,
|
||
opPermissionLevel: Number,
|
||
functionPermissionLevel: Number,
|
||
serverType: {type: String, default: "VANILLA"},
|
||
serverTypeVersion: {type: String, default: ""},
|
||
gameDifficultyString: String,
|
||
maxPlayers: Number,
|
||
modpackurl: String,
|
||
modpackName: String,
|
||
modpackVersion: String,
|
||
mcVersion: {type: String, default: "LATEST"},
|
||
javaVersion: {type: String, default: "latest"},
|
||
maxTickTime: Number,
|
||
spawnProtectionRadius: Number,
|
||
|
||
selectedMods: [{
|
||
// For Minecraft
|
||
name: String,
|
||
slug: String,
|
||
// For Project Zomboid
|
||
title: String,
|
||
workshopId: String,
|
||
modId: String,
|
||
mapFolder: String,
|
||
}],
|
||
|
||
//-----VRising-----//
|
||
vrisingBepInExEnabled: Boolean,
|
||
|
||
//-----Icarus-----//
|
||
shutdownIfNotJoinedFor: Number,
|
||
shutdownIfEmptyFor: Number,
|
||
|
||
//-----Vintage Story-----//
|
||
serverLanguage: String,
|
||
serverWelcomeMessage: String,
|
||
whitelistMode: Number,
|
||
allowPvp: Boolean,
|
||
verifyPlayerAuth: Boolean,
|
||
allowFireSpread: Boolean,
|
||
allowFallingBlocks: Boolean,
|
||
passTimeWhenEmpty: Boolean,
|
||
clientConnectionTimeout: Number,
|
||
maxChunkRadius: Number,
|
||
chatRateLimit: Number,
|
||
maxOwnedGroupChannelsPerUser: Number,
|
||
seed: String,
|
||
allowCreativeMode: Boolean,
|
||
playStyle: String,
|
||
worldType: String,
|
||
mapSizeX: Number,
|
||
mapSizeY: Number,
|
||
mapSizeZ: Number,
|
||
gameMode: String,
|
||
startingClimate: String,
|
||
spawnRadius: Number,
|
||
graceTimer: Number,
|
||
deathPunishment: String,
|
||
droppedItemsTimer: Number,
|
||
seasons: String,
|
||
playerlives: Number,
|
||
lungCapacity: Number,
|
||
daysPerMonth: Number,
|
||
harshWinters: Boolean,
|
||
blockGravity: String,
|
||
caveIns: String,
|
||
allowUndergroundFarming: Boolean,
|
||
noLiquidSourceTransport: Boolean,
|
||
bodyTemperatureResistance: Number,
|
||
creatureHostility: String,
|
||
creatureStrength: Number,
|
||
creatureSwimSpeed: Number,
|
||
playerHealthPoints: Number,
|
||
playerHungerSpeed: Number,
|
||
playerHealthRegenSpeed: Number,
|
||
playerMoveSpeed: Number,
|
||
foodSpoilSpeed: Number,
|
||
saplingGrowthRate: Number,
|
||
toolDurability: Number,
|
||
toolMiningSpeed: Number,
|
||
propickNodeSearchRadius: Number,
|
||
microblockChiseling: String,
|
||
allowCoordinateHud: Boolean,
|
||
allowMap: Boolean,
|
||
colorAccurateWorldmap: Boolean,
|
||
loreContent: Boolean,
|
||
clutterObtainable: String,
|
||
lightningFires: Boolean,
|
||
allowTimeswitch: Boolean,
|
||
temporalStability: Boolean,
|
||
temporalStorms: String,
|
||
tempstormDurationMul: Number,
|
||
temporalRifts: String,
|
||
temporalGearRespawnUses: Number,
|
||
temporalStormSleeping: Number,
|
||
worldClimate: String,
|
||
landcover: Number,
|
||
oceanscale: Number,
|
||
upheavelCommonness: Number,
|
||
geologicActivity: Number,
|
||
landformScale: Number,
|
||
worldWidth: Number,
|
||
worldLength: Number,
|
||
worldEdge: String,
|
||
polarEquatorDistance: Number,
|
||
globalTemperature: Number,
|
||
globalPrecipitation: Number,
|
||
globalForestation: Number,
|
||
globalDepositSpawnRate: Number,
|
||
surfaceCopperDeposits: Number,
|
||
surfaceTinDeposits: Number,
|
||
snowAccum: Boolean,
|
||
allowLandClaiming: Boolean,
|
||
classExclusiveRecipes: Boolean,
|
||
auctionHouse: Boolean,
|
||
vsVersion: String
|
||
}]
|
||
}));
|
||
|
||
mongoose.model('DashboardMetrics', new mongoose.Schema({
|
||
timestamp: { type: Date, default: Date.now, expires: 31536000 },
|
||
activeUsers: Number,
|
||
workerId: String
|
||
}));
|
||
|
||
mongoose.model('ErrorLog', new mongoose.Schema({
|
||
timestamp: { type: Date, default: Date.now, expires: 2592000 }, // 30 days
|
||
statusCode: Number,
|
||
message: String,
|
||
stack: String,
|
||
url: String,
|
||
method: String,
|
||
userId: String,
|
||
userEmail: String,
|
||
authenticated: Boolean,
|
||
sessionValid: Boolean
|
||
}));
|
||
|
||
// ===== Broccolini Bot Models =====
|
||
|
||
mongoose.model('Ticket', new mongoose.Schema({
|
||
gmailThreadId: { type: String, required: true, unique: true, index: true },
|
||
discordThreadId: String,
|
||
broccoliniTicketId: Number,
|
||
lastSyncedBroccoliniArticleId: Number, // last agent reply we pushed to Discord/Gmail
|
||
senderEmail: { type: String, required: true },
|
||
subject: String,
|
||
createdAt: { type: Date, default: Date.now },
|
||
status: { type: String, default: 'open', enum: ['open', 'closed'] },
|
||
transcriptMessageId: String,
|
||
claimedBy: String, // Discord user ID or display name
|
||
escalated: { type: Boolean, default: false },
|
||
escalationTier: { type: Number, default: 0 }, // 0 = none, 1 = tier 2, 2 = tier 3
|
||
ticketNumber: Number,
|
||
renameCount: { type: Number, default: 0 },
|
||
renameWindowStart: Date,
|
||
priority: { type: String, default: 'normal', enum: ['low', 'normal', 'medium', 'high'] },
|
||
ticketTag: String, // e.g. server-down, billing – used for channel name prefix (after priority emoji)
|
||
lastActivity: Date,
|
||
reminderSent: { type: Boolean, default: false },
|
||
welcomeMessageId: String
|
||
}));
|
||
|
||
mongoose.model('TicketCounter', new mongoose.Schema({
|
||
senderLocal: { type: String, required: true, unique: true },
|
||
counter: { type: Number, default: 1 }
|
||
}));
|
||
|
||
mongoose.model('Transcript', new mongoose.Schema({
|
||
gmailThreadId: { type: String, required: true },
|
||
transcriptMessageId: String,
|
||
createdAt: { type: Date, default: Date.now }
|
||
}));
|
||
|
||
mongoose.model('Tag', new mongoose.Schema({
|
||
name: { type: String, required: true, unique: true },
|
||
content: { type: String, required: true },
|
||
createdAt: { type: Date, default: Date.now },
|
||
createdBy: String,
|
||
useCount: { type: Number, default: 0 }
|
||
}));
|
||
|
||
mongoose.model('CloseRequest', new mongoose.Schema({
|
||
ticketId: { type: String, required: true, unique: true },
|
||
requestedBy: { type: String, required: true },
|
||
reason: String,
|
||
createdAt: { type: Date, required: true }
|
||
}));
|
||
|
||
mongoose.model('GuildSettings', new mongoose.Schema({
|
||
guildId: { type: String, required: true, unique: true },
|
||
emailRouting: { type: String, enum: ['thread', 'category'], default: 'category' },
|
||
updatedAt: { type: Date, default: Date.now }
|
||
}));
|