848
models.js
Normal file
848
models.js
Normal file
@@ -0,0 +1,848 @@
|
||||
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
|
||||
}));
|
||||
|
||||
// ===== Gmail-Discord-Zammad Bridge Models =====
|
||||
|
||||
mongoose.model('Ticket', new mongoose.Schema({
|
||||
gmailThreadId: { type: String, required: true, unique: true, index: true },
|
||||
discordThreadId: String,
|
||||
zammadTicketId: Number,
|
||||
lastSyncedZammadArticleId: 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 }
|
||||
}));
|
||||
Reference in New Issue
Block a user