- delete services/{patternChecker,patternStore,surgeChecker,chatAlertChecker,staffNotifications,staffChannel,notificationRegistry,notificationEnabled,staffPresence}.js
- remove /notification, /staffnotification, /tag, /priority
- /escalate: drop action param, always unclaim
- purge PATTERN_*, SURGE_*, CHAT_ALERT_*, STAFF_* env vars from config + .env.example
- drop StaffNotification model
- ~2500 LOC removed
- settings-site /internal/notifications/* endpoints gone (UI will 404 until trimmed)
875 lines
32 KiB
JavaScript
875 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 },
|
|
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 =====
|
|
|
|
const ticketSchema = new mongoose.Schema({
|
|
gmailThreadId: { type: String, required: true, unique: true, index: true },
|
|
discordThreadId: String,
|
|
broccoliniTicketId: Number,
|
|
lastSyncedBroccoliniArticleId: Number,
|
|
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,
|
|
escalated: { type: Boolean, default: false },
|
|
escalationTier: { type: Number, default: 0 },
|
|
ticketNumber: Number,
|
|
renameCount: { type: Number, default: 0 },
|
|
renameWindowStart: Date,
|
|
priority: { type: String, default: 'normal', enum: ['low', 'normal', 'medium', 'high'] },
|
|
ticketTag: String,
|
|
lastActivity: Date,
|
|
reminderSent: { type: Boolean, default: false },
|
|
welcomeMessageId: String,
|
|
claimerId: String,
|
|
staffChannelId: String,
|
|
parentCategoryId: String,
|
|
unclaimedRemindersSent: { type: [Number], default: [] },
|
|
lastMessageAuthorIsStaff: { type: Boolean, default: false },
|
|
pendingDelete: { type: Boolean, default: false }
|
|
});
|
|
ticketSchema.index({ status: 1, lastActivity: 1 });
|
|
ticketSchema.index({ senderEmail: 1, status: 1 });
|
|
ticketSchema.index({ discordThreadId: 1 });
|
|
mongoose.model('Ticket', ticketSchema);
|
|
|
|
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 }
|
|
}));
|
|
|
|
mongoose.model('StaffSettings', new mongoose.Schema({
|
|
userId: { type: String, required: true, unique: true },
|
|
guildId: { type: String, required: true },
|
|
notifyDm: { type: Boolean, default: false },
|
|
updatedAt: { type: Date, default: Date.now }
|
|
}));
|
|
|
|
mongoose.model('StaffSignature', new mongoose.Schema({
|
|
userId: { type: String, required: true, unique: true },
|
|
guildId: { type: String, required: true },
|
|
valediction: { type: String, default: '' },
|
|
displayName: { type: String, default: '' },
|
|
tagline: { type: String, default: '' },
|
|
updatedAt: { type: Date, default: Date.now }
|
|
}));
|