@opfr/services 1.5.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +1173 -1439
- package/dist/index.umd.js +1 -1
- package/dist/services/entities/definition/model.d.ts +12 -2
- package/dist/services/entities/definition/model.d.ts.map +1 -1
- package/dist/services/entities/definition/schema.d.ts +20 -2
- package/dist/services/entities/definition/schema.d.ts.map +1 -1
- package/dist/services/entities/helper.d.ts +5 -20
- package/dist/services/entities/helper.d.ts.map +1 -1
- package/dist/services/entities/process/findMany.d.ts +2 -1
- package/dist/services/entities/process/findMany.d.ts.map +1 -1
- package/dist/services/entities/process/findOne.d.ts +3 -1
- package/dist/services/entities/process/findOne.d.ts.map +1 -1
- package/dist/services/entities/types.d.ts +5 -1
- package/dist/services/entities/types.d.ts.map +1 -1
- package/dist/services/index.d.ts +2 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/reminder/types.d.ts +1 -2
- package/dist/services/reminder/types.d.ts.map +1 -1
- package/dist/services/story/definition/model.d.ts +4 -0
- package/dist/services/story/definition/model.d.ts.map +1 -0
- package/dist/services/story/definition/schema.d.ts +13 -0
- package/dist/services/story/definition/schema.d.ts.map +1 -0
- package/dist/services/story/helper.d.ts +10 -0
- package/dist/services/story/helper.d.ts.map +1 -0
- package/dist/services/story/index.d.ts.map +1 -0
- package/dist/services/story/process/create.d.ts +3 -0
- package/dist/services/story/process/create.d.ts.map +1 -0
- package/dist/services/story/process/findMany.d.ts +5 -0
- package/dist/services/story/process/findMany.d.ts.map +1 -0
- package/dist/services/story/process/findOne.d.ts +4 -0
- package/dist/services/story/process/findOne.d.ts.map +1 -0
- package/dist/services/story/process/updateOne.d.ts +4 -0
- package/dist/services/story/process/updateOne.d.ts.map +1 -0
- package/dist/services/story/service.d.ts +15 -0
- package/dist/services/story/service.d.ts.map +1 -0
- package/dist/services/story/types.d.ts +11 -0
- package/dist/services/story/types.d.ts.map +1 -0
- package/dist/services/user/definition/schema.d.ts.map +1 -1
- package/dist/services/user-cooldown/definition/schema.d.ts.map +1 -1
- package/dist/services/user-cooldown/helper.d.ts +3 -3
- package/dist/services/user-cooldown/helper.d.ts.map +1 -1
- package/dist/services/user-cooldown/index.d.ts +0 -1
- package/dist/services/user-cooldown/index.d.ts.map +1 -1
- package/dist/services/user-cooldown/types.d.ts +1 -8
- package/dist/services/user-cooldown/types.d.ts.map +1 -1
- package/dist/services/user-inventory/helper.d.ts +1 -3
- package/dist/services/user-inventory/helper.d.ts.map +1 -1
- package/dist/services/user-meta/definition/schema.d.ts.map +1 -1
- package/dist/services/user-meta/helper.d.ts +1 -1
- package/dist/services/user-meta/helper.d.ts.map +1 -1
- package/dist/services/user-meta/types.d.ts +2 -4
- package/dist/services/user-meta/types.d.ts.map +1 -1
- package/dist/services/user-settings/definition/schema.d.ts.map +1 -1
- package/dist/services/user-settings/types.d.ts +1 -6
- package/dist/services/user-settings/types.d.ts.map +1 -1
- package/dist/services/user-stats/inventory/helper.d.ts.map +1 -1
- package/dist/services/user-story/definition/model.d.ts +4 -0
- package/dist/services/user-story/definition/model.d.ts.map +1 -0
- package/dist/services/user-story/definition/schema.d.ts +13 -0
- package/dist/services/user-story/definition/schema.d.ts.map +1 -0
- package/dist/services/user-story/helper.d.ts +31 -0
- package/dist/services/user-story/helper.d.ts.map +1 -0
- package/dist/services/user-story/index.d.ts +3 -0
- package/dist/services/user-story/index.d.ts.map +1 -0
- package/dist/services/user-story/process/create.d.ts +4 -0
- package/dist/services/user-story/process/create.d.ts.map +1 -0
- package/dist/services/user-story/process/deleteOne.d.ts +3 -0
- package/dist/services/user-story/process/deleteOne.d.ts.map +1 -0
- package/dist/services/user-story/process/findMany.d.ts +5 -0
- package/dist/services/user-story/process/findMany.d.ts.map +1 -0
- package/dist/services/user-story/process/findOne.d.ts +5 -0
- package/dist/services/user-story/process/findOne.d.ts.map +1 -0
- package/dist/services/user-story/process/updateOne.d.ts +5 -0
- package/dist/services/user-story/process/updateOne.d.ts.map +1 -0
- package/dist/services/user-story/service.d.ts +15 -0
- package/dist/services/user-story/service.d.ts.map +1 -0
- package/dist/services/user-story/types.d.ts +43 -0
- package/dist/services/user-story/types.d.ts.map +1 -0
- package/dist/services/user-story/utils.d.ts +8 -0
- package/dist/services/user-story/utils.d.ts.map +1 -0
- package/package.json +3 -3
- package/dist/services/shop/definition/model.d.ts +0 -4
- package/dist/services/shop/definition/model.d.ts.map +0 -1
- package/dist/services/shop/definition/schema.d.ts +0 -13
- package/dist/services/shop/definition/schema.d.ts.map +0 -1
- package/dist/services/shop/helper.d.ts +0 -14
- package/dist/services/shop/helper.d.ts.map +0 -1
- package/dist/services/shop/index.d.ts +0 -4
- package/dist/services/shop/index.d.ts.map +0 -1
- package/dist/services/shop/items/background.d.ts +0 -18
- package/dist/services/shop/items/background.d.ts.map +0 -1
- package/dist/services/shop/items/boostXp.d.ts +0 -18
- package/dist/services/shop/items/boostXp.d.ts.map +0 -1
- package/dist/services/shop/items/bottle.d.ts +0 -18
- package/dist/services/shop/items/bottle.d.ts.map +0 -1
- package/dist/services/shop/items/chest.d.ts +0 -18
- package/dist/services/shop/items/chest.d.ts.map +0 -1
- package/dist/services/shop/items/default.d.ts +0 -21
- package/dist/services/shop/items/default.d.ts.map +0 -1
- package/dist/services/shop/items/equipments.d.ts +0 -18
- package/dist/services/shop/items/equipments.d.ts.map +0 -1
- package/dist/services/shop/items/index.d.ts +0 -10
- package/dist/services/shop/items/index.d.ts.map +0 -1
- package/dist/services/shop/items/object.d.ts +0 -18
- package/dist/services/shop/items/object.d.ts.map +0 -1
- package/dist/services/shop/items/repair.d.ts +0 -18
- package/dist/services/shop/items/repair.d.ts.map +0 -1
- package/dist/services/shop/items/store.d.ts +0 -18
- package/dist/services/shop/items/store.d.ts.map +0 -1
- package/dist/services/shop/items/title.d.ts +0 -18
- package/dist/services/shop/items/title.d.ts.map +0 -1
- package/dist/services/shop/process/create.d.ts +0 -4
- package/dist/services/shop/process/create.d.ts.map +0 -1
- package/dist/services/shop/process/findOne.d.ts +0 -5
- package/dist/services/shop/process/findOne.d.ts.map +0 -1
- package/dist/services/shop/process/updateOne.d.ts +0 -5
- package/dist/services/shop/process/updateOne.d.ts.map +0 -1
- package/dist/services/shop/service.d.ts +0 -19
- package/dist/services/shop/service.d.ts.map +0 -1
- package/dist/services/shop/types.d.ts +0 -5
- package/dist/services/shop/types.d.ts.map +0 -1
- package/dist/services/user-cooldown/constants.d.ts +0 -2
- package/dist/services/user-cooldown/constants.d.ts.map +0 -1
- package/dist/services/user-shop/definition/model.d.ts +0 -4
- package/dist/services/user-shop/definition/model.d.ts.map +0 -1
- package/dist/services/user-shop/definition/schema.d.ts +0 -13
- package/dist/services/user-shop/definition/schema.d.ts.map +0 -1
- package/dist/services/user-shop/helper.d.ts +0 -9
- package/dist/services/user-shop/helper.d.ts.map +0 -1
- package/dist/services/user-shop/index.d.ts.map +0 -1
- package/dist/services/user-shop/process/create.d.ts +0 -4
- package/dist/services/user-shop/process/create.d.ts.map +0 -1
- package/dist/services/user-shop/process/findOne.d.ts +0 -5
- package/dist/services/user-shop/process/findOne.d.ts.map +0 -1
- package/dist/services/user-shop/process/updateOne.d.ts +0 -5
- package/dist/services/user-shop/process/updateOne.d.ts.map +0 -1
- package/dist/services/user-shop/service.d.ts +0 -14
- package/dist/services/user-shop/service.d.ts.map +0 -1
- package/dist/services/user-shop/types.d.ts +0 -9
- package/dist/services/user-shop/types.d.ts.map +0 -1
- /package/dist/services/{user-shop → story}/index.d.ts +0 -0
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(d,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("mongoose"),require("@opfr/definitions"),require("node-cache"),require("events"),require("@opfr/utils-lang")):typeof define=="function"&&define.amd?define(["exports","mongoose","@opfr/definitions","node-cache","events","@opfr/utils-lang"],s):(d=typeof globalThis<"u"?globalThis:d||self,s(d.services={},d.mongoose,d["@opfr/definitions"],d["node-cache"],d.events,d["@opfr/utils-lang"]))})(this,(function(d,s,y,_e,Ce,o){"use strict";function Ne(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,n.get?n:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const le=Ne(Ce),F="___ALL_ENTITIES___";class m{cache;constructor(e){this.cache=new _e({stdTTL:e,checkperiod:e*.2,useClones:!1})}async get(e,t){const n=this.normalizeKey(e),r=this.cache.get(n);if(r)return r;const i=await this.fetchFromDb(e,t??{});return i&&this.cache.set(n,i),i}async update(e,t,n){const r=await this.updateInDb(e,t,n);if(r){const i=this.getKey(r);this.cache.del(F),this.cache.set(this.normalizeKey(i),r)}return r}invalidate(e){this.cache.del(F),e&&this.cache.del(this.normalizeKey(e))}clearAll(){this.cache.flushAll()}}class $ extends m{async getAll(){const e=this.cache.get(F);if(e)return e;const t=await this.fetchManyFromDb({},{});return this.cache.set(F,t),t.forEach(n=>{this.cache.set(this.normalizeKey(this.getKey(n)),n)}),t}async getMany(e,t={}){const n=await this.fetchManyFromDb(e,t);return n.forEach(r=>{this.cache.set(this.normalizeKey(this.getKey(r)),r)}),n}}const oe=new le.EventEmitter,g=(a,e,t)=>{oe.emit(a,e,t)},xe=a=>{for(const[e,t]of Object.entries(a))oe.on(e,(n,r)=>{t(n,r)})},b={USER:"middleware/quest/USER",USER_INVENTORY:"middleware/quest/USER_INVENTORY",USER_META:"middleware/quest/USER_META",USER_ORNAMENT:"middleware/quest/USER_ORNAMENT",USER_QUEST:"middleware/quest/USER_QUEST",USER_STATS_CASINO:"middleware/quest/USER_STATS_CASINO",USER_STATS_ECONOMY:"middleware/quest/USER_STATS_ECONOMY",USER_STATS_ENGAGEMENT:"middleware/quest/USER_STATS_ENGAGEMENT",USER_STATS_FLAGS:"middleware/quest/USER_STATS_FLAGS",USER_STATS_FREQUENCY:"middleware/quest/USER_STATS_FREQUENCY",USER_STATS_INVENTORY:"middleware/quest/USER_STATS_INVENTORY"},pe=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,ref:"User",index:!0},questId:{type:String,required:!0,index:!0},status:{type:String,default:y.QuestStatus.IN_PROGRESS,index:1},lastCompletionDate:Date,streak:Number},{minimize:!1});pe.post("findOneAndUpdate",function(a){a&&g(b.USER_QUEST,a.user._id,a)});const B=s.models?.UserQuest||s.model("UserQuest",pe),Fe=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},raid:{classic:{type:Date,default:new Date(0)},special:{type:Date,default:new Date(0)}},lockUserCommand:{type:Date,default:new Date(0)},commands:{work:{type:Date,default:new Date(0)},dice:{type:Date,default:new Date(0)},doubleOrQuit:{type:Date,default:new Date(0)},priceIsRight:{type:Date,default:new Date(0)},blackJack:{type:Date,default:new Date(0)},rps:{type:Date,default:new Date(0)}}}),j=s.models?.UserCooldown||s.model("UserCooldown",Fe),je=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},xpYesterday:{type:Number,default:0},berryYesterday:{type:Number,default:0},previousOrnament:{unlockedBadges:{type:[String],default:[]},unlockedTitles:{type:[String],default:[]},unlockedBackgrounds:{type:[String],default:[]}},previousCompletedQuest:{type:[String],default:[]},previousMessageSent:{type:Number,default:0}}),z=s.models?.UserDailyReport||s.model("UserDailyReport",je),ze=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},encyclopedia:{type:[String],default:[]}}),H=s.models?.UserEncyclopedia||s.model("UserEncyclopedia",ze),He=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User",index:1},guess:{type:{tries:Number,amount:Number,numberToGuess:Number,lastGuess:Number},default:null}}),K=s.models?.UserGames||s.model("UserGames",He),ye=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},equippedItems:{type:Object,default:{}},equipmentSave:{type:[Object],default:[]},equipmentList:{type:[{entityId:String,seed:Number}],default:[]},itemList:{type:Map,of:Number,default:{}},recipes:{type:[String],default:[]}},{minimize:!1});ye.post("findOneAndUpdate",function(a){a&&g(b.USER_INVENTORY,a.user._id,a)});const P=s.models?.UserInventory||s.model("UserInventory",ye),Ke=new le.EventEmitter,Pe=(a,e)=>{Ke.emit(a,e)},A={multiplier:{type:Number,default:0},origin:String,expireAt:{type:Date,default:null},startAt:{type:Date,default:null}},fe=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},premium:{type:Date,default:null},booster:{type:Boolean,default:!1},berry:{type:Number,default:1e3,index:-1},xp:{lastMessageWithXp:{type:Date,default:new Date},voice:{lastConnection:{type:Date,default:new Date},minutesInVoiceToday:{type:Number,default:0}},amount:{type:Number,default:0,index:-1},boost:{type:Date,default:null}},buffs:{cooldown:{casino:{type:[A],default:[]},work:{type:[A],default:[]}},berry:{work:{type:[A],default:[]},global:{type:[A],default:[]}},drop:{work:{type:[A],default:[]}},xp:{global:{type:[A],default:[]}}},hp:{type:Number,default:100},workUnluckyStreak:{type:Number,default:0},characteristics:{vitality:{type:Number,default:0},strength:{type:Number,default:0},agility:{type:Number,default:0},chance:{type:Number,default:0},intelligence:{type:Number,default:0},wisdom:{type:Number,default:0}},resetCharacteristics:{free:{type:Boolean,default:!0},nextAvailable:{type:Date,default:null}},scrolls:{vitality:{type:Number,default:0},strength:{type:Number,default:0},agility:{type:Number,default:0},chance:{type:Number,default:0},intelligence:{type:Number,default:0},wisdom:{type:Number,default:0}}});fe.post("findOneAndUpdate",async function(a){a&&(g(b.USER_META,a.user._id,a),a.hp<=0&&Pe("death",a.user._id))});const O=s.models?.UserMeta||s.model("UserMeta",fe),me=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},unlockedFactionBadges:{type:[String],default:[]},unlockedBadges:{type:[String],default:[]},unlockedTitles:{type:[String],default:[]},selectedTitle:{type:String,default:null},unlockedBackgrounds:{type:[String],default:["default"]},selectedBackground:{type:String,default:"default"},unlockedProfileAssets:{type:[String],default:[]},unlockedBags:{type:[String],default:["default"]},selectedBag:{type:String,default:"default"}});me.post("findOneAndUpdate",function(a){a&&g(b.USER_ORNAMENT,a.user._id,a)});const Q=s.models?.UserOrnament||s.model("UserOrnament",me),Qe=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},sort:{inventory:{type:String,default:"alpha"}},sendDailyReport:{type:Boolean,default:!1,index:!0},sendDailyQuest:{type:Boolean,default:!1},reminder:{raid:{classic:{type:Boolean,default:!1},special:{type:Boolean,default:!1}},commands:{work:{type:Boolean,default:!1},dice:{type:Boolean,default:!1},qod:{type:Boolean,default:!1},blackjack:{type:Boolean,default:!1},guess:{type:Boolean,default:!1},rps:{type:Boolean,default:!1}}}}),R=s.models?.UserSettings||s.model("UserSettings",Qe),We=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},lastShopId:s.Schema.Types.ObjectId,limit:{type:s.Schema.Types.Mixed,default:{}}},{minimize:!1}),W=s.models?.UserShop||s.model("UserShop",We),he=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},totalBet:{type:Number,default:0},lastGames:{type:[{gameType:String,endState:Number}],default:[]},drawCount:{type:Number,default:0},bet666:{count:{type:Number,default:0},last:{type:Date,default:0}},dice:{doubleSixCount:{type:Number,default:0},drawWithDoubleSixCount:{type:Number,default:0}},blackJack:{blackJackCount:{type:Number,default:0}},rps:{lastRpsPlayed:{type:String,default:"paper"},count:{type:Number,default:-1}},doubleOrQuit:{sevenDoubleInARowCount:{type:Number,default:0}},priceIsRight:{guessInOneTryCount:{type:Number,default:0}}});he.post("findOneAndUpdate",function(a){a&&g(b.USER_STATS_CASINO,a.user._id,a)});const M=s.models?.UserStatsCasino||s.model("UserStatsCasino",he),Se=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},workCount:{type:Number,default:0},totalSpentInShop:{type:Number,default:0}});Se.post("findOneAndUpdate",function(a){a&&g(b.USER_STATS_ECONOMY,a.user._id,a)});const G=s.models?.UserStatsEconomy||s.model("UserStatsEconomy",Se),we=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},messageSent:{type:Number,default:0},totalMinutesInVoice:{type:Number,default:0},randomMessageClaimed:{type:Number,default:0},writeDifferentChatIds:{type:[String],default:[]}});we.post("findOneAndUpdate",function(a){a&&g(b.USER_STATS_ENGAGEMENT,a.user._id,a)});const Y=s.models?.UserStatsEngagement||s.model("UserStatsEngagement",we),ge=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},tagEveryone:{type:Boolean,default:!1},botPingCount:{type:Number,default:0},reportedSomeone:{type:Boolean,default:!1},hasCelebrateBirthday:{type:Boolean,default:!1},gamblingFlags:{betMin:{type:Boolean,default:!1},bet10M:{type:Boolean,default:!1},lose10M:{type:Boolean,default:!1},winBet10M:{type:Boolean,default:!1},loseEverything:{type:Boolean,default:!1}}});ge.post("findOneAndUpdate",function(a){a&&g(b.USER_STATS_FLAGS,a.user._id,a)});const V=s.models?.UserStatsFlags||s.model("UserStatsFlags",ge),be=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},edito:{readToday:{type:Number,default:0,index:!0},lastTimeRead:{type:Date,default:new Date,index:!0}}});be.post("findOneAndUpdate",function(a){a&&g(b.USER_STATS_FREQUENCY,a.user._id,a)});const T=s.models?.UserStatsFrequency||s.model("UserStatsFrequency",be),$e=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},bottle:{totalUsed:{type:Number,default:0},usedToday:{type:Number,default:0},lastUsed:{type:Date,default:new Date}},chest:{totalOpened:{type:Number,default:0}},alcohols:{wines:{type:Number,default:0},rhums:{type:Number,default:0},beers:{type:Number,default:0},totalConsumed:{type:Number,default:0}},crafts:{cookedMeal:{type:Number,default:0},scrolls:{type:Number,default:0},totalCrafted:{type:Number,default:0}}});$e.post("findOneAndUpdate",function(a){a&&g(b.USER_STATS_INVENTORY,a.user._id,a)});const k=s.models?.UserStatsInventory||s.model("UserStatsInventory",$e),ae=new s.Schema({discordId:{type:String,required:!0,unique:!0},scam:{type:Boolean,default:!1},birthday:{type:Date,default:null,index:1},faction:{type:String,default:y.DEFAULT_FACTION,index:1},canChangeFaction:{type:Boolean,default:!1},canChooseFaction:{type:Boolean,default:!1}});ae.post("findOneAndUpdate",function(a){a&&g(b.USER,a._id,a)}),ae.post("deleteOne",async function(){const a=this.getQuery()._id;await j.deleteOne({user:a}),await z.deleteOne({user:a}),await H.deleteOne({user:a}),await K.deleteOne({user:a}),await P.deleteOne({user:a}),await O.deleteOne({user:a}),await Q.deleteOne({user:a}),await B.deleteMany({user:a}),await R.deleteOne({user:a}),await W.deleteOne({user:a}),await M.deleteOne({user:a}),await G.deleteOne({user:a}),await Y.deleteOne({user:a}),await V.deleteOne({user:a}),await T.deleteOne({user:a}),await k.deleteOne({user:a})});const I=s.models?.User||s.model("User",ae);class Ge extends ${getByObjectId(e){return this.update({_id:e},{})}getNextBirthdays(){const e=new Date,t=e.getFullYear();return I.aggregate([{$match:{birthday:{$ne:null}}},{$set:{birthdayThisYear:{$dateFromParts:{year:t,month:{$month:"$birthday"},day:{$dayOfMonth:"$birthday"}}}}},{$set:{nextBirthday:{$cond:[{$lt:["$birthdayThisYear",e]},{$dateFromParts:{year:{$add:[t,1]},month:{$month:"$birthday"},day:{$dayOfMonth:"$birthday"}}},"$birthdayThisYear"]}}},{$sort:{nextBirthday:1}},{$limit:10},{$project:{_id:0,discordId:1,birthday:1,nextBirthday:1}}])}getFactionRanking(e){return I.aggregate([{$match:{faction:e}},{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$sort:{"meta.xp.amount":-1}},{$limit:10},{$project:{_id:1,discordId:1,"meta.xp.amount":1}}])}getGlobalRanking(){return I.aggregate([{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$sort:{"meta.xp.amount":-1}},{$limit:10},{$project:{_id:1,discordId:1,"meta.xp.amount":1}}])}getBerryRanking(){return I.aggregate([{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$sort:{"meta.berry":-1}},{$limit:10},{$project:{_id:1,discordId:1,"meta.berry":1}}])}getQuestRanking(){return B.aggregate([{$match:{status:y.QuestStatus.COMPLETED}},{$group:{_id:"$user",questCount:{$sum:1}}},{$setWindowFields:{sortBy:{questCount:-1},output:{rank:{$rank:{}}}}},{$sort:{rank:1}},{$limit:10},{$lookup:{from:"users",localField:"_id",foreignField:"_id",as:"user"}},{$unwind:"$user"},{$project:{_id:0,discordId:"$user.discordId",questCount:1,rank:1}}])}getTodayAllBirthday(){const e=new Date;return I.aggregate([{$match:{birthday:{$ne:null}}},{$addFields:{birthMonth:{$month:"$birthday"},birthDay:{$dayOfMonth:"$birthday"}}},{$addFields:{currentMonth:{$month:e},currentDay:{$dayOfMonth:e}}},{$match:{$expr:{$and:[{$eq:["$birthMonth","$currentMonth"]},{$eq:["$birthDay","$currentDay"]}]}}}])}async canChooseFaction(e,t){typeof e=="string"?await this.update({discordId:e},{$set:{canChooseFaction:t}}):await this.update({_id:e},{$set:{canChooseFaction:t}})}async canChangeFaction(e,t){typeof e=="string"?await this.update({discordId:e},{$set:{canChangeFaction:t}}):await this.update({_id:e},{$set:{canChangeFaction:t}})}async setBirthday(e,t){await this.update({discordId:e},{$set:{birthday:t}})}async updateFaction(e,t){await this.update({discordId:e},{$set:{faction:t}})}async updateScam(e,t){await this.update({discordId:e},{$set:{scam:t}})}}const Ye=(a,e)=>I.find(a,{},e).lean(),f=a=>a.toObject({flattenMaps:!0,flattenObjectIds:!1}),Ve=a=>I.create({discordId:a});async function Xe(a,{upsert:e=!0,...t}){const n=await I.findOne({discordId:a},{},t).lean();return!n&&e?f(await Ve(a)):n}const Le=(a,e)=>I.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"}).lean();class Je extends Ge{constructor(){super(3600)}normalizeKey(e){return e}getKey({discordId:e}){return e}fetchFromDb(e,t){return Xe(e,t)}fetchManyFromDb(e,t){return Ye(e,t)}updateInDb(e,t){return Le(e,t)}}const Ie=new Je,Ze=["work",...y.GAME_TYPES],et=new s.Schema({user:{type:s.Schema.Types.ObjectId,ref:"User",required:!0,index:!0},date:{type:Date,index:-1,required:!0},type:{type:String,required:!0}},{minimize:!1}),_=s.models?.Reminder||s.model("Reminder",et),tt=async a=>{await _.deleteMany(a)},at=async(a,e)=>{await _.deleteOne({user:a,type:e})};class nt extends ${getAllPassedReminder(){return this.getMany({date:{$lte:new Date}})}async addReminder(e,t,n){await this.update({user:e,type:t},{$set:{date:n}},{upsert:!0})}async updateReminderDate(e,t,n){await this.update({user:e,type:t},[{$set:{date:{$add:["$date",n]}}}])}async removeReminder(e,t){await at(e,t),this.invalidate({user:e,type:t})}async deleteSelectedReminders(e){const t=e.map(n=>n._id);await tt({_id:{$in:t}}),e.forEach(n=>{this.invalidate({user:n.user,type:n.type})})}}function rt(a,e){return _.find(a,{},e).lean()}async function st(a){const e=await _.findOne(a).lean();return e||null}async function it(a,e,t){return _.findOneAndUpdate(a,e,{...t,returnDocument:"after"}).lean()}class ut extends nt{constructor(){super(300)}getKey(e){return{user:e.user,type:e.type}}normalizeKey({user:e,type:t}){return`${e.toString()}/${t}`}fetchFromDb(e){return st(e)}fetchManyFromDb(e,t){return rt(e,t)}updateInDb(e,t,n={upsert:!1}){return it(e,t,n)}}const Ee=new ut,ct=new s.Schema({panoplyId:{unique:!0,index:1,required:!0,type:String},name:{required:!0,type:String},equipments:{required:!0,type:[{type:s.Schema.Types.ObjectId,ref:"Entities"}]},fullBonusStr:{type:String},halfBonusStr:{type:String},fullBonus:s.Schema.Types.Mixed,halfBonus:s.Schema.Types.Mixed},{minimize:!1}),C=s.models?.Panoplies||s.model("Panoplies",ct),dt=(a,e)=>C.find(a,{},e).lean(),lt=async(a,e)=>C.find(a,{},e).populate("equipments");async function ot(a){const e=await C.findOne({panoplyId:a}).lean();return e||null}const pt=async a=>C.findOne(a).populate("equipments");class yt extends ${getAllPopulated(){return lt({},{})}getPopulated(e){return pt({panoplyId:e})}hasPanoply(e,t){const n=o.filterNullAndUndefined(Object.values(e)),r=t.equipments.filter(i=>n.find(u=>u.entityId===i.entityId)).length;if(r===t.equipments.length)return t.fullBonus;if(r>=t.equipments.length/2)return t.halfBonus}async getPanoplyBonus(e){const t=[],n=await this.getAllPopulated();for(const r of n){const i=o.filterNullAndUndefined(Object.values(e)),u=r.equipments.filter(l=>i.find(({entityId:c})=>c===l.entityId));u.length===r.equipments.length?t.push([r,"full"]):u.length>=r.equipments.length/2?t.push([r,"half"]):u.length>=1&&t.push([r,null])}return t}}const ft=async(a,e)=>C.findOneAndUpdate(a,e,{returnDocument:"after"}).lean();class mt extends yt{constructor(){super(3600)}normalizeKey(e){return e}getKey({panoplyId:e}){return e}updateInDb(e,t){return ft(e,t)}fetchFromDb(e){return ot(e)}fetchManyFromDb(e,t){return dt(e,t)}}const E=new mt;class ht extends ${isEntity(e){return!!e&&"entityId"in e}isItem(e){return e.category!=="equipment"}isEquipment(e){return e.category==="equipment"}async isEntityId(e,t=()=>!0){return(await this.getAll()).filter(t).map(({entityId:r})=>r).includes(e)}async getSomeStoreItems(e){const t=(await this.getAll()).filter(n=>this.isStoreItem(n));return o.sortBy(o.pickNthByOdds(e,t,n=>n.entityId,n=>n.shop.odd??0),n=>n.shop.price)}async getSomeRepairItems(e){const t=(await this.getAll()).filter(n=>this.isRepairItem(n));return o.shuffle(t).slice(0,e)}async getSomeObjectItems(e){const t=(await this.getAll()).filter(n=>this.isObjectItem(n));return o.shuffle(t.filter(n=>!!n.shop?.price)).slice(0,e)}async idArrayToEntities(e){return(await this.getAll()).filter(t=>e.includes(t.entityId))}recordToEntities(e){return this.idArrayToEntities(Object.keys(e))}async recordToEntityTuple(e){const t=await this.getAll();return o.recordToArray(e).reduce((n,[r,i])=>{const u=t.find(({entityId:l})=>l===r);return u&&n.push([u,i]),n},[])}async getAllEntitiesLimit(){const e=await this.getAll();return o.arrayToRecord(e.map(t=>[t.entityId,t.shop?.limit??0]))}async getAllEntitiesBy(e){return(await this.getAll()).filter(e)}async fromDBToEquipableEquipment(e){const n=(await this.getAll()).filter(r=>this.isEquipment(r)).find(({entityId:r})=>r===e.entityId);if(!n)throw new Error(`cannot find any equipment: ${e.entityId}`);return this.seedEquipment(n,e.seed)}async getUserEquipmentsCharacteristics(e){let t={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};const n=await E.getAllPopulated();for(const r of y.EQUIPMENT_SLOT){const i=e[r];i&&(t=o.mergeObjects(t,(await this.fromDBToEquipableEquipment(i)).characteristics,(u,l)=>u+l))}for(const r of n){const i=E.hasPanoply(e,r);i&&!("target"in i)&&(t=o.mergeObjects(t,i,(u,l)=>u+l))}return t}filterCraftEntities(e){return e.filter(t=>t.usage?.craft)}filterDismantleEntities(e){return e.filter(t=>t.usage?.dismantle)}filterUsableEntities(e){return e.filter(t=>t.usage?.mode)}filterEnchantableEntities(e){return e.filter(t=>t.usage?.enchant)}hasCraftEntities(e){return!!e.find(t=>t.usage?.craft)}hasDismantleEntities(e){return!!e.find(t=>t.usage?.dismantle)}hasEnchantableEntities(e){return!!e.find(t=>t.usage?.enchant)}hasUsableEntities(e){return!!e.find(t=>t.usage?.mode)}isChestItem(e){return e.type==="chest"}isBottleItem(e){return e.type==="bottle"}isBoostItem(e){return e.type==="boost"}isRepairItem(e){return e.type==="repair"}isStoreItem(e){return e.type==="store"}isObjectItem(e){return e.type==="object"}isScrollItem(e){return e.type==="scroll"}isCookedMeal(e){return e.type==="cookedMeal"}isAlcoholItem(e){return e.type==="alcohol"}isSameEquipment(e,t){return e.entityId===t.entityId&&e.seed===t.seed}seedEquipment(e,t){const n=o.seededRandom(t),r=o.sortBy(o.recordToArray(e.characteristics),([i])=>i);return{...e,seed:t,characteristics:Object.fromEntries(r.map(([i,u])=>[i,Array.isArray(u)?o.randomBetween(u[0],u[1]+1,n):u]))}}isEquipped(e,t){return!!Object.values(e).find(n=>n&&this.isSameEquipment(n,t))}calcILvl(e){return Object.values(e.characteristics).reduce((n,r)=>n+r,0)+e.level}}const St=new s.Schema({type:{type:String,enum:y.EFFECT_KEYS,required:!0},params:{type:s.Schema.Types.Mixed}},{_id:!1}),wt=new s.Schema({entityId:{unique:!0,required:!0,type:String},type:{required:!0,type:String},name:{required:!0,_id:!1,type:{key:{required:!0,type:String},context:String}},description:{_id:!1,type:{key:{required:!0,type:String},context:String}},image:{required:!0,type:String},emojis:{required:!0,type:String},category:{required:!0,type:String},effects:{type:[St],default:[]},rankId:String,usage:{_id:!1,type:{mode:String,craft:Boolean,enchant:String,dismantle:{type:[{type:{entityId:String,quantity:Number},_id:!1}],default:void 0}},default:void 0},shop:{default:void 0,_id:!1,type:{price:{required:!0,type:Number},limit:Number,size:Number,odd:Number}},bottle:{default:void 0,_id:!1,type:{xp:{type:s.Schema.Types.Union,of:[Number,[Number]],required:!0},buffs:{required:!0,default:[],type:[{target:{type:String,required:!0},multiplier:{type:Number,required:!0},origin:{type:String,required:!0},startIn:{type:Number,default:null},endIn:{type:Number,default:null},_id:!1}]},hp:Number,tier:Number}},ms:Number,characteristics:{_id:!1,type:Object},level:Number,panoply:String},{minimize:!1}),X=s.models?.Entities||s.model("Entities",wt),gt=async a=>await X.create({...a}),bt=async(a,e)=>X.find(a,{},e).lean();async function $t(a){const e=await X.findOne({entityId:a}).lean();return e||null}const It=(a,e)=>X.findOneAndUpdate(a,e,{returnDocument:"after"}).lean();class Et extends ht{constructor(){super(3600)}createInDb(e){return gt(e)}updateInDb(e,t){return It(e,t)}fetchFromDb(e){return $t(e)}fetchManyFromDb(e,t){return bt(e,t)}normalizeKey(e){return e}getKey(e){return e.entityId}}const p=new Et;class Ut extends m{hasAlreadyFoundEntity(e,t){return e.encyclopedia.includes(t)}async addEntities(e,t){await this.update(e,{$addToSet:{encyclopedia:{$each:t}}})}}const Dt=async a=>await H.create({user:a});async function Ot(a){const e=await H.findOne({user:a}).lean();return e||f(await Dt(a))}const Tt=(a,e)=>H.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class vt extends Ut{constructor(){super(300)}fetchFromDb(e){return Ot(e)}getKey({user:e}){return e}normalizeKey(e){return e.toString()}updateInDb(e,t){return Tt(e,t)}}const L=new vt;class Bt extends m{getPanoplyEffectiveBonus(e,t){const n=o.filterNullAndUndefined(Object.values(e.equippedItems)),r=t.equipments.filter(i=>n.find(u=>u.entityId===i.entityId)).length;if(r===t.equipments.length)return t.fullBonus;if(r>=t.equipments.length/2)return t.halfBonus}async getUserEquipmentsCharacteristics(e){let t={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};const n=await E.getAllPopulated();for(const r of y.EQUIPMENT_SLOT){const i=e.equippedItems?.[r];if(!i)continue;const u=await p.fromDBToEquipableEquipment(i);t=o.mergeObjects(t,u.characteristics,(l,c)=>l+c)}for(const r of n){const i=this.getPanoplyEffectiveBonus(e,r);i&&!("target"in i)&&(t=o.mergeObjects(t,i,(u,l)=>u+l))}return t}async hasInventoryRequirements(e,t){const n=await this.get(e);return o.recordToArray(t).reduce((r,[i,u])=>r&&(n.itemList[i]??0)>=(u??0),!0)}async hasEnoughEntity(e,t,n){return((await this.get(e)).itemList[n]??0)>=t}async getItemList(e){return(await this.get(e)).itemList}async calcBottleMultiplier(e,{bottle:{buffs:t}}){const n=await this.get(e),i=(await E.getPanoplyBonus(n.equippedItems)).find(([u,l])=>u.panoplyId==="herbalist"&&l!==null);return i&&i[1]==="full"?t.map(u=>({...u,multiplier:u.multiplier*1.25})):i&&i[1]==="half"?t.map(u=>({...u,multiplier:u.multiplier*1.1})):t}async calcMinStreakForWorkLoot(e){const t=await this.get(e),n=(await E.getPanoplyBonus(t.equippedItems)).find(([r,i])=>r.panoplyId==="marine"&&i!==null);return n&&n[1]==="full"?10:n&&n[1]==="half"?20:1/0}async hasRevolutionaryBuff(e){const t=await this.get(e);return(await E.getPanoplyBonus(t.equippedItems)).find(([r,i])=>r.panoplyId==="revolutionary"&&i!==null)?.[1]??null}async addItem(e,t,n){await this.update(e,{$inc:{[`itemList.${t}`]:n}}),await L.addEntities(e,[t])}async addItems(e,t){await this.update(e,{$inc:Object.fromEntries(Object.entries(t).filter(([,n])=>(n??0)>0).map(([n,r])=>[`itemList.${n}`,r]))}),await L.addEntities(e,o.recordToArray(t).filter(([,n])=>n>0).map(([n])=>n))}async removeItem(e,t,n){n!==0&&await this.update(e,[{$set:{[`itemList.${t}`]:{$max:[{$add:[`$itemList.${t}`,-n]},0]}}}])}async removeEquipment(e,t,n){await this.update(e,{$pull:{equipmentList:{entityId:t,seed:n}}})}async removeAllItem(e,t){await this.update(e,{$set:{[`itemList.${t}`]:0}})}async addEquipments(e,t){await this.update(e,{$push:{equipmentList:{$each:t}}}),await L.addEntities(e,t.map(n=>n.entityId))}async saveEquipments(e){await this.update(e,[{$set:{equipmentSave:{$push:["$equipmentSave","$equippedItems"]}}}])}async changeEquippedEquipment(e,t){const n=await this.get(e);n?.equipmentSave[t]&&await this.equip(e,n.equipmentSave[t])}async equip(e,t){const n=await U.getMaxHp(e),r=Object.fromEntries(o.recordToArray(t).map(([i,u])=>[`equippedItems.${i}`,u]));await this.update(e,{$set:r}),await U.updateHp(e,n)}async unequip(e,t){const n=await U.getMaxHp(e);await this.update(e,{$set:{[`equippedItems.${t}`]:null}}),await U.updateHp(e,n)}async craftItem(e,t,n,r){for(const{entityId:l,size:c}of t.entities)await this.removeItem(e,l,c*n);const{entityId:i,size:u}=t.result;await p.isEntityId(i,p.isEquipment)?await this.addEquipments(e,[{entityId:i,seed:r}]):await p.isEntityId(i,p.isItem)&&await this.addItem(e,i,u*n)}async dismantleEntity(e,t,n,r,i){p.isEquipment(t)?await this.removeEquipment(e,t.entityId,i):p.isItem(t)&&await this.removeItem(e,t.entityId,r);for(const{entityId:u,quantity:l}of n)await p.isEntityId(u,p.isItem)&&await this.addItem(e,u,r*l);await this.removeItem(e,"tools",1)}async enchantItem(e,t,n,r,i){await this.removeItem(e,t,i*4),await this.removeItem(e,r,i),await this.addItem(e,n,i)}async unlockRecipe(e,t){await this.update(e,{$addToSet:{recipes:t}})}}const At=a=>P.create({user:a});async function Mt(a){const e=await P.findOne({user:a}).lean();return e||f(await At(a))}const kt=(a,e)=>P.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class qt extends Bt{constructor(){super(300)}fetchFromDb(e){return Mt(e)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}updateInDb(e,t){return kt(e,t)}}const h=new qt;class Rt extends ${async getTotalCharacteristics(e){const{characteristics:t,scrolls:n}=await this.get(e);return o.arrayToRecord(y.CHARACTERISTICS.map(r=>[r,y.getComputedCharacteristicValue(t[r])+n[r]]))}async isCooldownForXpPassed(e){const t=await this.get(e);return Date.now()-t.xp.lastMessageWithXp.getTime()>60*1e3}async getAllWithExpiredBuffs(){const e=new Date;return this.getMany({$or:[{"xp.boost":{$lt:e}},{"buffs.cooldown.casino":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.cooldown.work":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.berry.work":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.berry.global":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.drop.work":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.xp.global":{$elemMatch:{expireAt:{$lt:e}}}}]})}async calcXpBoost(e){const t=await this.get(e),{boost:n}=t.xp,r=n!==null&&Date.now()<n.getTime()?.2:0,i=Math.max(t.premium?.5:0,t.booster?.25:0);return r+i+t.buffs.xp.global.reduce((u,{expireAt:l,startAt:c,multiplier:w})=>c&&c>new Date||l&&o.hasExpire(l)?u:u+w,0)}calcMessageXp(e){const t=e.trim().length,n=2;return t<10?10*n:t>300?300*n:t*n}async getXpDeathPenalties(e){const t=await this.get(e),n=y.getCurrentLevel(t.xp.amount);return n<=10?5e3:n<=20?1e4:n<=30?2e4:n<=40?3e4:n<=50?5e4:n<=60?75e3:n<=70?15e4:n<=80?25e4:n<=90?4e5:n<=100?75e4:14e6}async calcXp(e,t,n){return t*=1+await this.calcXpBoost(e),Math.ceil(t*n)}async calcBerry(e,t,n){if(t<=0)return t;const r=n?1:await this.calcBuffMultiplier(e,"berry","global");return Math.ceil(t*(r||1))}async calcBuffMultiplier(e,t,n){return(await this.get(e)).buffs[t][n].reduce((u,{expireAt:l,startAt:c,multiplier:w})=>u+(new Date>=(c??new Date)&&(!l||!o.hasExpire(l))?w:0),1)}async getMaxHp(e){const t=await h.get(e),{vitality:n}=await this.getTotalCharacteristics(e),r=await h.getUserEquipmentsCharacteristics(t);return(n+r.vitality)*y.HP_PER_VITALITY+y.DEFAULT_MAX_HP}async getHpRatio(e){const t=await this.get(e),n=await this.getMaxHp(e);return Math.min(t.hp/n,1)}async hasCharacteristicRequirement(e,t){const n=await h.get(e),r=await h.getUserEquipmentsCharacteristics(n),i=o.mergeObjects(await this.getTotalCharacteristics(e),r,(u,l)=>u+l);if("sum"in t){let u=0;for(const l of t.characteristics)u+=i[l]??0;return u>=t.sum}else{for(const u of Object.keys(t))if(i[u]<(t[u]??0))return!1;return!0}}async hasMalusBuff(e){const t=await this.get(e);for(const n of Object.values(t.buffs))for(const r of Object.values(n))for(const{multiplier:i,startAt:u,expireAt:l}of r)if(i<0&&(!l||!o.hasExpire(l))&&(u??new Date)<=new Date)return!0;return!1}async addBerry(e,t){await this.update(e,[{$set:{berry:{$max:[{$add:["$berry",t]},0]}}}])}async addXp(e,t){await this.update(e,{$inc:{"xp.amount":t}})}async updatePremium(e,t){await this.update(e,{$set:{premium:t}})}async updateBooster(e,t){await this.update(e,{$set:{booster:t}})}async updateBoost(e,t){const{xp:{boost:n}}=await this.update(e,[{$set:{"xp.boost":{$cond:{if:{$or:[{$not:"$xp.boost"},{$lt:["$xp.boost",new Date]}]},then:{$add:[new Date,t]},else:{$add:["$xp.boost",t]}}}}}]);return n}async updateBuff(e,t){if(Array.isArray(t)){for(const r of t)await this.updateBuff(e,r);return}const n=y.transformToDBBuff(t);await this.update(e,[{$set:{[`buffs.${t.target}`]:{$map:{input:`$buffs.${t.target}`,as:"buff",in:{$cond:{if:{$eq:[{$substr:["$$buff.origin",0,{$indexOfBytes:["$$buff.origin","/"]}]},t.origin.split("/")[0]]},then:{multiplier:t.multiplier,origin:t.origin,expireAt:n.expireAt?{$cond:{if:{$lt:["$$buff.expireAt",new Date]},then:n.expireAt,else:{$add:["$$buff.expireAt",(t.endIn??0)*60*60*1e3]}}}:null,startAt:{$cond:{if:{$gte:["$$buff.startAt",new Date]},then:"$$buff.startAt",else:{$add:[new Date,(t.startIn??0)*60*60*1e3]}}}},else:"$$buff"}}}}}},{$set:{[`buffs.${t.target}`]:{$cond:{if:{$in:[t.origin.split("/")[0],{$map:{input:`$buffs.${t.target}`,as:"buff",in:{$substr:["$$buff.origin",0,{$indexOfBytes:["$$buff.origin","/"]}]}}}]},then:`$buffs.${t.target}`,else:{$concatArrays:[`$buffs.${t.target}`,[{...n}]]}}}}}])}async removeBuff(e,t){await this.update(e,{$pull:{[`buffs.${t.target}`]:{origin:t.origin}}})}async updatePanoplyBuff(e,t,n,r){const i=await p.fromDBToEquipableEquipment(t),u=o.filterNullAndUndefined(Object.values(n)),c=(await E.getAllPopulated()).find(v=>v.panoplyId===i.panoply);if(!c)return;const w=c.equipments.filter(v=>(u.find(de=>v.entityId===de.entityId)||!r&&i.entityId===v.entityId)&&(r?i.entityId!==v.entityId:!0)).length,x=w===c.equipments.length?c.fullBonus:w>=c.equipments.length/2?c.halfBonus:void 0;c.halfBonus&&"target"in c.halfBonus&&await this.removeBuff(e,c.halfBonus),c.fullBonus&&"target"in c.fullBonus&&await this.removeBuff(e,c.fullBonus),x&&"target"in x&&await this.updateBuff(e,x)}async gainHp(e,t){const n=await this.get(e),i=await this.getMaxHp(e)-n.hp;await this.update(e,{$set:{hp:n.hp+Math.floor(Math.min(t,i))}})}async loseHp(e,t){await this.update(e,[{$set:{hp:{$max:[{$add:["$hp",-t]},0]}}}])}async updateHp(e,t){const n=await this.getMaxHp(e);await this.update(e,[{$set:{hp:{$round:[{$multiply:[{$divide:["$hp",t]},n]},0]}}}])}async addCharacteristics(e,t){const n=await this.getMaxHp(e),r=Object.fromEntries(Object.entries(t).filter(([,i])=>i!==0).map(([i,u])=>[`characteristics.${i}`,u]));await this.update(e,{$inc:r}),await this.updateHp(e,n)}async addScrollCharacteristic(e,t){const n=await this.getMaxHp(e),r=Object.fromEntries(Object.entries(t).filter(([,i])=>i!==0).map(([i,u])=>[`scrolls.${i}`,u]));await this.update(e,{$inc:r}),await this.updateHp(e,n)}async resetCharacteristics(e,t){const n=await this.getMaxHp(e),r={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};t?await this.update(e,{$set:{characteristics:r,"resetCharacteristics.free":!1}}):await this.update(e,{$set:{characteristics:r,"resetCharacteristics.nextAvailable":new Date(Date.now()+720*60*60*1e3)},$inc:{berry:-1e8}}),await this.updateHp(e,n)}async updateLastMessageWithXpDate(e){await this.update(e,{$set:{"xp.lastMessageWithXp":new Date}})}async resetMinutesInVoiceToday(e){await this.update(e,{$set:{"xp.voice.minutesInVoiceToday":0}})}async addMinutesInVoiceToday(e,t){await this.update(e,{$inc:{"xp.voice.minutesInVoiceToday":t}})}async updateLastVoiceConnection(e,t){await this.update(e,{$set:{"xp.voice.lastConnection":t}})}async incrementWorkUnluckyStreak(e){await this.update(e,{$inc:{workUnluckyStreak:1}})}async resetWorkUnluckyStreak(e){await this.update(e,{$set:{workUnluckyStreak:0}})}async updateUserXp(e,t){const n=await this.calcXp(e,t,await this.getHpRatio(e));return await this.addXp(e,n),n}async updateUserBerry(e,t,n){const r=await this.calcBerry(e,t,n);return await this.addBerry(e,r),r}}const _t=a=>O.find(a).lean(),Ct=async a=>await O.create({user:a});async function Nt(a){const e=await O.findOne({user:a}).lean();return e||f(await Ct(a))}const xt=(a,e)=>O.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Ft extends Rt{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Nt(e)}fetchManyFromDb(e){return _t(e)}updateInDb(e,t){return xt(e,t)}}const U=new Ft;class jt extends ${async updateSendDailyQuest(e,t){await this.update(e,{$set:{sendDailyQuest:t}})}async updateSendDailyReport(e,t){await this.update(e,{$set:{sendDailyReport:t}})}async updateInventorySort(e,t){await this.update(e,{$set:{"sort.inventory":t}})}async updateReminderSettings(e,t,n){await this.update(e,{$set:{[`reminder.${t}`]:n}})}getUsersWithDailyReportEnable(){return this.getMany({sendDailyReport:!0})}}const zt=a=>R.find(a).lean(),Ht=async a=>await R.create({user:a});async function Kt(a){const e=await R.findOne({user:a}).lean();return e||f(await Ht(a))}const Pt=(a,e)=>R.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Qt extends jt{constructor(){super(3600)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Kt(e)}fetchManyFromDb(e){return zt(e)}updateInDb(e,t){return Pt(e,t)}}const ne=new Qt;class Wt extends m{async getCommandCooldown(e,t){return(await this.get(e)).commands[t]}async lockUserCommand(e){await this.update(e,{$set:{lockUserCommand:new Date(Date.now()+2*3600*1e3)}}),await U.gainHp(e,1)}async useCommand(e,t,n){const{reminder:r}=await ne.get(e);await this.update(e,{$set:{[`commands.${t}`]:new Date(Date.now()+n)}}),r.commands[t]&&await Ee.addReminder(e,`commands/${t}`,new Date(Date.now()+n))}}const Gt=async a=>await j.create({user:a});async function Yt(a){const e=await j.findOne({user:a}).lean();return e||f(await Gt(a))}const Vt=(a,e)=>j.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Xt extends Wt{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Yt(e)}updateInDb(e,t){return Vt(e,t)}}const Lt=new Xt;class Jt extends ${async isOrnamentIds(e,t=()=>!0){const r=(await this.getAll()).filter(t).map(({ornamentId:i})=>i);return e.every(i=>r.includes(i))}isOrnament(e){return!!e&&"ornamentId"in e}isTitle(e){return e.type==="title"}isBackground(e){return e.type==="background"}isQuestTitle(e){return this.isTitle(e)&&!("faction"in e)&&!("price"in e)}isFactionTitle(e){return this.isTitle(e)&&"faction"in e}isShopTitle(e){return this.isTitle(e)&&"price"in e}async getAllBackgrounds(){return(await this.getAll()).filter(e=>this.isBackground(e))}async getAllTitles(){return(await this.getAll()).filter(e=>this.isTitle(e))}async getAllFactionTitles(){return(await this.getAll()).filter(e=>this.isFactionTitle(e))}async getAllQuestTitles(){return(await this.getAll()).filter(e=>this.isQuestTitle(e))}async getAllShopTitles(){return(await this.getAll()).filter(e=>this.isShopTitle(e))}formatBackgroundId(e){const t=o.isString(e)?e:e.ornamentId;return t==="background_default"?"par défaut":`"${o.capitalizeAllWords(t.split("_").join(" "))}"`}async getSomeShopTitles(e){const t=await this.getAllShopTitles();return o.sortBy(o.pickNthByOdds(e,t,n=>n.ornamentId,n=>n.odd??0),n=>n.price)}async getSomeBackgrounds(e){const t=await this.getAllBackgrounds();return o.sortBy(o.pickNthByOdds(e,t,n=>n.ornamentId,n=>n.odd??0),n=>n.price??0)}pickEachRarityOrnament(e,t){if(t.length!==y.RANK_IDS_WITHOUT_BASIC.length)throw new RangeError("pickEachRarityOrnament - must give same number of odds than ranks");return o.filterNullAndUndefined(t.map((n,r)=>{const i=y.RANK_IDS_WITHOUT_BASIC[r],u=e[i];return Math.random()>n||!u||!u.length?null:o.pickFrom(u)}))}}const Zt=new s.Schema({ornamentId:{unique:!0,index:1,required:!0,type:String},type:{required:!0,type:String},rankId:{required:!0,type:String},name:{required:!0,type:String},price:Number,odd:Number,size:Number,faction:String,roleId:String,strength:Number},{minimize:!1}),re=s.models?.Ornaments||s.model("Ornaments",Zt),ea=async(a,e)=>re.find(a,{},e).lean();async function ta(a){const e=await re.findOne({ornamentId:a}).lean();return e||null}const aa=(a,e)=>re.findOneAndUpdate(a,e,{returnDocument:"after"}).lean();class na extends Jt{constructor(){super(3600)}updateInDb(e,t){return aa(e,t)}fetchFromDb(e){return ta(e)}fetchManyFromDb(e,t){return ea(e,t)}getKey(e){return e.ornamentId}normalizeKey(e){return e}}const S=new na;class ra extends m{async unlockTitle(e,t){await S.isOrnamentIds([t],S.isTitle)&&await this.update(e,{$addToSet:{unlockedTitles:t}})}async unlockTitles(e,t){await S.isOrnamentIds(t,S.isTitle)&&await this.update(e,{$addToSet:{unlockedTitles:{$each:t}}})}async selectTitle(e,t){await this.update(e,{$set:{selectedTitle:t}})}async unlockBackground(e,t){await S.isOrnamentIds([t],S.isBackground)&&await this.update(e,{$addToSet:{unlockedBackgrounds:t}})}async unlockBackgrounds(e,t){await S.isOrnamentIds(t,S.isBackground)&&await this.update(e,{$addToSet:{unlockedBackgrounds:{$each:t}}})}async selectBackground(e,t){await this.update(e,{$set:{selectedBackground:t}})}async unlockBadge(e,t,n){t.isProgressive?await this.update(e,{$addToSet:{unlockedBadges:`${t.id}_${n}`}}):await this.update(e,{$addToSet:{unlockedBadges:t.id}})}async unlockFactionBadge(e,t){await this.update(e,{$addToSet:{unlockedFactionBadges:{$each:[`b_marine_${t}`,`b_revolutionary_${t}`,`b_pirate_${t}`]}}})}async unlockProfileAsset(e,t){await this.update(e,{$addToSet:{unlockedProfileAssets:t}})}async unlockBag(e,t){await this.update(e,{$addToSet:{unlockedBags:t}})}async selectBag(e,t){await this.update(e,{$set:{selectedBag:t}})}}const sa=async a=>await Q.create({user:a});async function ia(a){const e=await Q.findOne({user:a}).lean();return e||f(await sa(a))}const ua=async(a,e)=>Q.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class ca extends ra{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return ia(e)}updateInDb(e,t){return ua(e,t)}}const N=new ca;class da extends ${async getStatus(e,t){return(await this.get({user:e,questId:t})).status}async isCompleted(e,t){return await this.getStatus(e,t)==="COMPLETED"}async isStreaking(e,t){const{lastCompletionDate:n}=await this.get({user:e,questId:t});return!!n&&o.sameDay(o.yesterday(),n)}async getStreakMultiplier(e,t){const n=await this.get({user:e,questId:t});return await this.isStreaking(e,t)?1+Math.min(2,(n.streak??0)/10):1}async getCompletedCount(e){return(await this.getMany({user:e,status:y.QuestStatus.COMPLETED})).length}async completeQuest(e,t=!1){const n=o.yesterday();n.setHours(0,0,0,0);const r=new Date;return r.setHours(0,0,0,0),this.update(e,[{$set:{...t?{streak:{$cond:{if:{$and:[{$gte:["$lastCompletionDate",n]},{$lt:["$lastCompletionDate",r]}]},then:{$add:[{$ifNull:["$streak",0]},1]},else:1}}}:{},lastCompletionDate:new Date,status:y.QuestStatus.COMPLETED}}],{upsert:!1})}}function la(a){return B.find(a).lean()}const oa=async a=>await B.create({...a});async function pa(a){const e=await B.findOne(a).lean();return e||f(await oa(a))}function ya(a,e,t){return B.findOneAndUpdate(a,e,{upsert:!0,...t,returnDocument:"after"}).lean()}class fa extends da{constructor(){super(3600)}normalizeKey({user:e,questId:t}){return`${e.toString()}/${t}`}getKey({user:e,questId:t}){return{user:e,questId:t}}fetchFromDb(e){return pa(e)}fetchManyFromDb(e){return la(e)}updateInDb(e,t,n){return ya(e,t,n)}}const se=new fa;class ma extends m{async randomMessageIncrement(e){await this.update(e,{$inc:{randomMessageClaimed:1}})}async addWrittenTextChannel(e,t){await this.update(e,{$addToSet:{writeDifferentChatIds:t}})}async incrementMessageSend(e){await this.update(e,{$inc:{messageSent:1}})}async addTotalMinutesInVoice(e,t){await this.update(e,{$inc:{totalMinutesInVoice:t}})}}const ha=async a=>await Y.create({user:a});async function Sa(a){const e=await Y.findOne({user:a}).lean();return e||f(await ha(a))}const wa=(a,e)=>Y.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class ga extends ma{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Sa(e)}updateInDb(e,t){return wa(e,t)}}const ie=new ga;class ba extends m{async updateDailyReport(e){const t=await U.get(e),n=await N.get(e),r=await se.getMany({user:e,status:y.QuestStatus.COMPLETED}),i=await ie.get(e);await this.update(e,{$set:{xpYesterday:t.xp.amount,berryYesterday:t.berry,previousCompletedQuest:r.map(({questId:u})=>u),"previousOrnament.unlockedBadges":n.unlockedBadges,"previousOrnament.unlockedTitles":n.unlockedTitles,"previousOrnament.unlockedBackgrounds":n.unlockedBackgrounds,previousMessageSent:i.messageSent}})}async getDailyReport(e){const{previousOrnament:t,previousCompletedQuest:n,xpYesterday:r,berryYesterday:i,previousMessageSent:u}=await this.get(e),l=await U.get(e),c=await se.getMany({user:e,status:y.QuestStatus.COMPLETED}),w=await N.get(e),x=await ie.get(e),{berry:v,xp:de}=l,{voice:Re,amount:Sr}=de,{unlockedBadges:wr,unlockedBackgrounds:gr,unlockedTitles:br}=w;return{berry:v-i,xp:Sr-r,message:x.messageSent-u,voice:o.sameDay(Re.lastConnection,o.yesterday())?Re.minutesInVoiceToday:0,quest:o.exclude(c.map(({questId:$r})=>$r),n),badge:o.exclude(wr,t.unlockedBadges),title:o.exclude(br,t.unlockedTitles),background:o.exclude(gr,t.unlockedBackgrounds)}}async getAllDailyReportsToSend(){const e=await ne.getUsersWithDailyReportEnable(),t=await Ie.getMany({_id:{$in:e.map(({user:n})=>n)},faction:{$ne:"citizen"}});return await Promise.all(t.map(async({_id:n,discordId:r})=>({report:await this.getDailyReport(n),user:n,discordId:r})))}}const $a=a=>z.create({user:a});async function Ia(a){const e=await z.findOne({user:a}).lean();return e||f(await $a(a))}const Ea=(a,e)=>z.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Ua extends ba{constructor(){super(60)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Ia(e)}updateInDb(e,t){return Ea(e,t)}}const Da=new Ua;class Oa extends m{async setGuessGame(e,t,n,r){await this.update(e,{$set:{guess:{amount:t,tries:n,numberToGuess:r,lastGuess:0}}})}async resetGuessGame(e){await this.update(e,{$set:{guess:null}})}async updateGuessGame(e){await this.update(e,{$inc:{"guess.tries":1},$set:{"guess.lastGuess":Date.now()}})}}const Ta=async a=>await K.create({user:a});async function va(a){const e=await K.findOne({user:a}).lean();return e||f(await Ta(a))}const Ba=(a,e)=>K.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Aa extends Oa{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return va(e)}updateInDb(e,t){return Ba(e,t)}}const Ma=new Aa,ka=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},xp:{type:Number,default:0},berry:{type:Number,default:0},faction:{type:Number,default:0}}),q=s.models?.UserRank||s.model("UserRank",ka);class qa extends m{async computeAllXpRanks(){const t=(await O.aggregate([{$setWindowFields:{sortBy:{"xp.amount":-1},output:{xpRank:{$rank:{}}}}},{$project:{user:1,xpRank:1}}])).map(({user:n,xpRank:r})=>({updateOne:{filter:{user:n},update:{$set:{xp:r}},upsert:!0}}));t.length>0&&await q.bulkWrite(t),this.clearAll()}async computeAllBerryRanks(){const t=(await O.aggregate([{$setWindowFields:{sortBy:{berry:-1},output:{berryRank:{$rank:{}}}}},{$project:{user:1,berryRank:1}}])).map(({user:n,berryRank:r})=>({updateOne:{filter:{user:n},update:{$set:{berry:r}},upsert:!0}}));t.length>0&&await q.bulkWrite(t),this.clearAll()}async computeAllFactionRanks(){const t=(await I.aggregate([{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$setWindowFields:{partitionBy:"$faction",sortBy:{"meta.xp.amount":-1},output:{factionRank:{$rank:{}}}}},{$project:{factionRank:1}}])).map(({_id:n,factionRank:r})=>({updateOne:{filter:{user:n},update:{$set:{faction:r}},upsert:!0}}));t.length>0&&await q.bulkWrite(t),this.clearAll()}async computeAllRanks(){await Promise.all([this.computeAllXpRanks(),this.computeAllBerryRanks(),this.computeAllFactionRanks()])}}const Ra=async a=>await q.create({user:a});async function _a(a){const e=await q.findOne({user:a}).lean();return e||f(await Ra(a))}const Ca=(a,e)=>q.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Na extends qa{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return _a(e)}updateInDb(e,t){return Ca(e,t)}}const xa=new Na;class Fa extends m{async isBuyLimitReached(e,t,n){const r=await p.getAllEntitiesLimit();if(await p.isEntityId(t,p.isEquipment))return!1;const i=await this.get(e),u=i.limit?.[t];let l=r[t];const c=await h.hasRevolutionaryBuff(e);return i.lastShopId!==n?!1:(c==="half"&&t==="chest_2"&&(l+=2),c==="full"&&t==="chest_3"&&(l+=1),!!(l&&u&&u>=l))}async getShopItemRest(e,t,n,r=y.SHOP_DEFAULT_AVAILABLE_ENTITY_AMOUNT){const i=await p.getAllEntitiesLimit();if(await p.isEntityId(t,p.isEquipment))return r;let u=i[t];const l=await this.get(e),c=l.limit?.[t],w=await h.hasRevolutionaryBuff(e);return w==="half"&&t==="chest_2"&&(u+=2),w==="full"&&t==="chest_3"&&(u+=1),u?l.lastShopId!==n?u:c?u-c:Math.min(u,r):r}async increaseBuyLimit(e,t,n,r){await this.update(e,[{$set:{limit:{$cond:{if:{$eq:["$lastShopId",t]},then:{$setField:{field:n,input:{$ifNull:["$limit",{}]},value:{$add:[{$ifNull:[`$limit.${n}`,0]},r]}}},else:{[n]:r}}},lastShopId:t}}])}}const ja=async a=>await W.create({user:a}),za=async a=>{const e=await W.findOne({user:a}).lean();return e||f(await ja(a))},Ha=(a,e)=>W.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Ka extends Fa{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return za(e)}updateInDb(e,t){return Ha(e,t)}}const Pa=new Ka;class Qa extends m{async didSevenDoubleAtDoQ(e){await this.update(e,{$inc:{"doubleOrQuit.sevenDoubleInARowCount":1}})}async winWithBlackjack(e){await this.update(e,{$inc:{"blackJack.blackJackCount":1}})}async updateLastGames(e,t,n){await this.update(e,{$push:{lastGames:{$each:[{gameType:t,endState:n}],$position:0,$slice:20}}})}async drawIncrement(e){await this.update(e,{$inc:{drawCount:1}})}async bet666(e){const t=o.yesterday();t.setHours(0,0,0,0);const n=new Date;n.setHours(0,0,0,0),await M.updateOne({user:e,"bet666.last":{$gte:t,$lt:n}},{$inc:{"bet666.count":1},$set:{"bet666.last":new Date}}),await M.updateOne({user:e,"bet666.last":{$lt:t}},{$set:{"bet666.last":new Date,"bet666.count":1}}),this.invalidate(e)}async updateTotalBet(e,t){await this.update(e,{$inc:{totalBet:t}})}async updateRps(e,t){await this.update(e,[{$set:{"rps.count":{$cond:{if:{$eq:["$rps.lastRpsPlayed",t]},then:{$add:["$rps.count",1]},else:1}},"rps.lastRpsPlayed":t}}])}async hasGuessInOneTry(e){await this.update(e,{$inc:{"priceIsRight.guessInOneTryCount":1}})}async diceDoubleSix(e){await this.update(e,{$inc:{"dice.doubleSixCount":1}})}async diceDrawDoubleSix(e){await this.update(e,{$inc:{"dice.drawWithDoubleSixCount":1}})}}const Wa=async a=>await M.create({user:a});async function Ga(a){const e=await M.findOne({user:a}).lean();return e||f(await Wa(a))}const Ya=(a,e)=>M.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Va extends Qa{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Ga(e)}updateInDb(e,t){return Ya(e,t)}}const Xa=new Va;class La extends m{async workIncrement(e){await this.update(e,{$inc:{workCount:1}})}async updateTotalSpentInShop(e,t){await this.update(e,{$inc:{totalSpentInShop:t}})}}const Ja=a=>G.create({user:a});async function Za(a){const e=await G.findOne({user:a}).lean();return e||f(await Ja(a))}const en=(a,e)=>G.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class tn extends La{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Za(e)}updateInDb(e,t){return en(e,t)}}const Ue=new tn;class an extends m{async hasReportedSomeone(e){await this.update(e,{$set:{reportedSomeone:!0}})}async botPingIncrement(e){await this.update(e,{$inc:{botPingCount:1}})}async hasCelebrateBirthday(e){await this.update(e,{$set:{hasCelebrateBirthday:!0}})}async hasTagEveryone(e){await this.update(e,{$set:{tagEveryone:!0}})}async hasBetMin(e){await this.update(e,{$set:{"gamblingFlags.betMin":!0}})}async hasLoseEverything(e){await this.update(e,{$set:{"gamblingFlags.loseEverything":!0}})}async hasBet10M(e){await this.update(e,{$set:{"gamblingFlags.bet10M":!0}})}async hasWinBet10M(e){await this.update(e,{$set:{"gamblingFlags.winBet10M":!0}})}async hasLose10M(e){await this.update(e,{$set:{"gamblingFlags.lose10M":!0}})}}const nn=async a=>await V.create({user:a});async function rn(a){const e=await V.findOne({user:a}).lean();return e||f(await nn(a))}const sn=(a,e)=>V.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class un extends an{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return rn(e)}updateInDb(e,t){return sn(e,t)}}const cn=new un;class dn extends m{async readEdito(e){const t=new Date;t.setHours(0,0,0,0),await T.updateOne({user:e,"edito.lastTimeRead":{$gte:t}},{$inc:{"edito.readToday":1},$set:{"edito.lastTimeRead":new Date}}),await T.updateOne({user:e,"edito.lastTimeRead":{$lt:t}},{$set:{"edito.lastTimeRead":new Date,"edito.readToday":1}}),this.invalidate(e)}async getTotalEditoReadToday(){const e=new Date;return e.setHours(0,0,0,0),(await T.aggregate([{$match:{"edito.lastTimeRead":{$gte:e},"edito.readToday":{$gt:0}}},{$group:{_id:null,total:{$sum:"$edito.readToday"}}}]))[0]?.total??0}}const ln=async a=>await T.create({user:a});async function on(a){const e=await T.findOne({user:a}).lean();return e||f(await ln(a))}const pn=(a,e)=>T.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class yn extends dn{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return on(e)}updateInDb(e,t){return pn(e,t)}}const fn=new yn;class mn extends m{async updateCraftStats(e,t,n){const r=await p.get(n);!r||!p.isItem(r)||await this.update(e,{$inc:{"crafts.cookedMeal":p.isCookedMeal(r)?t:0,"crafts.scrolls":p.isScrollItem(r)?t:0,"crafts.totalCrafted":t}})}async incrementAlcoholDrink(e,t,n){["wine","beer","rhum"].includes(t)&&await this.update(e,{$inc:{"alcohols.wines":t==="wine"?n:0,"alcohols.beers":t==="beer"?n:0,"alcohols.rhums":t==="rhum"?n:0,"alcohols.totalConsumed":n}})}async incrementBottleUsedToday(e,t){const n=new Date;n.setHours(0,0,0,0),await k.updateOne({user:e,"bottle.lastUsed":{$gte:n}},{$inc:{"bottle.usedToday":t},$set:{"bottle.lastUsed":new Date}}),await k.updateOne({user:e,"bottle.lastUsed":{$lt:n}},{$set:{"bottle.lastUsed":new Date,"bottle.usedToday":t}}),this.invalidate(e)}async incrementBottleUsedTotal(e,t){await this.update(e,{$inc:{"bottle.totalUsed":t}})}async incrementChestOpenedTotal(e,t){await this.update(e,{$inc:{"chest.totalOpened":t}})}}const hn=async a=>await k.create({user:a});async function Sn(a){const e=await k.findOne({user:a}).lean();return e||f(await hn(a))}const wn=(a,e)=>k.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class gn extends mn{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Sn(e)}updateInDb(e,t){return wn(e,t)}}const bn=new gn;class $n extends ${async maxCraftQuantity(e,t){const n=await h.get(e);let r=1/0;for(const i of t)r=Math.min(r,Math.floor((n.itemList[i.entityId]??0)/i.size));return r}async hasEnoughItemsForRecipe(e,t,n){const r=await h.get(e);for(const i of t.entities)if((r.itemList[i.entityId]??0)<i.size*n)return!1;return!0}decodeCraftId(e){return e.split(";").map((t,n)=>({entityId:t==="null"?null:t,index:n}))}encodeCraftId(e){return e.map(({entityId:t})=>`${t}`).join(";")}async isValidRecipe(e){return!!(await this.getAll()).find(n=>n.craftId===e)}async getRecipeResult(e,t){const n=await h.get(e),r=(await E.getPanoplyBonus(n.equippedItems)).find(([i,u])=>i.panoplyId==="little_blacksmith"&&u!==null);return r?.[1]==="full"&&t==="chest_3"?"chest_blacksmith_3":r?.[1]==="half"&&t==="chest_2"?"chest_blacksmith_2":r?.[1]==="half"&&t==="chest_1"?"chest_blacksmith_1":t}}const In=new s.Schema({entityId:{type:String,required:!0},size:{type:Number,required:!0}},{_id:!1}),En=new s.Schema({entityId:{type:String,required:!0},size:{type:Number,required:!0}},{_id:!1}),Un=new s.Schema({craftId:{type:String,unique:!0,required:!0},name:{type:String,required:!0},entities:{type:[In],required:!0},result:{type:En,required:!0}},{minimize:!1}),J=s.models?.Recipes||s.model("Recipes",Un),Dn=async a=>await J.create({...a}),On=async(a,e)=>J.find(a,{},e).lean();async function Tn(a){const e=await J.findOne({craftId:a}).lean();return e||null}const vn=(a,e)=>J.findOneAndUpdate(a,e,{returnDocument:"after"}).lean();class Bn extends $n{constructor(){super(3600)}createInDb(e){return Dn(e)}updateInDb(e,t){return vn(e,t)}fetchFromDb(e){return Tn(e)}fetchManyFromDb(e,t){return On(e,t)}normalizeKey(e){return e}getKey(e){return e.craftId}}const An=new Bn,Mn=new s.Schema({bannedUserId:{type:String,index:!0,required:!0},authorId:{type:String,required:!0},unbannedTimestamp:{type:Date,index:1},reason:{type:String,required:!0},guildId:{type:String,required:!0}}),Z=s.models?.Bans||s.model("Bans",Mn),kn=(a,e)=>Z.deleteOne({bannedUserId:a,guildId:e});class qn extends ${async getUnbanUsers(){return this.getMany({unbannedTimestamp:{$lte:new Date,$ne:null}})}async banUserFromGuild({bannedUserId:e,guildId:t,...n}){await this.update({bannedUserId:e,guildId:t},{...n})}async isBannedFromGuild(e,t){const n=await this.get({bannedUserId:e,guildId:t});return!!(n&&(!n.unbannedTimestamp||n.unbannedTimestamp>new Date))}async deleteBan(e,t){await kn(e,t),this.invalidate({bannedUserId:e,guildId:t})}}const Rn=a=>Z.find(a).lean(),_n=a=>Z.findOne(a).lean(),Cn=(a,e)=>Z.findOneAndUpdate(a,e,{returnDocument:"after",upsert:!0}).lean();class Nn extends qn{constructor(){super(3600*36)}normalizeKey(e){return`${e.guildId}/${e.bannedUserId}`}getKey({bannedUserId:e,guildId:t}){return{bannedUserId:e,guildId:t}}fetchFromDb(e){return _n(e)}fetchManyFromDb(e){return Rn(e)}updateInDb(e,t){return Cn(e,t)}}const xn=new Nn,Fn=new s.Schema({senderId:{type:s.Schema.Types.ObjectId,required:!0,ref:"User"},receiverId:{type:s.Schema.Types.ObjectId,required:!0,index:!0,ref:"User"},amount:Number,gameMode:String,meta:{rps:{type:String,default:void 0}}}),ee=s.models?.Invitation||s.model("Invitation",Fn),jn=a=>ee.create({...a}),zn=async a=>{await ee.deleteMany({...a})};class Hn extends m{async sendInvitation({senderId:e,receiverId:t,gameMode:n,...r}){return await this.get({senderId:e,gameMode:n,receiverId:t})?null:await jn({...r,senderId:e,gameMode:n,receiverId:t})}async deleteInvitation({senderId:e,receiverId:t,gameMode:n}){await zn({senderId:e,gameMode:n,receiverId:t}),this.invalidate({senderId:e,gameMode:n,receiverId:t})}}const Kn=a=>ee.findOne({...a}).lean(),Pn=(a,e)=>ee.findOneAndUpdate(a,e,{returnDocument:"after"}).lean();class Qn extends Hn{constructor(){super(3600)}normalizeKey(e){return`${e.gameMode}/${e.receiverId}/${e.senderId}`}getKey({receiverId:e,gameMode:t,senderId:n}){return{gameMode:t,receiverId:e,senderId:n}}fetchFromDb(e){return Kn(e)}updateInDb(e,t){return Pn(e,t)}}const Wn=new Qn;class Gn extends m{async randomizeEditoPrice(e){const t=o.randomBetween(100,1001);return await this.update({guildId:e},{$set:{"edito.price":t}}),t}async setEditoMessageId(e,t){await this.update({guildId:e},{$set:{"edito.messageId":t}})}async setRankingMessage(e,t){await this.update({guildId:e},{$set:{"ranking.messageId":t}})}async addCrewChannelId(e,t,n){await this.update({guildId:e},{$push:{"crew.crewChannelIds":{channelId:n,crewId:t}}})}async updateRolesId(e,t){await this.update({guildId:e},{$set:Object.fromEntries(Object.entries(t).map(([n,r])=>[`roles.${n}`,r]))})}async updateChannelId(e,t){await this.update({guildId:e},{$set:Object.fromEntries(Object.entries(t).map(([n,r])=>[`channels.${n}`,r]))})}}const Yn=new s.Schema({guildId:{type:String,required:!0,unique:!0},ranking:{messageId:{type:String,default:null}},roles:{premium:{type:String,default:null},booster:{type:String,default:null},scam:{type:String,default:null},canChangeFaction:{type:String,default:null},canChooseFaction:{type:String,default:null},staff:{type:String,default:null},moderator:{type:String,default:null},marine:{type:String,default:null},pirate:{type:String,default:null},revolutionary:{type:String,default:null}},channels:{gambling:{type:String,default:null},work:{type:String,default:null},raid:{type:String,default:null},suggestion:{type:String,default:null},report:{type:String,default:null},reportModerator:{type:String,default:null},faction:{type:String,default:null},discussion:{type:String,default:null},questFallback:{type:String,default:null},reportBug:{type:String,default:null},shop:{type:String,default:null},edito:{type:String,default:null},crew:{type:String,default:null},ranking:{type:String,default:null}},edito:{price:{type:Number,default:100},messageId:{type:String,default:null}},crew:{crewChannelIds:{type:[{channelId:{type:String},crewId:{type:String}}],default:[]}}}),ue=s.models?.Settings||s.model("Settings",Yn),Vn=a=>ue.create({guildId:a}),Xn=async a=>{const e=await ue.findOne({guildId:a}).lean();return e||f(await Vn(a))},Ln=(a,e)=>ue.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"}).lean();class Jn extends Gn{constructor(){super(3600*24*30)}normalizeKey(e){return e}getKey({guildId:e}){return e}fetchFromDb(e){return Xn(e)}updateInDb(e,t){return Ln(e,t)}}const Zn=new Jn;class D{toDBShopItem(){return{price:this.price,size:this.size,id:"entityId"in this.data?this.data.entityId:this.data.ornamentId,currency:this.currency}}async onBuy(e,t){this.currency==="berry"?(await U.updateUserBerry(e,-1*this.price*t,!1),await Ue.updateTotalSpentInShop(e,this.price*t)):await h.removeItem(e,this.currency,this.price*t)}isBackground(){return!1}isChest(){return!1}isTitle(){return!1}isBoostXp(){return!1}isRepair(){return!1}isStore(){return!1}isObject(){return!1}isBottle(){return!1}isEquipment(){return!1}}class De extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await N.unlockBackground(e,this.data.ornamentId)}isBackground(){return!0}}class Oe extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await h.addItem(e,this.data.entityId,t)}isBoostXp(){return!0}}class Te extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await h.addItem(e,this.data.entityId,t)}isChest(){return!0}}class ve extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await h.addItem(e,this.data.entityId,t)}isObject(){return!0}}class Be extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await h.addEquipments(e,o.range({stop:t}).map(()=>p.seedEquipment({...this.data},Date.now()-Math.round(Math.random()*1e3))).map(n=>({entityId:n.entityId,seed:n.seed})))}isEquipment(){return!0}}class Ae extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await h.addItem(e,this.data.entityId,t)}isBottle(){return!0}}class Me extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await h.addItem(e,this.data.entityId,t)}isRepair(){return!0}}class ke extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await h.addItem(e,this.data.entityId,t)}isStore(){return!0}}class qe extends D{price;size;currency;data;constructor({price:e,item:t,size:n,currency:r}){super(),this.data=t,this.price=e,this.size=n,this.currency=r}async onBuy(e,t){await super.onBuy(e,t),await N.unlockTitle(e,this.data.ornamentId)}isTitle(){return!0}}class er extends m{async getShopItem(e,t){const r=(await this.get(e)).items.find(w=>w.id===t);if(!r)return;const{price:i,size:u,currency:l}=r,c=await p.get(r.id)??await S.get(r.id);if(S.isOrnament(c)&&S.isBackground(c))return new De({price:i,item:c,size:u,currency:l});if(S.isOrnament(c)&&S.isShopTitle(c))return new qe({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isChestItem(c))return new Te({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isBoostItem(c))return new Oe({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isRepairItem(c))return new Me({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isStoreItem(c))return new ke({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isObjectItem(c))return new ve({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isEquipment(c))return new Be({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isBottleItem(c))return new Ae({price:i,size:u,item:c,currency:l})}async getShopItemList(e){const t=await this.get(e),n=[];for(const{id:r}of t.items){const i=await this.getShopItem(e,r);i&&n.push(i)}return n}getShopItemId(e){return p.isEntity(e.data)?e.data.entityId:e.data.ornamentId}async updateShopStats(e,t,n){await this.update({shopType:e},{$inc:{"stats.berrySpent":t.price*n,"stats.itemBought":n,"stats.chestBought":t.isChest()?n:0,"stats.percentBought":t.data.type==="repair"?(t.data.effects.find(r=>r.type==="CREW_REPAIR")?.params.amount??0)*n:0,"stats.boostTimeBought":t.data.type==="boost"&&t.data.ms?t.data.ms/(1440*60*1e3):0}})}async buyShopItem(e,t,n,r){const i=t.map(u=>(u.id===this.getShopItemId(n)&&u.size&&(u.size-=r),u));await this.update({shopType:e},{$set:{items:i}})}async publish(e){await this.update({shopType:e},{$set:{publishedAt:new Date}})}async setShopItems(e,t){await this.update({shopType:e},{$set:{items:[...t]}})}}const tr=new s.Schema({shopType:{type:String,required:!0,unique:!0},publishedAt:{type:Date,default:new Date},duration:{type:Number,default:null},closeAt:{type:Date,default:null},items:{type:[{_id:!1,type:{price:Number,size:{type:Number,default:null},id:String,currency:String}}],default:[]},stats:{berrySpent:{type:Number,default:0},itemBought:{type:Number,default:0},chestBought:{type:Number,default:0},boostTimeBought:{type:Number,default:0},percentBought:{type:Number,default:0}}},{minimize:!1}),ce=s.models?.Shop||s.model("Shop",tr),ar=a=>ce.create({shopType:a}),nr=async a=>{const e=await ce.findOne({shopType:a}).lean();return e||f(await ar(a))},rr=(a,e)=>ce.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"}).lean();class sr extends er{constructor(){super(3600)}normalizeKey(e){return e}getKey({shopType:e}){return e}fetchFromDb(e){return nr(e)}updateInDb(e,t){return rr(e,t)}}const ir=new sr,ur=new s.Schema({warnedUserId:{type:String,required:!0,index:!0},authorId:String,date:{type:Date,default:Date.now()},reason:{type:String,default:null}}),te=s.models?.Warn||s.model("Warn",ur),cr=a=>te.countDocuments(a),dr=a=>te.create({...a}),lr=a=>te.findByIdAndDelete(a).lean();class or extends ${getUserWarns(e){return this.getMany({warnedUserId:e})}getUserWarnCount(e){return cr({warnedUserId:e})}async createWarn(e){await dr(e)}async deleteWarn(e){const t=await lr(e);return t&&this.invalidate(this.getKey(t)),t}}const pr=a=>te.find(a).lean();class yr extends or{constructor(){super(300)}normalizeKey(e){return e}getKey({warnedUserId:e,date:t}){return`${e}/${t.getTime()}`}fetchFromDb(){throw new Error("Method not implemented.")}fetchManyFromDb(e){return pr(e)}updateInDb(){throw new Error("Method not implemented.")}}const fr=new yr,mr=a=>{s.connect(a)};class hr extends s.Types.ObjectId{}d.BackgroundShopItem=De,d.BoostXpShopItem=Oe,d.BottleShopItem=Ae,d.COOLDOWN_COMMANDS=Ze,d.ChestShopItem=Te,d.EquipmentShopItem=Be,d.ObjectId=hr,d.ObjectShopItem=ve,d.QUEST_MIDDLEWARE_EVENT_NAME=b,d.RepairShopItem=Me,d.StoreShopItem=ke,d.TitleShopItem=qe,d.banService=xn,d.connectToServices=mr,d.emitQuestMiddlewareEvent=g,d.entityService=p,d.invitationService=Wn,d.ornamentService=S,d.panoplyService=E,d.recipeService=An,d.registerQuestMiddlewareEvents=xe,d.reminderService=Ee,d.settingsService=Zn,d.shopService=ir,d.userCooldownService=Lt,d.userDailyReportService=Da,d.userEncyclopediaService=L,d.userGamesService=Ma,d.userInventoryService=h,d.userMetaService=U,d.userOrnamentService=N,d.userQuestService=se,d.userRankService=xa,d.userService=Ie,d.userSettingsService=ne,d.userShopService=Pa,d.userStatsCasinoService=Xa,d.userStatsEconomyService=Ue,d.userStatsEngagementService=ie,d.userStatsFlagsService=cn,d.userStatsFrequencyService=fn,d.userStatsInventoryService=bn,d.warnService=fr,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
(function(l,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("mongoose"),require("@opfr/definitions"),require("node-cache"),require("events"),require("@opfr/utils-lang")):typeof define=="function"&&define.amd?define(["exports","mongoose","@opfr/definitions","node-cache","events","@opfr/utils-lang"],s):(l=typeof globalThis<"u"?globalThis:l||self,s(l.services={},l.mongoose,l["@opfr/definitions"],l["node-cache"],l.events,l["@opfr/utils-lang"]))})(this,(function(l,s,p,Me,Ae,o){"use strict";function qe(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const pe=qe(Ae),j="___ALL_ENTITIES___";class f{cache;constructor(e){this.cache=new Me({stdTTL:e,checkperiod:e*.2,useClones:!1})}async get(e,t){const r=this.normalizeKey(e),a=this.cache.get(r);if(a)return a;const i=await this.fetchFromDb(e,t??{});return i&&this.cache.set(r,i),i}async update(e,t,r){const a=await this.updateInDb(e,t,r);if(a){const i=this.getKey(a);this.cache.del(j),this.cache.set(this.normalizeKey(i),a)}return a}invalidate(e){this.cache.del(j),e&&this.cache.del(this.normalizeKey(e))}clearAll(){this.cache.flushAll()}}class m extends f{async getAll(){const e=this.cache.get(j);if(e)return e;const t=await this.fetchManyFromDb({},{});return this.cache.set(j,t),t.forEach(r=>{this.cache.set(this.normalizeKey(this.getKey(r)),r)}),t}async getMany(e,t={}){const r=await this.fetchManyFromDb(e,t);return r.forEach(a=>{this.cache.set(this.normalizeKey(this.getKey(a)),a)}),r}}const ye=new pe.EventEmitter,S=(n,e,t)=>{ye.emit(n,e,t)},ke=n=>{for(const[e,t]of Object.entries(n))ye.on(e,(r,a)=>{t(r,a)})},w={USER:"middleware/quest/USER",USER_INVENTORY:"middleware/quest/USER_INVENTORY",USER_META:"middleware/quest/USER_META",USER_ORNAMENT:"middleware/quest/USER_ORNAMENT",USER_QUEST:"middleware/quest/USER_QUEST",USER_STATS_CASINO:"middleware/quest/USER_STATS_CASINO",USER_STATS_ECONOMY:"middleware/quest/USER_STATS_ECONOMY",USER_STATS_ENGAGEMENT:"middleware/quest/USER_STATS_ENGAGEMENT",USER_STATS_FLAGS:"middleware/quest/USER_STATS_FLAGS",USER_STATS_FREQUENCY:"middleware/quest/USER_STATS_FREQUENCY",USER_STATS_INVENTORY:"middleware/quest/USER_STATS_INVENTORY"},fe=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,ref:"User",index:!0},questId:{type:String,required:!0,index:!0},status:{type:String,default:p.QuestStatus.IN_PROGRESS,index:1},lastCompletionDate:Date,streak:Number},{minimize:!1});fe.post("findOneAndUpdate",function(n){n&&S(w.USER_QUEST,n.user._id,n)});const q=s.models?.UserQuest||s.model("UserQuest",fe),Re=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},commands:{type:Map,of:Date,default:new Map}}),H=s.models?.UserCooldown||s.model("UserCooldown",Re),xe=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},xpYesterday:{type:Number,default:0},berryYesterday:{type:Number,default:0},previousOrnament:{unlockedBadges:{type:[String],default:[]},unlockedTitles:{type:[String],default:[]},unlockedBackgrounds:{type:[String],default:[]}},previousCompletedQuest:{type:[String],default:[]},previousMessageSent:{type:Number,default:0}}),P=s.models?.UserDailyReport||s.model("UserDailyReport",xe),_e=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},encyclopedia:{type:[String],default:[]}}),Q=s.models?.UserEncyclopedia||s.model("UserEncyclopedia",_e),Ce=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User",index:1},guess:{type:{tries:Number,amount:Number,numberToGuess:Number,lastGuess:Number},default:null}}),z=s.models?.UserGames||s.model("UserGames",Ce),me=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},equippedItems:{type:Object,default:{}},equipmentSave:{type:[Object],default:[]},equipmentList:{type:[{entityId:String,seed:Number}],default:[]},itemList:{type:Map,of:Number,default:{}},recipes:{type:[String],default:[]}},{minimize:!1});me.post("findOneAndUpdate",function(n){n&&S(w.USER_INVENTORY,n.user._id,n)});const Y=s.models?.UserInventory||s.model("UserInventory",me),Be=new pe.EventEmitter,Fe=(n,e)=>{Be.emit(n,e)},k={multiplier:{type:Number,default:0},origin:String,expireAt:{type:Date,default:null},startAt:{type:Date,default:null}},he=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},premium:{type:Date,default:null},booster:{type:Boolean,default:!1},berry:{type:Number,default:1e3,index:-1},xp:{lastMessageWithXp:{type:Date,default:new Date},voice:{lastConnection:{type:Date,default:new Date},minutesInVoiceToday:{type:Number,default:0}},amount:{type:Number,default:0,index:-1},boost:{type:Date,default:null}},buffs:{cooldown:{casino:{type:[k],default:[]},work:{type:[k],default:[]}},berry:{work:{type:[k],default:[]},global:{type:[k],default:[]}},drop:{work:{type:[k],default:[]}},xp:{global:{type:[k],default:[]}}},hp:{type:Number,default:100},energyMax:{type:Number,default:10},energy:{type:Number,default:10},workUnluckyStreak:{type:Number,default:0},characteristics:{vitality:{type:Number,default:0},strength:{type:Number,default:0},agility:{type:Number,default:0},chance:{type:Number,default:0},intelligence:{type:Number,default:0},wisdom:{type:Number,default:0}},scrolls:{vitality:{type:Number,default:0},strength:{type:Number,default:0},agility:{type:Number,default:0},chance:{type:Number,default:0},intelligence:{type:Number,default:0},wisdom:{type:Number,default:0}}});he.post("findOneAndUpdate",async function(n){n&&(S(w.USER_META,n.user._id,n),n.hp<=0&&Fe("death",n.user._id))});const D=s.models?.UserMeta||s.model("UserMeta",he),Se=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},unlockedFactionBadges:{type:[String],default:[]},unlockedBadges:{type:[String],default:[]},unlockedTitles:{type:[String],default:[]},selectedTitle:{type:String,default:null},unlockedBackgrounds:{type:[String],default:["default"]},selectedBackground:{type:String,default:"default"},unlockedProfileAssets:{type:[String],default:[]},unlockedBags:{type:[String],default:["default"]},selectedBag:{type:String,default:"default"}});Se.post("findOneAndUpdate",function(n){n&&S(w.USER_ORNAMENT,n.user._id,n)});const G=s.models?.UserOrnament||s.model("UserOrnament",Se),Ne=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},sort:{inventory:{type:String,default:"alpha"}},sendDailyReport:{type:Boolean,default:!1,index:!0},sendDailyQuest:{type:Boolean,default:!1},reminder:{commands:{type:Map,of:Boolean,default:new Map}}}),B=s.models?.UserSettings||s.model("UserSettings",Ne),we=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},totalBet:{type:Number,default:0},lastGames:{type:[{gameType:String,endState:Number}],default:[]},drawCount:{type:Number,default:0},bet666:{count:{type:Number,default:0},last:{type:Date,default:0}},dice:{doubleSixCount:{type:Number,default:0},drawWithDoubleSixCount:{type:Number,default:0}},blackJack:{blackJackCount:{type:Number,default:0}},rps:{lastRpsPlayed:{type:String,default:"paper"},count:{type:Number,default:-1}},doubleOrQuit:{sevenDoubleInARowCount:{type:Number,default:0}},priceIsRight:{guessInOneTryCount:{type:Number,default:0}}});we.post("findOneAndUpdate",function(n){n&&S(w.USER_STATS_CASINO,n.user._id,n)});const R=s.models?.UserStatsCasino||s.model("UserStatsCasino",we),ge=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},workCount:{type:Number,default:0},totalSpentInShop:{type:Number,default:0}});ge.post("findOneAndUpdate",function(n){n&&S(w.USER_STATS_ECONOMY,n.user._id,n)});const W=s.models?.UserStatsEconomy||s.model("UserStatsEconomy",ge),be=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},messageSent:{type:Number,default:0},totalMinutesInVoice:{type:Number,default:0},randomMessageClaimed:{type:Number,default:0},writeDifferentChatIds:{type:[String],default:[]}});be.post("findOneAndUpdate",function(n){n&&S(w.USER_STATS_ENGAGEMENT,n.user._id,n)});const V=s.models?.UserStatsEngagement||s.model("UserStatsEngagement",be),$e=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},tagEveryone:{type:Boolean,default:!1},botPingCount:{type:Number,default:0},reportedSomeone:{type:Boolean,default:!1},hasCelebrateBirthday:{type:Boolean,default:!1},gamblingFlags:{betMin:{type:Boolean,default:!1},bet10M:{type:Boolean,default:!1},lose10M:{type:Boolean,default:!1},winBet10M:{type:Boolean,default:!1},loseEverything:{type:Boolean,default:!1}}});$e.post("findOneAndUpdate",function(n){n&&S(w.USER_STATS_FLAGS,n.user._id,n)});const X=s.models?.UserStatsFlags||s.model("UserStatsFlags",$e),Ie=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},edito:{readToday:{type:Number,default:0,index:!0},lastTimeRead:{type:Date,default:new Date,index:!0}}});Ie.post("findOneAndUpdate",function(n){n&&S(w.USER_STATS_FREQUENCY,n.user._id,n)});const M=s.models?.UserStatsFrequency||s.model("UserStatsFrequency",Ie),Ue=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},bottle:{totalUsed:{type:Number,default:0},usedToday:{type:Number,default:0},lastUsed:{type:Date,default:new Date}},chest:{totalOpened:{type:Number,default:0}},alcohols:{wines:{type:Number,default:0},rhums:{type:Number,default:0},beers:{type:Number,default:0},totalConsumed:{type:Number,default:0}},crafts:{cookedMeal:{type:Number,default:0},scrolls:{type:Number,default:0},totalCrafted:{type:Number,default:0}}});Ue.post("findOneAndUpdate",function(n){n&&S(w.USER_STATS_INVENTORY,n.user._id,n)});const x=s.models?.UserStatsInventory||s.model("UserStatsInventory",Ue),se=new s.Schema({discordId:{type:String,required:!0,unique:!0},scam:{type:Boolean,default:!1},birthday:{type:Date,default:null,index:1},faction:{type:String,default:p.DEFAULT_FACTION,index:1},canChangeFaction:{type:Boolean,default:!1},canChooseFaction:{type:Boolean,default:!1}});se.post("findOneAndUpdate",function(n){n&&S(w.USER,n._id,n)}),se.post("deleteOne",async function(){const n=this.getQuery()._id;await H.deleteOne({user:n}),await P.deleteOne({user:n}),await Q.deleteOne({user:n}),await z.deleteOne({user:n}),await Y.deleteOne({user:n}),await D.deleteOne({user:n}),await G.deleteOne({user:n}),await q.deleteMany({user:n}),await B.deleteOne({user:n}),await R.deleteOne({user:n}),await W.deleteOne({user:n}),await V.deleteOne({user:n}),await X.deleteOne({user:n}),await M.deleteOne({user:n}),await x.deleteOne({user:n})});const $=s.models?.User||s.model("User",se);class Ke extends m{getByObjectId(e){return this.update({_id:e},{})}getNextBirthdays(){const e=new Date,t=e.getFullYear();return $.aggregate([{$match:{birthday:{$ne:null}}},{$set:{birthdayThisYear:{$dateFromParts:{year:t,month:{$month:"$birthday"},day:{$dayOfMonth:"$birthday"}}}}},{$set:{nextBirthday:{$cond:[{$lt:["$birthdayThisYear",e]},{$dateFromParts:{year:{$add:[t,1]},month:{$month:"$birthday"},day:{$dayOfMonth:"$birthday"}}},"$birthdayThisYear"]}}},{$sort:{nextBirthday:1}},{$limit:10},{$project:{_id:0,discordId:1,birthday:1,nextBirthday:1}}])}getFactionRanking(e){return $.aggregate([{$match:{faction:e}},{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$sort:{"meta.xp.amount":-1}},{$limit:10},{$project:{_id:1,discordId:1,"meta.xp.amount":1}}])}getGlobalRanking(){return $.aggregate([{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$sort:{"meta.xp.amount":-1}},{$limit:10},{$project:{_id:1,discordId:1,"meta.xp.amount":1}}])}getBerryRanking(){return $.aggregate([{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$sort:{"meta.berry":-1}},{$limit:10},{$project:{_id:1,discordId:1,"meta.berry":1}}])}getQuestRanking(){return q.aggregate([{$match:{status:p.QuestStatus.COMPLETED}},{$group:{_id:"$user",questCount:{$sum:1}}},{$setWindowFields:{sortBy:{questCount:-1},output:{rank:{$rank:{}}}}},{$sort:{rank:1}},{$limit:10},{$lookup:{from:"users",localField:"_id",foreignField:"_id",as:"user"}},{$unwind:"$user"},{$project:{_id:0,discordId:"$user.discordId",questCount:1,rank:1}}])}getTodayAllBirthday(){const e=new Date;return $.aggregate([{$match:{birthday:{$ne:null}}},{$addFields:{birthMonth:{$month:"$birthday"},birthDay:{$dayOfMonth:"$birthday"}}},{$addFields:{currentMonth:{$month:e},currentDay:{$dayOfMonth:e}}},{$match:{$expr:{$and:[{$eq:["$birthMonth","$currentMonth"]},{$eq:["$birthDay","$currentDay"]}]}}}])}async canChooseFaction(e,t){typeof e=="string"?await this.update({discordId:e},{$set:{canChooseFaction:t}}):await this.update({_id:e},{$set:{canChooseFaction:t}})}async canChangeFaction(e,t){typeof e=="string"?await this.update({discordId:e},{$set:{canChangeFaction:t}}):await this.update({_id:e},{$set:{canChangeFaction:t}})}async setBirthday(e,t){await this.update({discordId:e},{$set:{birthday:t}})}async updateFaction(e,t){await this.update({discordId:e},{$set:{faction:t}})}async updateScam(e,t){await this.update({discordId:e},{$set:{scam:t}})}}const je=(n,e)=>$.find(n,{},e).lean(),y=n=>n.toObject({flattenMaps:!0,flattenObjectIds:!1}),He=n=>$.create({discordId:n});async function Pe(n,{upsert:e=!0,...t}){const r=await $.findOne({discordId:n},{},t).lean();return!r&&e?y(await He(n)):r}const Qe=(n,e)=>$.findOneAndUpdate(n,e,{upsert:!0,returnDocument:"after"}).lean();class ze extends Ke{constructor(){super(3600)}normalizeKey(e){return e}getKey({discordId:e}){return e}fetchFromDb(e,t){return Pe(e,t)}fetchManyFromDb(e,t){return je(e,t)}updateInDb(e,t){return Qe(e,t)}}const Te=new ze,Ye=new s.Schema({user:{type:s.Schema.Types.ObjectId,ref:"User",required:!0,index:!0},date:{type:Date,index:-1,required:!0},type:{type:String,required:!0}},{minimize:!1}),F=s.models?.Reminder||s.model("Reminder",Ye),Ge=async n=>{await F.deleteMany(n)},We=async(n,e)=>{await F.deleteOne({user:n,type:e})};class Ve extends m{getAllPassedReminder(){return this.getMany({date:{$lte:new Date}})}async addReminder(e,t,r){await this.update({user:e,type:t},{$set:{date:r}},{upsert:!0})}async updateReminderDate(e,t,r){await this.update({user:e,type:t},[{$set:{date:{$add:["$date",r]}}}])}async removeReminder(e,t){await We(e,t),this.invalidate({user:e,type:t})}async deleteSelectedReminders(e){const t=e.map(r=>r._id);await Ge({_id:{$in:t}}),e.forEach(r=>{this.invalidate({user:r.user,type:r.type})})}}function Xe(n,e){return F.find(n,{},e).lean()}async function Le(n){const e=await F.findOne(n).lean();return e||null}async function Je(n,e,t){return F.findOneAndUpdate(n,e,{...t,returnDocument:"after"}).lean()}class Ze extends Ve{constructor(){super(300)}getKey(e){return{user:e.user,type:e.type}}normalizeKey({user:e,type:t}){return`${e.toString()}/${t}`}fetchFromDb(e){return Le(e)}fetchManyFromDb(e,t){return Xe(e,t)}updateInDb(e,t,r={upsert:!1}){return Je(e,t,r)}}const ve=new Ze,et=new s.Schema({panoplyId:{unique:!0,index:1,required:!0,type:String},name:{required:!0,type:String},equipments:{required:!0,type:[{type:s.Schema.Types.ObjectId,ref:"Entities"}]},fullBonusStr:{type:String},halfBonusStr:{type:String},fullBonus:s.Schema.Types.Mixed,halfBonus:s.Schema.Types.Mixed},{minimize:!1}),N=s.models?.Panoplies||s.model("Panoplies",et),tt=(n,e)=>N.find(n,{},e).lean(),nt=async(n,e)=>N.find(n,{},e).populate("equipments");async function rt(n){const e=await N.findOne({panoplyId:n}).lean();return e||null}const at=async n=>N.findOne(n).populate("equipments");class st extends m{getAllPopulated(){return nt({},{})}getPopulated(e){return at({panoplyId:e})}hasPanoply(e,t){const r=o.filterNullAndUndefined(Object.values(e)),a=t.equipments.filter(i=>r.find(u=>u.entityId===i.entityId)).length;if(a===t.equipments.length)return t.fullBonus;if(a>=t.equipments.length/2)return t.halfBonus}async getPanoplyBonus(e){const t=[],r=await this.getAllPopulated();for(const a of r){const i=o.filterNullAndUndefined(Object.values(e)),u=a.equipments.filter(c=>i.find(({entityId:d})=>d===c.entityId));u.length===a.equipments.length?t.push([a,"full"]):u.length>=a.equipments.length/2?t.push([a,"half"]):u.length>=1&&t.push([a,null])}return t}}const it=async(n,e)=>N.findOneAndUpdate(n,e,{returnDocument:"after"}).lean();class ut extends st{constructor(){super(3600)}normalizeKey(e){return e}getKey({panoplyId:e}){return e}updateInDb(e,t){return it(e,t)}fetchFromDb(e){return rt(e)}fetchManyFromDb(e,t){return tt(e,t)}}const A=new ut,ct=new s.Schema({type:{type:String,enum:p.EFFECT_KEYS,required:!0},params:{type:s.Schema.Types.Mixed}},{_id:!1}),dt=new s.Schema({entityId:{unique:!0,required:!0,type:String}},{minimize:!1,discriminatorKey:"type"}),lt=new s.Schema({category:{required:!0,type:String},subtype:{type:String},rankId:String,effects:{type:[ct],default:[]},usage:{_id:!1,type:{mode:String,craft:Boolean},default:void 0}}),ot=new s.Schema({category:{required:!0,type:String},characteristics:{_id:!1,type:Object},panoply:String}),_=s.models?.Entities||s.model("Entities",dt),pt=_.discriminator("item",lt);_.discriminator("equipment",ot);const yt=async(n,e)=>_.find(n,{},e).lean(),ft=async(n,e)=>pt.find(n,{},e).lean();class mt extends m{isEntity(e){return!!e&&"entityId"in e}isItem(e){return e.type==="item"}isEquipment(e){return e.type==="equipment"}async isEntityId(e,t=()=>!0){return(await this.getAll()).filter(t).map(({entityId:a})=>a).includes(e)}async idArrayToEntities(e){return(await this.getAll()).filter(t=>e.includes(t.entityId))}recordToEntities(e){return this.idArrayToEntities(Object.keys(e))}async recordToEntityTuple(e){const t=await this.getAll();return o.recordToArray(e).reduce((r,[a,i])=>{const u=t.find(({entityId:c})=>c===a);return u&&r.push([u,i]),r},[])}async getAllEntitiesLimit(){const e=await this.getAll();return o.arrayToRecord(e.map(t=>[t.entityId,t.shop?.limit??0]))}async getAllEntitiesBy(e){return(await this.getAll()).filter(e)}async getAllItemsBy(e){return(await ft({},{})).filter(e)}async fromDBToEquipableEquipment(e){const r=(await this.getAll()).filter(a=>this.isEquipment(a)).find(({entityId:a})=>a===e.entityId);if(!r)throw new Error(`cannot find any equipment: ${e.entityId}`);return this.seedEquipment(r,e.seed)}async getUserEquipmentsCharacteristics(e){let t={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};const r=await A.getAllPopulated();for(const a of p.EQUIPMENT_SLOT){const i=e[a];i&&(t=o.mergeObjects(t,(await this.fromDBToEquipableEquipment(i)).characteristics,(u,c)=>u+c))}for(const a of r){const i=A.hasPanoply(e,a);i&&!("target"in i)&&(t=o.mergeObjects(t,i,(u,c)=>u+c))}return t}filterUsableEntities(e){return e.filter(t=>this.isConsumableItem(t)&&t.usage?.mode)}hasUsableEntities(e){return!!e.find(t=>this.isConsumableItem(t)&&t.usage?.mode)}isChestItem(e){return this.isItem(e)&&e.category==="chest"}isConsumableItem(e){return this.isItem(e)&&e.category==="consumable"}isResourceItem(e){return this.isItem(e)&&e.category==="resource"}isSameEquipment(e,t){return e.entityId===t.entityId&&e.seed===t.seed}seedEquipment(e,t){const r=o.seededRandom(t),a=o.sortBy(o.recordToArray(e.characteristics),([i])=>i);return{...e,seed:t,characteristics:Object.fromEntries(a.map(([i,u])=>[i,Array.isArray(u)?o.randomBetween(u[0],u[1]+1,r):u]))}}isEquipped(e,t){return!!Object.values(e).find(r=>r&&this.isSameEquipment(r,t))}}const ht=async n=>await _.create({...n});async function St(n){const e=await _.findOne({entityId:n}).lean();return e||null}const wt=(n,e)=>_.findOneAndUpdate(n,e,{returnDocument:"after"}).lean();class gt extends mt{constructor(){super(3600)}createInDb(e){return ht(e)}updateInDb(e,t){return wt(e,t)}fetchFromDb(e){return St(e)}fetchManyFromDb(e,t){return yt(e,t)}normalizeKey(e){return e}getKey(e){return e.entityId}}const h=new gt;class bt extends f{hasAlreadyFoundEntity(e,t){return e.encyclopedia.includes(t)}async addEntities(e,t){await this.update(e,{$addToSet:{encyclopedia:{$each:t}}})}}const $t=async n=>await Q.create({user:n});async function It(n){const e=await Q.findOne({user:n}).lean();return e||y(await $t(n))}const Ut=(n,e)=>Q.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class Tt extends bt{constructor(){super(300)}fetchFromDb(e){return It(e)}getKey({user:e}){return e}normalizeKey(e){return e.toString()}updateInDb(e,t){return Ut(e,t)}}const L=new Tt;class vt extends f{async getUserEquipmentsCharacteristics(e){let t={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};for(const r of p.EQUIPMENT_SLOT){const a=e.equippedItems?.[r];if(!a)continue;const i=await h.fromDBToEquipableEquipment(a);t=o.mergeObjects(t,i.characteristics,(u,c)=>u+c)}return t}async hasInventoryRequirements(e,t){const r=await this.get(e);return o.recordToArray(t).reduce((a,[i,u])=>a&&(r.itemList[i]??0)>=(u??0),!0)}async hasEnoughEntity(e,t,r){return((await this.get(e)).itemList[r]??0)>=t}async getItemList(e){return(await this.get(e)).itemList}async calcMinStreakForWorkLoot(e){const t=await this.get(e),r=(await A.getPanoplyBonus(t.equippedItems)).find(([a,i])=>a.panoplyId==="marine"&&i!==null);return r&&r[1]==="full"?10:r&&r[1]==="half"?20:1/0}async hasRevolutionaryBuff(e){const t=await this.get(e);return(await A.getPanoplyBonus(t.equippedItems)).find(([a,i])=>a.panoplyId==="revolutionary"&&i!==null)?.[1]??null}async addItem(e,t,r){await this.update(e,{$inc:{[`itemList.${t}`]:r}}),await L.addEntities(e,[t])}async addItems(e,t){await this.update(e,{$inc:Object.fromEntries(Object.entries(t).filter(([,r])=>(r??0)>0).map(([r,a])=>[`itemList.${r}`,a]))}),await L.addEntities(e,o.recordToArray(t).filter(([,r])=>r>0).map(([r])=>r))}async removeItem(e,t,r){r!==0&&await this.update(e,[{$set:{[`itemList.${t}`]:{$max:[{$add:[`$itemList.${t}`,-r]},0]}}}])}async removeEquipment(e,t,r){await this.update(e,{$pull:{equipmentList:{entityId:t,seed:r}}})}async removeAllItem(e,t){await this.update(e,{$set:{[`itemList.${t}`]:0}})}async addEquipments(e,t){await this.update(e,{$push:{equipmentList:{$each:t}}}),await L.addEntities(e,t.map(r=>r.entityId))}async saveEquipments(e){await this.update(e,[{$set:{equipmentSave:{$push:["$equipmentSave","$equippedItems"]}}}])}async changeEquippedEquipment(e,t){const r=await this.get(e);r?.equipmentSave[t]&&await this.equip(e,r.equipmentSave[t])}async equip(e,t){const r=await v.getMaxHp(e),a=Object.fromEntries(o.recordToArray(t).map(([i,u])=>[`equippedItems.${i}`,u]));await this.update(e,{$set:a}),await v.updateHp(e,r)}async unequip(e,t){const r=await v.getMaxHp(e);await this.update(e,{$set:{[`equippedItems.${t}`]:null}}),await v.updateHp(e,r)}async craftItem(e,t,r,a){for(const{entityId:c,size:d}of t.entities)await this.removeItem(e,c,d*r);const{entityId:i,size:u}=t.result;await h.isEntityId(i,h.isEquipment)?await this.addEquipments(e,[{entityId:i,seed:a}]):await h.isEntityId(i,h.isItem)&&await this.addItem(e,i,u*r)}async dismantleEntity(e,t,r,a,i){h.isEquipment(t)?await this.removeEquipment(e,t.entityId,i):h.isItem(t)&&await this.removeItem(e,t.entityId,a);for(const{entityId:u,quantity:c}of r)await h.isEntityId(u,h.isItem)&&await this.addItem(e,u,a*c);await this.removeItem(e,"tools",1)}async enchantItem(e,t,r,a,i){await this.removeItem(e,t,i*4),await this.removeItem(e,a,i),await this.addItem(e,r,i)}async unlockRecipe(e,t){await this.update(e,{$addToSet:{recipes:t}})}}const Et=n=>Y.create({user:n});async function Ot(n){const e=await Y.findOne({user:n}).lean();return e||y(await Et(n))}const Dt=(n,e)=>Y.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class Mt extends vt{constructor(){super(300)}fetchFromDb(e){return Ot(e)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}updateInDb(e,t){return Dt(e,t)}}const T=new Mt;class At extends m{async getTotalCharacteristics(e){const{characteristics:t,scrolls:r}=await this.get(e);return o.arrayToRecord(p.CHARACTERISTICS.map(a=>[a,p.getComputedCharacteristicValue(t[a])+r[a]]))}async isCooldownForXpPassed(e){const t=await this.get(e);return Date.now()-t.xp.lastMessageWithXp.getTime()>60*1e3}async getAllWithExpiredBuffs(){const e=new Date;return this.getMany({$or:[{"xp.boost":{$lt:e}},{"buffs.cooldown.casino":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.cooldown.work":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.berry.work":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.berry.global":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.drop.work":{$elemMatch:{expireAt:{$lt:e}}}},{"buffs.xp.global":{$elemMatch:{expireAt:{$lt:e}}}}]})}async calcXpBoost(e){const t=await this.get(e),{boost:r}=t.xp,a=r!==null&&Date.now()<r.getTime()?.2:0,i=Math.max(t.premium?.5:0,t.booster?.25:0);return a+i+t.buffs.xp.global.reduce((u,{expireAt:c,startAt:d,multiplier:g})=>d&&d>new Date||c&&o.hasExpire(c)?u:u+g,0)}calcMessageXp(e){const t=e.trim().length,r=2;return t<10?10*r:t>300?300*r:t*r}async getXpDeathPenalties(e){const t=await this.get(e),r=p.getCurrentLevel(t.xp.amount);return r<=10?5e3:r<=20?1e4:r<=30?2e4:r<=40?3e4:r<=50?5e4:r<=60?75e3:r<=70?15e4:r<=80?25e4:r<=90?4e5:r<=100?75e4:14e6}async calcXp(e,t,r){return t*=1+await this.calcXpBoost(e),Math.ceil(t*r)}async calcBerry(e,t,r){if(t<=0)return t;const a=r?1:await this.calcBuffMultiplier(e,"berry","global");return Math.ceil(t*(a||1))}async calcBuffMultiplier(e,t,r){return(await this.get(e)).buffs[t][r].reduce((u,{expireAt:c,startAt:d,multiplier:g})=>u+(new Date>=(d??new Date)&&(!c||!o.hasExpire(c))?g:0),1)}async getMaxHp(e){const t=await T.get(e),{vitality:r}=await this.getTotalCharacteristics(e),a=await T.getUserEquipmentsCharacteristics(t);return(r+a.vitality)*p.HP_PER_VITALITY+p.DEFAULT_MAX_HP}async getHpRatio(e){const t=await this.get(e),r=await this.getMaxHp(e);return Math.min(t.hp/r,1)}async hasCharacteristicRequirement(e,t){const r=await T.get(e),a=await T.getUserEquipmentsCharacteristics(r),i=o.mergeObjects(await this.getTotalCharacteristics(e),a,(u,c)=>u+c);if("sum"in t){let u=0;for(const c of t.characteristics)u+=i[c]??0;return u>=t.sum}else{for(const u of Object.keys(t))if(i[u]<(t[u]??0))return!1;return!0}}async hasMalusBuff(e){const t=await this.get(e);for(const r of Object.values(t.buffs))for(const a of Object.values(r))for(const{multiplier:i,startAt:u,expireAt:c}of a)if(i<0&&(!c||!o.hasExpire(c))&&(u??new Date)<=new Date)return!0;return!1}async addBerry(e,t){await this.update(e,[{$set:{berry:{$max:[{$add:["$berry",t]},0]}}}])}async addXp(e,t){await this.update(e,{$inc:{"xp.amount":t}})}async updatePremium(e,t){await this.update(e,{$set:{premium:t}})}async updateBooster(e,t){await this.update(e,{$set:{booster:t}})}async updateBoost(e,t){const{xp:{boost:r}}=await this.update(e,[{$set:{"xp.boost":{$cond:{if:{$or:[{$not:"$xp.boost"},{$lt:["$xp.boost",new Date]}]},then:{$add:[new Date,t]},else:{$add:["$xp.boost",t]}}}}}]);return r}async updateBuff(e,t){if(Array.isArray(t)){for(const a of t)await this.updateBuff(e,a);return}const r=p.transformToDBBuff(t);await this.update(e,[{$set:{[`buffs.${t.target}`]:{$map:{input:`$buffs.${t.target}`,as:"buff",in:{$cond:{if:{$eq:[{$substr:["$$buff.origin",0,{$indexOfBytes:["$$buff.origin","/"]}]},t.origin.split("/")[0]]},then:{multiplier:t.multiplier,origin:t.origin,expireAt:r.expireAt?{$cond:{if:{$lt:["$$buff.expireAt",new Date]},then:r.expireAt,else:{$add:["$$buff.expireAt",(t.endIn??0)*60*60*1e3]}}}:null,startAt:{$cond:{if:{$gte:["$$buff.startAt",new Date]},then:"$$buff.startAt",else:{$add:[new Date,(t.startIn??0)*60*60*1e3]}}}},else:"$$buff"}}}}}},{$set:{[`buffs.${t.target}`]:{$cond:{if:{$in:[t.origin.split("/")[0],{$map:{input:`$buffs.${t.target}`,as:"buff",in:{$substr:["$$buff.origin",0,{$indexOfBytes:["$$buff.origin","/"]}]}}}]},then:`$buffs.${t.target}`,else:{$concatArrays:[`$buffs.${t.target}`,[{...r}]]}}}}}])}async removeBuff(e,t){await this.update(e,{$pull:{[`buffs.${t.target}`]:{origin:t.origin}}})}async updatePanoplyBuff(e,t,r,a){const i=await h.fromDBToEquipableEquipment(t),u=o.filterNullAndUndefined(Object.values(r)),d=(await A.getAllPopulated()).find(b=>b.panoplyId===i.panoply);if(!d)return;const g=d.equipments.filter(b=>(u.find(U=>b.entityId===U.entityId)||!a&&i.entityId===b.entityId)&&(a?i.entityId!==b.entityId:!0)).length,O=g===d.equipments.length?d.fullBonus:g>=d.equipments.length/2?d.halfBonus:void 0;d.halfBonus&&"target"in d.halfBonus&&await this.removeBuff(e,d.halfBonus),d.fullBonus&&"target"in d.fullBonus&&await this.removeBuff(e,d.fullBonus),O&&"target"in O&&await this.updateBuff(e,O)}async gainHp(e,t){const r=await this.get(e),i=await this.getMaxHp(e)-r.hp;await this.update(e,{$set:{hp:r.hp+Math.floor(Math.min(t,i))}})}async loseHp(e,t){await this.update(e,[{$set:{hp:{$max:[{$add:["$hp",-t]},0]}}}])}async updateHp(e,t){const r=await this.getMaxHp(e);await this.update(e,[{$set:{hp:{$round:[{$multiply:[{$divide:["$hp",t]},r]},0]}}}])}async addCharacteristics(e,t){const r=await this.getMaxHp(e),a=Object.fromEntries(Object.entries(t).filter(([,i])=>i!==0).map(([i,u])=>[`characteristics.${i}`,u]));await this.update(e,{$inc:a}),await this.updateHp(e,r)}async addScrollCharacteristic(e,t){const r=await this.getMaxHp(e),a=Object.fromEntries(Object.entries(t).filter(([,i])=>i!==0).map(([i,u])=>[`scrolls.${i}`,u]));await this.update(e,{$inc:a}),await this.updateHp(e,r)}async resetCharacteristics(e){const t=await this.getMaxHp(e),r={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};await this.update(e,{$set:{characteristics:r},$inc:{berry:-1e8}}),await this.updateHp(e,t)}async updateLastMessageWithXpDate(e){await this.update(e,{$set:{"xp.lastMessageWithXp":new Date}})}async resetMinutesInVoiceToday(e){await this.update(e,{$set:{"xp.voice.minutesInVoiceToday":0}})}async addMinutesInVoiceToday(e,t){await this.update(e,{$inc:{"xp.voice.minutesInVoiceToday":t}})}async updateLastVoiceConnection(e,t){await this.update(e,{$set:{"xp.voice.lastConnection":t}})}async incrementWorkUnluckyStreak(e){await this.update(e,{$inc:{workUnluckyStreak:1}})}async resetWorkUnluckyStreak(e){await this.update(e,{$set:{workUnluckyStreak:0}})}async updateUserXp(e,t){const r=await this.calcXp(e,t,await this.getHpRatio(e));return await this.addXp(e,r),r}async updateUserBerry(e,t,r){const a=await this.calcBerry(e,t,r);return await this.addBerry(e,a),a}}const qt=n=>D.find(n).lean(),kt=async n=>await D.create({user:n});async function Rt(n){const e=await D.findOne({user:n}).lean();return e||y(await kt(n))}const xt=(n,e)=>D.findOneAndUpdate({user:n},e,{returnDocument:"after",upsert:!0}).lean();class _t extends At{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Rt(e)}fetchManyFromDb(e){return qt(e)}updateInDb(e,t){return xt(e,t)}}const v=new _t;class Ct extends m{async updateSendDailyQuest(e,t){await this.update(e,{$set:{sendDailyQuest:t}})}async updateSendDailyReport(e,t){await this.update(e,{$set:{sendDailyReport:t}})}async updateInventorySort(e,t){await this.update(e,{$set:{"sort.inventory":t}})}async updateReminderSettings(e,t,r){await this.update(e,{$set:{[`reminder.${t}`]:r}})}getUsersWithDailyReportEnable(){return this.getMany({sendDailyReport:!0})}}const Bt=n=>B.find(n).lean(),Ft=async n=>await B.create({user:n});async function Nt(n){const e=await B.findOne({user:n}).lean();return e||y(await Ft(n))}const Kt=(n,e)=>B.findOneAndUpdate({user:n},e,{returnDocument:"after",upsert:!0}).lean();class jt extends Ct{constructor(){super(3600)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Nt(e)}fetchManyFromDb(e){return Bt(e)}updateInDb(e,t){return Kt(e,t)}}const ie=new jt;class Ht extends f{async getCommandCooldown(e,t){return(await this.get(e)).commands[t]}async lockUserCommand(e){await this.update(e,{$set:{lockUserCommand:new Date(Date.now()+2*3600*1e3)}}),await v.gainHp(e,1)}async useCommand(e,t,r){const{reminder:a}=await ie.get(e);await this.update(e,{$set:{[`commands.${t}`]:new Date(Date.now()+r)}}),a.commands[t]&&await ve.addReminder(e,`commands/${t}`,new Date(Date.now()+r))}}const Pt=async n=>await H.create({user:n});async function Qt(n){const e=await H.findOne({user:n}).lean();return e||y(await Pt(n))}const zt=(n,e)=>H.findOneAndUpdate({user:n},e,{returnDocument:"after",upsert:!0}).lean();class Yt extends Ht{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Qt(e)}updateInDb(e,t){return zt(e,t)}}const Gt=new Yt;class Wt extends m{async isOrnamentIds(e,t=()=>!0){const a=(await this.getAll()).filter(t).map(({ornamentId:i})=>i);return e.every(i=>a.includes(i))}isOrnament(e){return!!e&&"ornamentId"in e}isTitle(e){return e.type==="title"}isBackground(e){return e.type==="background"}isQuestTitle(e){return this.isTitle(e)&&!("faction"in e)&&!("price"in e)}isFactionTitle(e){return this.isTitle(e)&&"faction"in e}isShopTitle(e){return this.isTitle(e)&&"price"in e}async getAllBackgrounds(){return(await this.getAll()).filter(e=>this.isBackground(e))}async getAllTitles(){return(await this.getAll()).filter(e=>this.isTitle(e))}async getAllFactionTitles(){return(await this.getAll()).filter(e=>this.isFactionTitle(e))}async getAllQuestTitles(){return(await this.getAll()).filter(e=>this.isQuestTitle(e))}async getAllShopTitles(){return(await this.getAll()).filter(e=>this.isShopTitle(e))}formatBackgroundId(e){const t=o.isString(e)?e:e.ornamentId;return t==="background_default"?"par défaut":`"${o.capitalizeAllWords(t.split("_").join(" "))}"`}async getSomeShopTitles(e){const t=await this.getAllShopTitles();return o.sortBy(o.pickNthByOdds(e,t,r=>r.ornamentId,r=>r.odd??0),r=>r.price)}async getSomeBackgrounds(e){const t=await this.getAllBackgrounds();return o.sortBy(o.pickNthByOdds(e,t,r=>r.ornamentId,r=>r.odd??0),r=>r.price??0)}pickEachRarityOrnament(e,t){if(t.length!==p.RANK_IDS_WITHOUT_BASIC.length)throw new RangeError("pickEachRarityOrnament - must give same number of odds than ranks");return o.filterNullAndUndefined(t.map((r,a)=>{const i=p.RANK_IDS_WITHOUT_BASIC[a],u=e[i];return Math.random()>r||!u||!u.length?null:o.pickFrom(u)}))}}const Vt=new s.Schema({ornamentId:{unique:!0,index:1,required:!0,type:String},type:{required:!0,type:String},rankId:{required:!0,type:String},name:{required:!0,type:String},price:Number,odd:Number,size:Number,faction:String,roleId:String,strength:Number},{minimize:!1}),ue=s.models?.Ornaments||s.model("Ornaments",Vt),Xt=async(n,e)=>ue.find(n,{},e).lean();async function Lt(n){const e=await ue.findOne({ornamentId:n}).lean();return e||null}const Jt=(n,e)=>ue.findOneAndUpdate(n,e,{returnDocument:"after"}).lean();class Zt extends Wt{constructor(){super(3600)}updateInDb(e,t){return Jt(e,t)}fetchFromDb(e){return Lt(e)}fetchManyFromDb(e,t){return Xt(e,t)}getKey(e){return e.ornamentId}normalizeKey(e){return e}}const I=new Zt;class en extends f{async unlockTitle(e,t){await I.isOrnamentIds([t],I.isTitle)&&await this.update(e,{$addToSet:{unlockedTitles:t}})}async unlockTitles(e,t){await I.isOrnamentIds(t,I.isTitle)&&await this.update(e,{$addToSet:{unlockedTitles:{$each:t}}})}async selectTitle(e,t){await this.update(e,{$set:{selectedTitle:t}})}async unlockBackground(e,t){await I.isOrnamentIds([t],I.isBackground)&&await this.update(e,{$addToSet:{unlockedBackgrounds:t}})}async unlockBackgrounds(e,t){await I.isOrnamentIds(t,I.isBackground)&&await this.update(e,{$addToSet:{unlockedBackgrounds:{$each:t}}})}async selectBackground(e,t){await this.update(e,{$set:{selectedBackground:t}})}async unlockBadge(e,t,r){t.isProgressive?await this.update(e,{$addToSet:{unlockedBadges:`${t.id}_${r}`}}):await this.update(e,{$addToSet:{unlockedBadges:t.id}})}async unlockFactionBadge(e,t){await this.update(e,{$addToSet:{unlockedFactionBadges:{$each:[`b_marine_${t}`,`b_revolutionary_${t}`,`b_pirate_${t}`]}}})}async unlockProfileAsset(e,t){await this.update(e,{$addToSet:{unlockedProfileAssets:t}})}async unlockBag(e,t){await this.update(e,{$addToSet:{unlockedBags:t}})}async selectBag(e,t){await this.update(e,{$set:{selectedBag:t}})}}const tn=async n=>await G.create({user:n});async function nn(n){const e=await G.findOne({user:n}).lean();return e||y(await tn(n))}const rn=async(n,e)=>G.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class an extends en{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return nn(e)}updateInDb(e,t){return rn(e,t)}}const ce=new an;class sn extends m{async getStatus(e,t){return(await this.get({user:e,questId:t})).status}async isCompleted(e,t){return await this.getStatus(e,t)==="COMPLETED"}async isStreaking(e,t){const{lastCompletionDate:r}=await this.get({user:e,questId:t});return!!r&&o.sameDay(o.yesterday(),r)}async getStreakMultiplier(e,t){const r=await this.get({user:e,questId:t});return await this.isStreaking(e,t)?1+Math.min(2,(r.streak??0)/10):1}async getCompletedCount(e){return(await this.getMany({user:e,status:p.QuestStatus.COMPLETED})).length}async completeQuest(e,t=!1){const r=o.yesterday();r.setHours(0,0,0,0);const a=new Date;return a.setHours(0,0,0,0),this.update(e,[{$set:{...t?{streak:{$cond:{if:{$and:[{$gte:["$lastCompletionDate",r]},{$lt:["$lastCompletionDate",a]}]},then:{$add:[{$ifNull:["$streak",0]},1]},else:1}}}:{},lastCompletionDate:new Date,status:p.QuestStatus.COMPLETED}}],{upsert:!1})}}function un(n){return q.find(n).lean()}const cn=async n=>await q.create({...n});async function dn(n){const e=await q.findOne(n).lean();return e||y(await cn(n))}function ln(n,e,t){return q.findOneAndUpdate(n,e,{upsert:!0,...t,returnDocument:"after"}).lean()}class on extends sn{constructor(){super(3600)}normalizeKey({user:e,questId:t}){return`${e.toString()}/${t}`}getKey({user:e,questId:t}){return{user:e,questId:t}}fetchFromDb(e){return dn(e)}fetchManyFromDb(e){return un(e)}updateInDb(e,t,r){return ln(e,t,r)}}const de=new on;class pn extends f{async randomMessageIncrement(e){await this.update(e,{$inc:{randomMessageClaimed:1}})}async addWrittenTextChannel(e,t){await this.update(e,{$addToSet:{writeDifferentChatIds:t}})}async incrementMessageSend(e){await this.update(e,{$inc:{messageSent:1}})}async addTotalMinutesInVoice(e,t){await this.update(e,{$inc:{totalMinutesInVoice:t}})}}const yn=async n=>await V.create({user:n});async function fn(n){const e=await V.findOne({user:n}).lean();return e||y(await yn(n))}const mn=(n,e)=>V.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class hn extends pn{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return fn(e)}updateInDb(e,t){return mn(e,t)}}const le=new hn;class Sn extends f{async updateDailyReport(e){const t=await v.get(e),r=await ce.get(e),a=await de.getMany({user:e,status:p.QuestStatus.COMPLETED}),i=await le.get(e);await this.update(e,{$set:{xpYesterday:t.xp.amount,berryYesterday:t.berry,previousCompletedQuest:a.map(({questId:u})=>u),"previousOrnament.unlockedBadges":r.unlockedBadges,"previousOrnament.unlockedTitles":r.unlockedTitles,"previousOrnament.unlockedBackgrounds":r.unlockedBackgrounds,previousMessageSent:i.messageSent}})}async getDailyReport(e){const{previousOrnament:t,previousCompletedQuest:r,xpYesterday:a,berryYesterday:i,previousMessageSent:u}=await this.get(e),c=await v.get(e),d=await de.getMany({user:e,status:p.QuestStatus.COMPLETED}),g=await ce.get(e),O=await le.get(e),{berry:b,xp:U}=c,{voice:De,amount:Ua}=U,{unlockedBadges:Ta,unlockedBackgrounds:va,unlockedTitles:Ea}=g;return{berry:b-i,xp:Ua-a,message:O.messageSent-u,voice:o.sameDay(De.lastConnection,o.yesterday())?De.minutesInVoiceToday:0,quest:o.exclude(d.map(({questId:Oa})=>Oa),r),badge:o.exclude(Ta,t.unlockedBadges),title:o.exclude(Ea,t.unlockedTitles),background:o.exclude(va,t.unlockedBackgrounds)}}async getAllDailyReportsToSend(){const e=await ie.getUsersWithDailyReportEnable(),t=await Te.getMany({_id:{$in:e.map(({user:r})=>r)},faction:{$ne:"citizen"}});return await Promise.all(t.map(async({_id:r,discordId:a})=>({report:await this.getDailyReport(r),user:r,discordId:a})))}}const wn=n=>P.create({user:n});async function gn(n){const e=await P.findOne({user:n}).lean();return e||y(await wn(n))}const bn=(n,e)=>P.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class $n extends Sn{constructor(){super(60)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return gn(e)}updateInDb(e,t){return bn(e,t)}}const In=new $n;class Un extends f{async setGuessGame(e,t,r,a){await this.update(e,{$set:{guess:{amount:t,tries:r,numberToGuess:a,lastGuess:0}}})}async resetGuessGame(e){await this.update(e,{$set:{guess:null}})}async updateGuessGame(e){await this.update(e,{$inc:{"guess.tries":1},$set:{"guess.lastGuess":Date.now()}})}}const Tn=async n=>await z.create({user:n});async function vn(n){const e=await z.findOne({user:n}).lean();return e||y(await Tn(n))}const En=(n,e)=>z.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class On extends Un{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return vn(e)}updateInDb(e,t){return En(e,t)}}const Dn=new On,Mn=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},xp:{type:Number,default:0},berry:{type:Number,default:0},faction:{type:Number,default:0}}),C=s.models?.UserRank||s.model("UserRank",Mn);class An extends f{async computeAllXpRanks(){const t=(await D.aggregate([{$setWindowFields:{sortBy:{"xp.amount":-1},output:{xpRank:{$rank:{}}}}},{$project:{user:1,xpRank:1}}])).map(({user:r,xpRank:a})=>({updateOne:{filter:{user:r},update:{$set:{xp:a}},upsert:!0}}));t.length>0&&await C.bulkWrite(t),this.clearAll()}async computeAllBerryRanks(){const t=(await D.aggregate([{$setWindowFields:{sortBy:{berry:-1},output:{berryRank:{$rank:{}}}}},{$project:{user:1,berryRank:1}}])).map(({user:r,berryRank:a})=>({updateOne:{filter:{user:r},update:{$set:{berry:a}},upsert:!0}}));t.length>0&&await C.bulkWrite(t),this.clearAll()}async computeAllFactionRanks(){const t=(await $.aggregate([{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$setWindowFields:{partitionBy:"$faction",sortBy:{"meta.xp.amount":-1},output:{factionRank:{$rank:{}}}}},{$project:{factionRank:1}}])).map(({_id:r,factionRank:a})=>({updateOne:{filter:{user:r},update:{$set:{faction:a}},upsert:!0}}));t.length>0&&await C.bulkWrite(t),this.clearAll()}async computeAllRanks(){await Promise.all([this.computeAllXpRanks(),this.computeAllBerryRanks(),this.computeAllFactionRanks()])}}const qn=async n=>await C.create({user:n});async function kn(n){const e=await C.findOne({user:n}).lean();return e||y(await qn(n))}const Rn=(n,e)=>C.findOneAndUpdate({user:n},e,{returnDocument:"after",upsert:!0}).lean();class xn extends An{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return kn(e)}updateInDb(e,t){return Rn(e,t)}}const _n=new xn,Cn=new s.Schema({speakerId:{type:String,required:!0},order:{type:Number},args:{type:[String],enum:p.STORY_MESSAGE_ARGS,default:void 0}},{_id:!1}),Bn=new s.Schema({stepId:{type:String,required:!0},type:{type:String,required:!0,enum:p.STORY_STEP_TYPES},actionType:{type:String,enum:p.STORY_ACTION_TYPES},messages:{type:[Cn],default:void 0},payload:{type:s.Schema.Types.Mixed,default:void 0},next:{type:String}},{_id:!1}),Fn=new s.Schema({sceneId:{type:String,required:!0},steps:{type:Map,of:Bn,required:!0},entryStepId:{type:String,required:!0},next:{type:String}},{_id:!1}),Nn=new s.Schema({chapterId:{type:String,required:!0},scenes:{type:Map,of:Fn,required:!0},entrySceneId:{type:String,required:!0},next:{type:String}},{_id:!1}),Kn=new s.Schema({type:{type:String,required:!0,enum:p.STORY_SPEAKER_TYPES},speakerId:{type:String,required:!0}},{_id:!1}),Ee=new s.Schema({storyId:{type:String,required:!0,unique:!0},speakers:{type:[Kn],required:!0},chapters:{type:Map,of:Nn,required:!0},entryChapterId:{type:String,required:!0}});Ee.pre("findOneAndUpdate",function(){this.setOptions({runValidators:!0})});const J=s.models?.Story||s.model("Story",Ee),jn=async n=>await J.create(n),Z={storyId:"main",speakers:p.speakers,chapters:{[p.chapterOne.chapterId]:p.chapterOne},entryChapterId:p.chapterOne.chapterId};class Hn extends m{async seed(){return await this.get(Z.storyId)?this.update({storyId:Z.storyId},{$set:Z}):jn(Z)}}const Pn=(n,e={})=>J.find(n,null,e).lean(),Qn=n=>J.findOne({storyId:n}).lean(),zn=(n,e)=>J.findOneAndUpdate({storyId:n},e,{returnDocument:"after"}).lean();class Yn extends Hn{constructor(){super(86400)}normalizeKey(e){return e}getKey(e){return e.storyId}fetchFromDb(e){return Qn(e)}fetchManyFromDb(e,t){return Pn(e,t)}updateInDb(e,t){const r=typeof e=="string"?e:e.storyId;return zn(r,t)}}const E=new Yn,Gn=new s.Schema({chapterId:{type:String,required:!0},sceneId:{type:String,required:!0},stepId:{type:String,required:!0},value:{type:String,required:!0}},{_id:!1}),Oe=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,ref:"User",index:!0},storyId:{type:String,required:!0},currentChapterId:{type:String,required:!0},currentSceneId:{type:String,required:!0},currentStepId:{type:String,required:!0},status:{type:String,required:!0,enum:["in_progress","completed"],default:"in_progress"},choices:{type:[Gn],default:[]}});Oe.index({user:1,storyId:1},{unique:!0});const K=s.models?.UserStory||s.model("UserStory",Oe),Wn=async(n,e,t,r,a)=>await K.create({user:n,storyId:e,currentChapterId:t,currentSceneId:r,currentStepId:a,status:"in_progress"}),Vn=(n,e)=>K.deleteOne({user:n,storyId:e}).then(()=>{}),Xn=(n,e,t,r)=>{const a=n.chapters[e];if(!a)return null;const i=a.scenes[t];if(!i)return null;if(i.steps[r])return{chapterId:e,sceneId:t,stepId:r};if(i.next){const u=a.scenes[i.next];if(u)return{chapterId:e,sceneId:i.next,stepId:u.entryStepId}}if(a.next){const u=n.chapters[a.next];if(u){const c=u.scenes[u.entrySceneId];if(c)return{chapterId:a.next,sceneId:u.entrySceneId,stepId:c.entryStepId}}}return null},ee=(n,e)=>{const t=n.chapters[e.currentChapterId];if(!t)return null;const r=t.scenes[e.currentSceneId];return r?r.steps[e.currentStepId]??null:null},Ln=(n,e,t,r,a)=>{const i=[],u=new Set;let c=n.entryStepId;for(;c&&!u.has(c);){u.add(c);const d=n.steps[c];if(!d)break;if(d.type!=="action"){if(i.push({step:d}),c===a)break;c=d.next;continue}if(d.actionType==="button"){const O=e.find(U=>U.chapterId===t&&U.sceneId===r&&U.stepId===c);if(!O){i.push({step:d});break}const b=d.payload.find(U=>U.actionId===O.value);if(!b||(i.push({step:d,selectedAction:b}),c===a))break;c=b.next;continue}if(i.push({step:d}),c===a)break;c=d.payload[0]?.next}return i};class Jn extends m{async getCurrentStep(e,t){const r=await this.get({user:e,storyId:t});if(!r)return null;const a=await E.get(t);return a?ee(a,r):null}async getSceneSteps(e,t,r,a){const i=await this.get({user:e,storyId:t});if(!i)return null;const u=await E.get(t);if(!u)return null;const c=u.chapters[r];if(!c)return null;const d=c.scenes[a];if(!d)return null;const g=i.status==="in_progress"&&i.currentChapterId===r&&i.currentSceneId===a;return Ln(d,i.choices,r,a,g?i.currentStepId:void 0)}async start(e,t){const r=await E.get(t);if(!r)return null;const a=r.chapters[r.entryChapterId];if(!a)return null;const i=a.scenes[a.entrySceneId];if(!i)return null;await Vn(e,t),this.invalidate({user:e,storyId:t});const u=await Wn(e,t,r.entryChapterId,a.entrySceneId,i.entryStepId),c=y(u);return this.cache.set(this.normalizeKey({user:e,storyId:t}),c),c}async advanceToNext(e,t){const r=await this.get({user:e,storyId:t});if(!r)return{status:"error"};if(r.status==="completed")return{status:"completed"};const a=await E.get(t);if(!a)return{status:"error"};const i=ee(a,r);if(!i)return{status:"error"};if(i.type==="action")return{status:"action_required"};if(!i.next)return{status:"scene_ended"};const u=a.chapters[r.currentChapterId];if(!u)return{status:"error"};const c=u.scenes[r.currentSceneId];if(!c)return{status:"error"};if(!c.steps[i.next])return{status:"scene_ended"};const d=await this.advanceTo(e,t,a,r.currentChapterId,r.currentSceneId,i.next);return d?{status:"advanced",data:d}:{status:"error"}}async advanceToNextScene(e,t){const r=await this.get({user:e,storyId:t});if(!r||r.status==="completed")return null;const a=await E.get(t);if(!a)return null;const i=a.chapters[r.currentChapterId];if(!i)return null;const u=i.scenes[r.currentSceneId];if(!u||!u.next)return null;const c=i.scenes[u.next];return c?this.update({user:e,storyId:t},{$set:{currentSceneId:u.next,currentStepId:c.entryStepId}}):null}async validateCommandAndAdvance(e,t,r){const a=await this.get({user:e,storyId:t});if(!a||a.status==="completed")return null;const i=await E.get(t);if(!i)return null;const u=ee(i,a);if(!u||u.type!=="action"||u.actionType!=="command")return null;const c=u.payload.find(d=>d.commandId===r);return c?this.advanceTo(e,t,i,a.currentChapterId,a.currentSceneId,c.next):null}async validateActionAndAdvance(e,t,r){const a=await this.get({user:e,storyId:t});if(!a||a.status==="completed")return null;const i=await E.get(t);if(!i)return null;const u=ee(i,a);if(!u||u.type!=="action")return null;const c=u.payload.find(d=>d.actionId===r);return c?this.advanceTo(e,t,i,a.currentChapterId,a.currentSceneId,c.next,{chapterId:a.currentChapterId,sceneId:a.currentSceneId,stepId:a.currentStepId,value:r}):null}async advanceTo(e,t,r,a,i,u,c){const d=Xn(r,a,i,u);return d?this.update({user:e,storyId:t},{$set:{currentChapterId:d.chapterId,currentSceneId:d.sceneId,currentStepId:d.stepId},...c&&{$push:{choices:c}}}):this.update({user:e,storyId:t},{$set:{status:"completed"},...c&&{$push:{choices:c}}})}}const Zn=(n,e={})=>K.find(n,null,e).lean(),er=(n,e)=>K.findOne({user:n,storyId:e}).lean(),tr=(n,e)=>K.findOneAndUpdate(n,e,{returnDocument:"after"}).lean();class nr extends Jn{constructor(){super(120)}normalizeKey(e){return`${e.user.toString()}:${e.storyId}`}getKey(e){return{user:e.user,storyId:e.storyId}}fetchFromDb(e){return er(e.user,e.storyId)}fetchManyFromDb(e,t){return Zn(e,t)}updateInDb(e,t){return tr(e,t)}}const rr=new nr;class ar extends f{async didSevenDoubleAtDoQ(e){await this.update(e,{$inc:{"doubleOrQuit.sevenDoubleInARowCount":1}})}async winWithBlackjack(e){await this.update(e,{$inc:{"blackJack.blackJackCount":1}})}async updateLastGames(e,t,r){await this.update(e,{$push:{lastGames:{$each:[{gameType:t,endState:r}],$position:0,$slice:20}}})}async drawIncrement(e){await this.update(e,{$inc:{drawCount:1}})}async bet666(e){const t=o.yesterday();t.setHours(0,0,0,0);const r=new Date;r.setHours(0,0,0,0),await R.updateOne({user:e,"bet666.last":{$gte:t,$lt:r}},{$inc:{"bet666.count":1},$set:{"bet666.last":new Date}}),await R.updateOne({user:e,"bet666.last":{$lt:t}},{$set:{"bet666.last":new Date,"bet666.count":1}}),this.invalidate(e)}async updateTotalBet(e,t){await this.update(e,{$inc:{totalBet:t}})}async updateRps(e,t){await this.update(e,[{$set:{"rps.count":{$cond:{if:{$eq:["$rps.lastRpsPlayed",t]},then:{$add:["$rps.count",1]},else:1}},"rps.lastRpsPlayed":t}}])}async hasGuessInOneTry(e){await this.update(e,{$inc:{"priceIsRight.guessInOneTryCount":1}})}async diceDoubleSix(e){await this.update(e,{$inc:{"dice.doubleSixCount":1}})}async diceDrawDoubleSix(e){await this.update(e,{$inc:{"dice.drawWithDoubleSixCount":1}})}}const sr=async n=>await R.create({user:n});async function ir(n){const e=await R.findOne({user:n}).lean();return e||y(await sr(n))}const ur=(n,e)=>R.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class cr extends ar{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return ir(e)}updateInDb(e,t){return ur(e,t)}}const dr=new cr;class lr extends f{async workIncrement(e){await this.update(e,{$inc:{workCount:1}})}async updateTotalSpentInShop(e,t){await this.update(e,{$inc:{totalSpentInShop:t}})}}const or=n=>W.create({user:n});async function pr(n){const e=await W.findOne({user:n}).lean();return e||y(await or(n))}const yr=(n,e)=>W.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class fr extends lr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return pr(e)}updateInDb(e,t){return yr(e,t)}}const mr=new fr;class hr extends f{async hasReportedSomeone(e){await this.update(e,{$set:{reportedSomeone:!0}})}async botPingIncrement(e){await this.update(e,{$inc:{botPingCount:1}})}async hasCelebrateBirthday(e){await this.update(e,{$set:{hasCelebrateBirthday:!0}})}async hasTagEveryone(e){await this.update(e,{$set:{tagEveryone:!0}})}async hasBetMin(e){await this.update(e,{$set:{"gamblingFlags.betMin":!0}})}async hasLoseEverything(e){await this.update(e,{$set:{"gamblingFlags.loseEverything":!0}})}async hasBet10M(e){await this.update(e,{$set:{"gamblingFlags.bet10M":!0}})}async hasWinBet10M(e){await this.update(e,{$set:{"gamblingFlags.winBet10M":!0}})}async hasLose10M(e){await this.update(e,{$set:{"gamblingFlags.lose10M":!0}})}}const Sr=async n=>await X.create({user:n});async function wr(n){const e=await X.findOne({user:n}).lean();return e||y(await Sr(n))}const gr=(n,e)=>X.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class br extends hr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return wr(e)}updateInDb(e,t){return gr(e,t)}}const $r=new br;class Ir extends f{async readEdito(e){const t=new Date;t.setHours(0,0,0,0),await M.updateOne({user:e,"edito.lastTimeRead":{$gte:t}},{$inc:{"edito.readToday":1},$set:{"edito.lastTimeRead":new Date}}),await M.updateOne({user:e,"edito.lastTimeRead":{$lt:t}},{$set:{"edito.lastTimeRead":new Date,"edito.readToday":1}}),this.invalidate(e)}async getTotalEditoReadToday(){const e=new Date;return e.setHours(0,0,0,0),(await M.aggregate([{$match:{"edito.lastTimeRead":{$gte:e},"edito.readToday":{$gt:0}}},{$group:{_id:null,total:{$sum:"$edito.readToday"}}}]))[0]?.total??0}}const Ur=async n=>await M.create({user:n});async function Tr(n){const e=await M.findOne({user:n}).lean();return e||y(await Ur(n))}const vr=(n,e)=>M.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class Er extends Ir{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Tr(e)}updateInDb(e,t){return vr(e,t)}}const Or=new Er;class Dr extends f{async updateCraftStats(e,t,r){const a=await h.get(r);!a||!h.isItem(a)||await this.update(e,{$inc:{"crafts.totalCrafted":t}})}async incrementAlcoholDrink(e,t,r){["wine","beer","rhum"].includes(t)&&await this.update(e,{$inc:{"alcohols.wines":t==="wine"?r:0,"alcohols.beers":t==="beer"?r:0,"alcohols.rhums":t==="rhum"?r:0,"alcohols.totalConsumed":r}})}async incrementBottleUsedToday(e,t){const r=new Date;r.setHours(0,0,0,0),await x.updateOne({user:e,"bottle.lastUsed":{$gte:r}},{$inc:{"bottle.usedToday":t},$set:{"bottle.lastUsed":new Date}}),await x.updateOne({user:e,"bottle.lastUsed":{$lt:r}},{$set:{"bottle.lastUsed":new Date,"bottle.usedToday":t}}),this.invalidate(e)}async incrementBottleUsedTotal(e,t){await this.update(e,{$inc:{"bottle.totalUsed":t}})}async incrementChestOpenedTotal(e,t){await this.update(e,{$inc:{"chest.totalOpened":t}})}}const Mr=async n=>await x.create({user:n});async function Ar(n){const e=await x.findOne({user:n}).lean();return e||y(await Mr(n))}const qr=(n,e)=>x.findOneAndUpdate({user:n},e,{upsert:!0,returnDocument:"after"}).lean();class kr extends Dr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Ar(e)}updateInDb(e,t){return qr(e,t)}}const Rr=new kr;class xr extends m{async maxCraftQuantity(e,t){const r=await T.get(e);let a=1/0;for(const i of t)a=Math.min(a,Math.floor((r.itemList[i.entityId]??0)/i.size));return a}async hasEnoughItemsForRecipe(e,t,r){const a=await T.get(e);for(const i of t.entities)if((a.itemList[i.entityId]??0)<i.size*r)return!1;return!0}decodeCraftId(e){return e.split(";").map((t,r)=>({entityId:t==="null"?null:t,index:r}))}encodeCraftId(e){return e.map(({entityId:t})=>`${t}`).join(";")}async isValidRecipe(e){return!!(await this.getAll()).find(r=>r.craftId===e)}async getRecipeResult(e,t){const r=await T.get(e),a=(await A.getPanoplyBonus(r.equippedItems)).find(([i,u])=>i.panoplyId==="little_blacksmith"&&u!==null);return a?.[1]==="full"&&t==="chest_3"?"chest_blacksmith_3":a?.[1]==="half"&&t==="chest_2"?"chest_blacksmith_2":a?.[1]==="half"&&t==="chest_1"?"chest_blacksmith_1":t}}const _r=new s.Schema({entityId:{type:String,required:!0},size:{type:Number,required:!0}},{_id:!1}),Cr=new s.Schema({entityId:{type:String,required:!0},size:{type:Number,required:!0}},{_id:!1}),Br=new s.Schema({craftId:{type:String,unique:!0,required:!0},name:{type:String,required:!0},entities:{type:[_r],required:!0},result:{type:Cr,required:!0}},{minimize:!1}),te=s.models?.Recipes||s.model("Recipes",Br),Fr=async n=>await te.create({...n}),Nr=async(n,e)=>te.find(n,{},e).lean();async function Kr(n){const e=await te.findOne({craftId:n}).lean();return e||null}const jr=(n,e)=>te.findOneAndUpdate(n,e,{returnDocument:"after"}).lean();class Hr extends xr{constructor(){super(3600)}createInDb(e){return Fr(e)}updateInDb(e,t){return jr(e,t)}fetchFromDb(e){return Kr(e)}fetchManyFromDb(e,t){return Nr(e,t)}normalizeKey(e){return e}getKey(e){return e.craftId}}const Pr=new Hr,Qr=new s.Schema({bannedUserId:{type:String,index:!0,required:!0},authorId:{type:String,required:!0},unbannedTimestamp:{type:Date,index:1},reason:{type:String,required:!0},guildId:{type:String,required:!0}}),ne=s.models?.Bans||s.model("Bans",Qr),zr=(n,e)=>ne.deleteOne({bannedUserId:n,guildId:e});class Yr extends m{async getUnbanUsers(){return this.getMany({unbannedTimestamp:{$lte:new Date,$ne:null}})}async banUserFromGuild({bannedUserId:e,guildId:t,...r}){await this.update({bannedUserId:e,guildId:t},{...r})}async isBannedFromGuild(e,t){const r=await this.get({bannedUserId:e,guildId:t});return!!(r&&(!r.unbannedTimestamp||r.unbannedTimestamp>new Date))}async deleteBan(e,t){await zr(e,t),this.invalidate({bannedUserId:e,guildId:t})}}const Gr=n=>ne.find(n).lean(),Wr=n=>ne.findOne(n).lean(),Vr=(n,e)=>ne.findOneAndUpdate(n,e,{returnDocument:"after",upsert:!0}).lean();class Xr extends Yr{constructor(){super(3600*36)}normalizeKey(e){return`${e.guildId}/${e.bannedUserId}`}getKey({bannedUserId:e,guildId:t}){return{bannedUserId:e,guildId:t}}fetchFromDb(e){return Wr(e)}fetchManyFromDb(e){return Gr(e)}updateInDb(e,t){return Vr(e,t)}}const Lr=new Xr,Jr=new s.Schema({senderId:{type:s.Schema.Types.ObjectId,required:!0,ref:"User"},receiverId:{type:s.Schema.Types.ObjectId,required:!0,index:!0,ref:"User"},amount:Number,gameMode:String,meta:{rps:{type:String,default:void 0}}}),re=s.models?.Invitation||s.model("Invitation",Jr),Zr=n=>re.create({...n}),ea=async n=>{await re.deleteMany({...n})};class ta extends f{async sendInvitation({senderId:e,receiverId:t,gameMode:r,...a}){return await this.get({senderId:e,gameMode:r,receiverId:t})?null:await Zr({...a,senderId:e,gameMode:r,receiverId:t})}async deleteInvitation({senderId:e,receiverId:t,gameMode:r}){await ea({senderId:e,gameMode:r,receiverId:t}),this.invalidate({senderId:e,gameMode:r,receiverId:t})}}const na=n=>re.findOne({...n}).lean(),ra=(n,e)=>re.findOneAndUpdate(n,e,{returnDocument:"after"}).lean();class aa extends ta{constructor(){super(3600)}normalizeKey(e){return`${e.gameMode}/${e.receiverId}/${e.senderId}`}getKey({receiverId:e,gameMode:t,senderId:r}){return{gameMode:t,receiverId:e,senderId:r}}fetchFromDb(e){return na(e)}updateInDb(e,t){return ra(e,t)}}const sa=new aa;class ia extends f{async randomizeEditoPrice(e){const t=o.randomBetween(100,1001);return await this.update({guildId:e},{$set:{"edito.price":t}}),t}async setEditoMessageId(e,t){await this.update({guildId:e},{$set:{"edito.messageId":t}})}async setRankingMessage(e,t){await this.update({guildId:e},{$set:{"ranking.messageId":t}})}async addCrewChannelId(e,t,r){await this.update({guildId:e},{$push:{"crew.crewChannelIds":{channelId:r,crewId:t}}})}async updateRolesId(e,t){await this.update({guildId:e},{$set:Object.fromEntries(Object.entries(t).map(([r,a])=>[`roles.${r}`,a]))})}async updateChannelId(e,t){await this.update({guildId:e},{$set:Object.fromEntries(Object.entries(t).map(([r,a])=>[`channels.${r}`,a]))})}}const ua=new s.Schema({guildId:{type:String,required:!0,unique:!0},ranking:{messageId:{type:String,default:null}},roles:{premium:{type:String,default:null},booster:{type:String,default:null},scam:{type:String,default:null},canChangeFaction:{type:String,default:null},canChooseFaction:{type:String,default:null},staff:{type:String,default:null},moderator:{type:String,default:null},marine:{type:String,default:null},pirate:{type:String,default:null},revolutionary:{type:String,default:null}},channels:{gambling:{type:String,default:null},work:{type:String,default:null},raid:{type:String,default:null},suggestion:{type:String,default:null},report:{type:String,default:null},reportModerator:{type:String,default:null},faction:{type:String,default:null},discussion:{type:String,default:null},questFallback:{type:String,default:null},reportBug:{type:String,default:null},shop:{type:String,default:null},edito:{type:String,default:null},crew:{type:String,default:null},ranking:{type:String,default:null}},edito:{price:{type:Number,default:100},messageId:{type:String,default:null}},crew:{crewChannelIds:{type:[{channelId:{type:String},crewId:{type:String}}],default:[]}}}),oe=s.models?.Settings||s.model("Settings",ua),ca=n=>oe.create({guildId:n}),da=async n=>{const e=await oe.findOne({guildId:n}).lean();return e||y(await ca(n))},la=(n,e)=>oe.findOneAndUpdate(n,e,{upsert:!0,returnDocument:"after"}).lean();class oa extends ia{constructor(){super(3600*24*30)}normalizeKey(e){return e}getKey({guildId:e}){return e}fetchFromDb(e){return da(e)}updateInDb(e,t){return la(e,t)}}const pa=new oa,ya=new s.Schema({warnedUserId:{type:String,required:!0,index:!0},authorId:String,date:{type:Date,default:Date.now()},reason:{type:String,default:null}}),ae=s.models?.Warn||s.model("Warn",ya),fa=n=>ae.countDocuments(n),ma=n=>ae.create({...n}),ha=n=>ae.findByIdAndDelete(n).lean();class Sa extends m{getUserWarns(e){return this.getMany({warnedUserId:e})}getUserWarnCount(e){return fa({warnedUserId:e})}async createWarn(e){await ma(e)}async deleteWarn(e){const t=await ha(e);return t&&this.invalidate(this.getKey(t)),t}}const wa=n=>ae.find(n).lean();class ga extends Sa{constructor(){super(300)}normalizeKey(e){return e}getKey({warnedUserId:e,date:t}){return`${e}/${t.getTime()}`}fetchFromDb(){throw new Error("Method not implemented.")}fetchManyFromDb(e){return wa(e)}updateInDb(){throw new Error("Method not implemented.")}}const ba=new ga,$a=n=>{s.connect(n)};class Ia extends s.Types.ObjectId{}l.ObjectId=Ia,l.QUEST_MIDDLEWARE_EVENT_NAME=w,l.banService=Lr,l.connectToServices=$a,l.emitQuestMiddlewareEvent=S,l.entityService=h,l.invitationService=sa,l.ornamentService=I,l.panoplyService=A,l.recipeService=Pr,l.registerQuestMiddlewareEvents=ke,l.reminderService=ve,l.settingsService=pa,l.storyService=E,l.userCooldownService=Gt,l.userDailyReportService=In,l.userEncyclopediaService=L,l.userGamesService=Dn,l.userInventoryService=T,l.userMetaService=v,l.userOrnamentService=ce,l.userQuestService=de,l.userRankService=_n,l.userService=Te,l.userSettingsService=ie,l.userStatsCasinoService=dr,l.userStatsEconomyService=mr,l.userStatsEngagementService=le,l.userStatsFlagsService=$r,l.userStatsFrequencyService=Or,l.userStatsInventoryService=Rr,l.userStoryService=rr,l.warnService=ba,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})}));
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Model } from 'mongoose';
|
|
2
2
|
import type { EntityDocument } from '../types';
|
|
3
3
|
declare const entityModel: Model<EntityDocument>;
|
|
4
|
-
|
|
4
|
+
declare const itemModel: Model<EntityDocument & import("../types").ItemDocument, {}, {}, {}, import("mongoose").Document<unknown, {}, EntityDocument & import("../types").ItemDocument, {}, {}> & EntityDocument & import("../types").ItemDocument & Required<{
|
|
5
|
+
_id: import("mongoose").Types.ObjectId;
|
|
6
|
+
}> & {
|
|
7
|
+
__v: number;
|
|
8
|
+
}, any>;
|
|
9
|
+
declare const equipmentModel: Model<EntityDocument & import("../types").EquipmentDocument, {}, {}, {}, import("mongoose").Document<unknown, {}, EntityDocument & import("../types").EquipmentDocument, {}, {}> & EntityDocument & import("../types").EquipmentDocument & Required<{
|
|
10
|
+
_id: import("mongoose").Types.ObjectId;
|
|
11
|
+
}> & {
|
|
12
|
+
__v: number;
|
|
13
|
+
}, any>;
|
|
14
|
+
export { entityModel, itemModel, equipmentModel };
|
|
5
15
|
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../src/services/entities/definition/model.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../src/services/entities/definition/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,cAAc,CAC8B,CAAC;AAEtE,QAAA,MAAM,SAAS;;;;OAAgD,CAAC;AAChE,QAAA,MAAM,cAAc;;;;OAA0D,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema } from 'mongoose';
|
|
2
|
-
import type { EntityDocument } from '../types';
|
|
2
|
+
import type { EntityDocument, EquipmentDocument, ItemDocument } from '../types';
|
|
3
3
|
declare const entitySchema: Schema<EntityDocument, import("mongoose").Model<EntityDocument, any, any, any, import("mongoose").Document<unknown, any, EntityDocument, any, {}> & EntityDocument & Required<{
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
}> & {
|
|
@@ -9,5 +9,23 @@ declare const entitySchema: Schema<EntityDocument, import("mongoose").Model<Enti
|
|
|
9
9
|
}> & {
|
|
10
10
|
__v: number;
|
|
11
11
|
}>;
|
|
12
|
-
|
|
12
|
+
declare const itemSchema: Schema<ItemDocument, import("mongoose").Model<ItemDocument, any, any, any, import("mongoose").Document<unknown, any, ItemDocument, any, {}> & ItemDocument & Required<{
|
|
13
|
+
_id: import("mongoose").Types.ObjectId;
|
|
14
|
+
}> & {
|
|
15
|
+
__v: number;
|
|
16
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, ItemDocument, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<ItemDocument>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<ItemDocument> & Required<{
|
|
17
|
+
_id: import("mongoose").Types.ObjectId;
|
|
18
|
+
}> & {
|
|
19
|
+
__v: number;
|
|
20
|
+
}>;
|
|
21
|
+
declare const equipmentSchema: Schema<EquipmentDocument, import("mongoose").Model<EquipmentDocument, any, any, any, import("mongoose").Document<unknown, any, EquipmentDocument, any, {}> & EquipmentDocument & Required<{
|
|
22
|
+
_id: import("mongoose").Types.ObjectId;
|
|
23
|
+
}> & {
|
|
24
|
+
__v: number;
|
|
25
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, EquipmentDocument, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<EquipmentDocument>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<EquipmentDocument> & Required<{
|
|
26
|
+
_id: import("mongoose").Types.ObjectId;
|
|
27
|
+
}> & {
|
|
28
|
+
__v: number;
|
|
29
|
+
}>;
|
|
30
|
+
export { entitySchema, itemSchema, equipmentSchema };
|
|
13
31
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/entities/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/entities/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAchF,QAAA,MAAM,YAAY;;;;;;;;EAQjB,CAAC;AAEF,QAAA,MAAM,UAAU;;;;;;;;EAed,CAAC;AAEH,QAAA,MAAM,eAAe;;;;;;;;EAQnB,CAAC;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,42 +1,27 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CharacteristicsRecord, ChestItem, ConsumableItem, DBEquipment, Entity, EquipableEquipment, Equipment, EquippedItems, Item, ResourceItem } from '@opfr/definitions';
|
|
2
2
|
import { AbstractCachedServiceWithFetchMany } from '../AbstractCachedService';
|
|
3
3
|
import type { Lean } from '../types';
|
|
4
|
-
import type { EntityDocument } from './types';
|
|
4
|
+
import type { EntityDocument, ItemDocument } from './types';
|
|
5
5
|
export declare abstract class EntityHelper extends AbstractCachedServiceWithFetchMany<Entity, EntityDocument, string> {
|
|
6
6
|
isEntity(obj?: object | null): obj is Entity;
|
|
7
7
|
isItem<T extends Entity>(entity: T): entity is Item & T;
|
|
8
8
|
isEquipment<T extends Entity>(entity: T): entity is Equipment & T;
|
|
9
9
|
isEntityId(id: string, filter?: (element: Entity) => boolean): Promise<boolean>;
|
|
10
|
-
getSomeStoreItems(quantity: number): Promise<StoreItem[]>;
|
|
11
|
-
getSomeRepairItems(quantity: number): Promise<RepairItem[]>;
|
|
12
|
-
getSomeObjectItems(quantity: number): Promise<ObjectItem[]>;
|
|
13
10
|
idArrayToEntities(ids: string[]): Promise<Entity[]>;
|
|
14
11
|
recordToEntities(record: Partial<Record<string, unknown>>): Promise<Entity[]>;
|
|
15
12
|
recordToEntityTuple<E extends Entity = Entity, T extends number = number>(record: Partial<Record<string, T>>): Promise<[E, T][]>;
|
|
16
13
|
getAllEntitiesLimit(): Promise<Record<string, number>>;
|
|
17
14
|
getAllEntitiesBy<T extends Entity & Lean<EntityDocument>>(filter: (entity: Entity & Lean<EntityDocument>) => entity is T): Promise<T[]>;
|
|
15
|
+
getAllItemsBy<T extends Item & Lean<ItemDocument>>(filter: (item: Item & Lean<ItemDocument>) => item is T): Promise<T[]>;
|
|
18
16
|
fromDBToEquipableEquipment(equipment: DBEquipment): Promise<EquipableEquipment>;
|
|
19
17
|
getUserEquipmentsCharacteristics(equipped: EquippedItems): Promise<CharacteristicsRecord>;
|
|
20
|
-
filterCraftEntities<T extends Entity>(entities: T[]): T[];
|
|
21
|
-
filterDismantleEntities<T extends Entity>(entities: T[]): T[];
|
|
22
18
|
filterUsableEntities<T extends Entity>(entities: T[]): T[];
|
|
23
|
-
filterEnchantableEntities<T extends Entity>(entities: T[]): T[];
|
|
24
|
-
hasCraftEntities<T extends Entity>(entities: T[]): boolean;
|
|
25
|
-
hasDismantleEntities<T extends Entity>(entities: T[]): boolean;
|
|
26
|
-
hasEnchantableEntities<T extends Entity>(entities: T[]): boolean;
|
|
27
19
|
hasUsableEntities<T extends Entity>(entities: T[]): boolean;
|
|
28
20
|
isChestItem<T extends Entity>(item: T): item is ChestItem & T;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
isRepairItem<T extends Entity>(item: T): item is RepairItem & T;
|
|
32
|
-
isStoreItem<T extends Entity>(item: T): item is T & StoreItem;
|
|
33
|
-
isObjectItem<T extends Entity>(item: T): item is ObjectItem & T;
|
|
34
|
-
isScrollItem<T extends Entity>(item: T): item is ScrollItem & T;
|
|
35
|
-
isCookedMeal(item: Entity | Lean<EntityDocument>): item is CookedMealItem;
|
|
36
|
-
isAlcoholItem<T extends Entity>(item: T): item is AlcoholItem & T;
|
|
21
|
+
isConsumableItem<T extends Entity>(item: T): item is ConsumableItem & T;
|
|
22
|
+
isResourceItem<T extends Entity>(item: T): item is ResourceItem & T;
|
|
37
23
|
isSameEquipment(eq1: DBEquipment | EquipableEquipment, eq2: DBEquipment | EquipableEquipment): boolean;
|
|
38
24
|
seedEquipment(equipment: Equipment, seed: number): EquipableEquipment;
|
|
39
25
|
isEquipped(equipped: EquippedItems, equipment: DBEquipment): boolean;
|
|
40
|
-
calcILvl(eq: EquipableEquipment): number;
|
|
41
26
|
}
|
|
42
27
|
//# sourceMappingURL=helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/services/entities/helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/services/entities/helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,WAAW,EACX,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,IAAI,EACJ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,8BAAsB,YAAa,SAAQ,kCAAkC,CAC3E,MAAM,EACN,cAAc,EACd,MAAM,CACP;IACQ,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,GAAG,IAAI,MAAM;IAI5C,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,IAAI,IAAI,GAAG,CAAC;IAGvD,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,IAAI,SAAS,GAAG,CAAC;IAI3D,UAAU,CACrB,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAoB;IAUtC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKzD,gBAAgB,CACrB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,MAAM,EAAE,CAAC;IAGP,mBAAmB,CAC9B,CAAC,SAAS,MAAM,GAAG,MAAM,EACzB,CAAC,SAAS,MAAM,GAAG,MAAM,EACzB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAW3C,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAQtD,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,EACnE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,MAAM,IAAI,CAAC,GAC7D,OAAO,CAAC,CAAC,EAAE,CAAC;IAIF,aAAa,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAC5D,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,GACrD,OAAO,CAAC,CAAC,EAAE,CAAC;IAIF,0BAA0B,CACrC,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAcjB,gCAAgC,CAAC,QAAQ,EAAE,aAAa;IAqC9D,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAM1D,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO;IAM3D,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,SAAS,GAAG,CAAC;IAG7D,gBAAgB,CAAC,CAAC,SAAS,MAAM,EACtC,IAAI,EAAE,CAAC,GACN,IAAI,IAAI,cAAc,GAAG,CAAC;IAGtB,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,YAAY,GAAG,CAAC;IAInE,eAAe,CACpB,GAAG,EAAE,WAAW,GAAG,kBAAkB,EACrC,GAAG,EAAE,WAAW,GAAG,kBAAkB,GACpC,OAAO;IAIH,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,kBAAkB;IAqBrE,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,GAAG,OAAO;CAK5E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { QueryOptions, RootFilterQuery } from 'mongoose';
|
|
2
2
|
import type { Lean } from '../../types';
|
|
3
|
-
import type { EntityDocument } from '../types';
|
|
3
|
+
import type { EntityDocument, ItemDocument } from '../types';
|
|
4
4
|
export declare const findEntities: (filter: RootFilterQuery<EntityDocument>, options: QueryOptions<EntityDocument>) => Promise<Lean<EntityDocument>[]>;
|
|
5
|
+
export declare const findItems: (filter: RootFilterQuery<ItemDocument>, options: QueryOptions<ItemDocument>) => Promise<Lean<ItemDocument>[]>;
|
|
5
6
|
//# sourceMappingURL=findMany.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../../../src/services/entities/process/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"findMany.d.ts","sourceRoot":"","sources":["../../../../src/services/entities/process/findMany.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,YAAY,GACvB,QAAQ,eAAe,CAAC,cAAc,CAAC,EACvC,SAAS,YAAY,CAAC,cAAc,CAAC,KACpC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAEhC,CAAC;AAEF,eAAO,MAAM,SAAS,GACpB,QAAQ,eAAe,CAAC,YAAY,CAAC,EACrC,SAAS,YAAY,CAAC,YAAY,CAAC,KAClC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAE9B,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Lean } from '../../types';
|
|
2
|
-
import type { EntityDocument } from '../types';
|
|
2
|
+
import type { EntityDocument, EquipmentDocument, ItemDocument } from '../types';
|
|
3
3
|
export declare function findEntity(entityId: string): Promise<Lean<EntityDocument> | null>;
|
|
4
|
+
export declare function findItem(entityId: string): Promise<Lean<ItemDocument> | null>;
|
|
5
|
+
export declare function findEquipment(entityId: string): Promise<Lean<EquipmentDocument> | null>;
|
|
4
6
|
//# sourceMappingURL=findOne.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../../src/services/entities/process/findOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../../src/services/entities/process/findOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEhF,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAOtC;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAOpC;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAOzC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { Document } from 'mongoose';
|
|
2
|
-
import type { Entity } from '@opfr/definitions';
|
|
2
|
+
import type { Entity, Equipment, Item } from '@opfr/definitions';
|
|
3
3
|
export interface EntityDocument extends Document, Entity {
|
|
4
4
|
}
|
|
5
|
+
export interface ItemDocument extends Document, Item {
|
|
6
|
+
}
|
|
7
|
+
export interface EquipmentDocument extends Document, Equipment {
|
|
8
|
+
}
|
|
5
9
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/entities/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/entities/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,WAAW,cAAe,SAAQ,QAAQ,EAAE,MAAM;CAAG;AAC3D,MAAM,WAAW,YAAa,SAAQ,QAAQ,EAAE,IAAI;CAAG;AACvD,MAAM,WAAW,iBAAkB,SAAQ,QAAQ,EAAE,SAAS;CAAG"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export * from './user-ornament';
|
|
|
9
9
|
export * from './user-quest';
|
|
10
10
|
export * from './user-rank';
|
|
11
11
|
export * from './user-settings';
|
|
12
|
-
export * from './user-
|
|
12
|
+
export * from './user-story';
|
|
13
13
|
export * from './user-stats/casino';
|
|
14
14
|
export * from './user-stats/economy';
|
|
15
15
|
export * from './user-stats/engagement';
|
|
@@ -24,7 +24,7 @@ export * from './ban';
|
|
|
24
24
|
export * from './invitations';
|
|
25
25
|
export * from './reminder';
|
|
26
26
|
export * from './settings';
|
|
27
|
-
export * from './
|
|
27
|
+
export * from './story';
|
|
28
28
|
export * from './warn';
|
|
29
29
|
export * from './types';
|
|
30
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAE7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AAEzB,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AAEvB,cAAc,SAAS,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Document, Types } from 'mongoose';
|
|
2
|
-
|
|
3
|
-
export type ReminderType = 'custom' | `commands/${CooldownCommand}` | 'raid/classic' | 'raid/special';
|
|
2
|
+
export type ReminderType = 'custom' | `commands/${string}`;
|
|
4
3
|
export interface Reminder {
|
|
5
4
|
user: Types.ObjectId;
|
|
6
5
|
type: ReminderType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/reminder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/reminder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,MAAM,EAAE,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ,EAAE,QAAQ;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../src/services/story/definition/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,aAAa,CACiB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Schema } from 'mongoose';
|
|
2
|
+
import type { StoryDocument } from '../types';
|
|
3
|
+
declare const storySchema: Schema<StoryDocument, import("mongoose").Model<StoryDocument, any, any, any, import("mongoose").Document<unknown, any, StoryDocument, any, {}> & StoryDocument & Required<{
|
|
4
|
+
_id: import("mongoose").Types.ObjectId;
|
|
5
|
+
}> & {
|
|
6
|
+
__v: number;
|
|
7
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, StoryDocument, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<StoryDocument>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<StoryDocument> & Required<{
|
|
8
|
+
_id: import("mongoose").Types.ObjectId;
|
|
9
|
+
}> & {
|
|
10
|
+
__v: number;
|
|
11
|
+
}>;
|
|
12
|
+
export { storySchema };
|
|
13
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/story/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AASlC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA2D9C,QAAA,MAAM,WAAW;;;;;;;;EASf,CAAC;AAMH,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AbstractCachedServiceWithFetchMany } from '../AbstractCachedService';
|
|
2
|
+
import type { Story, StoryDocument } from './types';
|
|
3
|
+
export declare abstract class StoryHelper extends AbstractCachedServiceWithFetchMany<Story, StoryDocument, string> {
|
|
4
|
+
seed(): Promise<StoryDocument | (import("mongoose").FlattenMaps<StoryDocument> & Required<{
|
|
5
|
+
_id: import("mongoose").Types.ObjectId;
|
|
6
|
+
}> & {
|
|
7
|
+
__v: number;
|
|
8
|
+
}) | null>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/services/story/helper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAWpD,8BAAsB,WAAY,SAAQ,kCAAkC,CAC1E,KAAK,EACL,aAAa,EACb,MAAM,CACP;IACc,IAAI;;;;;CAOlB"}
|