@opfr/services 1.5.1 → 1.5.2
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 +23 -21
- package/dist/index.umd.js +1 -1
- package/dist/services/entities/helper.d.ts.map +1 -1
- package/dist/services/user/definition/schema.d.ts.map +1 -1
- package/dist/services/user-inventory/definition/schema.d.ts.map +1 -1
- package/dist/services/user-meta/definition/schema.d.ts.map +1 -1
- package/dist/services/user-ornament/definition/schema.d.ts.map +1 -1
- package/dist/services/user-quest/definition/schema.d.ts.map +1 -1
- package/dist/services/user-stats/casino/definition/schema.d.ts.map +1 -1
- package/dist/services/user-stats/economy/definition/schema.d.ts.map +1 -1
- package/dist/services/user-stats/engagement/definition/schema.d.ts.map +1 -1
- package/dist/services/user-stats/flags/definition/schema.d.ts.map +1 -1
- package/dist/services/user-stats/frequency/definition/schema.d.ts.map +1 -1
- package/dist/services/user-stats/inventory/definition/schema.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.es.js
CHANGED
|
@@ -91,7 +91,7 @@ const De = new $e.EventEmitter(), S = (n, e, t) => {
|
|
|
91
91
|
{ minimize: !1 }
|
|
92
92
|
);
|
|
93
93
|
Te.post("findOneAndUpdate", function(n) {
|
|
94
|
-
S(
|
|
94
|
+
n && S(
|
|
95
95
|
b.USER_QUEST,
|
|
96
96
|
n.user._id,
|
|
97
97
|
n
|
|
@@ -181,7 +181,7 @@ const q = d?.UserQuest || p("UserQuest", Te), it = new o({
|
|
|
181
181
|
{ minimize: !1 }
|
|
182
182
|
);
|
|
183
183
|
Oe.post("findOneAndUpdate", function(n) {
|
|
184
|
-
S(
|
|
184
|
+
n && S(
|
|
185
185
|
b.USER_INVENTORY,
|
|
186
186
|
n.user._id,
|
|
187
187
|
n
|
|
@@ -271,11 +271,11 @@ const V = d?.UserInventory || p("UserInventory", Oe), lt = new $e.EventEmitter()
|
|
|
271
271
|
}
|
|
272
272
|
});
|
|
273
273
|
ve.post("findOneAndUpdate", async function(n) {
|
|
274
|
-
S(
|
|
274
|
+
n && (S(
|
|
275
275
|
b.USER_META,
|
|
276
276
|
n.user._id,
|
|
277
277
|
n
|
|
278
|
-
), n.hp <= 0 && dt("death", n.user._id);
|
|
278
|
+
), n.hp <= 0 && dt("death", n.user._id));
|
|
279
279
|
});
|
|
280
280
|
const O = d?.UserMeta || p("UserMeta", ve), Be = new o({
|
|
281
281
|
user: {
|
|
@@ -295,7 +295,7 @@ const O = d?.UserMeta || p("UserMeta", ve), Be = new o({
|
|
|
295
295
|
selectedBag: { type: String, default: "default" }
|
|
296
296
|
});
|
|
297
297
|
Be.post("findOneAndUpdate", function(n) {
|
|
298
|
-
S(
|
|
298
|
+
n && S(
|
|
299
299
|
b.USER_ORNAMENT,
|
|
300
300
|
n.user._id,
|
|
301
301
|
n
|
|
@@ -375,7 +375,7 @@ const X = d?.UserOrnament || p("UserOrnament", Be), pt = new o({
|
|
|
375
375
|
}
|
|
376
376
|
});
|
|
377
377
|
Me.post("findOneAndUpdate", function(n) {
|
|
378
|
-
S(
|
|
378
|
+
n && S(
|
|
379
379
|
b.USER_STATS_CASINO,
|
|
380
380
|
n.user._id,
|
|
381
381
|
n
|
|
@@ -392,7 +392,7 @@ const k = d?.UserStatsCasino || p("UserStatsCasino", Me), ke = new o({
|
|
|
392
392
|
totalSpentInShop: { type: Number, default: 0 }
|
|
393
393
|
});
|
|
394
394
|
ke.post("findOneAndUpdate", function(n) {
|
|
395
|
-
S(
|
|
395
|
+
n && S(
|
|
396
396
|
b.USER_STATS_ECONOMY,
|
|
397
397
|
n.user._id,
|
|
398
398
|
n
|
|
@@ -411,7 +411,7 @@ const Z = d?.UserStatsEconomy || p("UserStatsEconomy", ke), Ae = new o({
|
|
|
411
411
|
writeDifferentChatIds: { type: [String], default: [] }
|
|
412
412
|
});
|
|
413
413
|
Ae.post("findOneAndUpdate", function(n) {
|
|
414
|
-
S(
|
|
414
|
+
n && S(
|
|
415
415
|
b.USER_STATS_ENGAGEMENT,
|
|
416
416
|
n.user._id,
|
|
417
417
|
n
|
|
@@ -440,7 +440,7 @@ const ee = d?.UserStatsEngagement || p(
|
|
|
440
440
|
}
|
|
441
441
|
});
|
|
442
442
|
qe.post("findOneAndUpdate", function(n) {
|
|
443
|
-
S(
|
|
443
|
+
n && S(
|
|
444
444
|
b.USER_STATS_FLAGS,
|
|
445
445
|
n.user._id,
|
|
446
446
|
n
|
|
@@ -459,7 +459,7 @@ const te = d?.UserStatsFlags || p("UserStatsFlags", qe), Re = new o({
|
|
|
459
459
|
}
|
|
460
460
|
});
|
|
461
461
|
Re.post("findOneAndUpdate", function(n) {
|
|
462
|
-
S(
|
|
462
|
+
n && S(
|
|
463
463
|
b.USER_STATS_FREQUENCY,
|
|
464
464
|
n.user._id,
|
|
465
465
|
n
|
|
@@ -496,7 +496,7 @@ const T = d?.UserStatsFrequency || p(
|
|
|
496
496
|
}
|
|
497
497
|
});
|
|
498
498
|
xe.post("findOneAndUpdate", function(n) {
|
|
499
|
-
S(
|
|
499
|
+
n && S(
|
|
500
500
|
b.USER_STATS_INVENTORY,
|
|
501
501
|
n.user._id,
|
|
502
502
|
n
|
|
@@ -514,7 +514,7 @@ const A = d?.UserStatsInventory || p(
|
|
|
514
514
|
canChooseFaction: { type: Boolean, default: !1 }
|
|
515
515
|
});
|
|
516
516
|
de.post("findOneAndUpdate", function(n) {
|
|
517
|
-
S(b.USER, n._id, n);
|
|
517
|
+
n && S(b.USER, n._id, n);
|
|
518
518
|
});
|
|
519
519
|
de.post("deleteOne", async function() {
|
|
520
520
|
const n = this.getQuery()._id;
|
|
@@ -936,7 +936,7 @@ class Nt extends w {
|
|
|
936
936
|
return (await this.getAll()).filter(t).map(({ entityId: r }) => r).includes(e);
|
|
937
937
|
}
|
|
938
938
|
async getSomeStoreItems(e) {
|
|
939
|
-
const t = (await this.getAll()).filter(this.isStoreItem);
|
|
939
|
+
const t = (await this.getAll()).filter((a) => this.isStoreItem(a));
|
|
940
940
|
return H(
|
|
941
941
|
le(
|
|
942
942
|
e,
|
|
@@ -948,11 +948,11 @@ class Nt extends w {
|
|
|
948
948
|
);
|
|
949
949
|
}
|
|
950
950
|
async getSomeRepairItems(e) {
|
|
951
|
-
const t = (await this.getAll()).filter(this.isRepairItem);
|
|
951
|
+
const t = (await this.getAll()).filter((a) => this.isRepairItem(a));
|
|
952
952
|
return ge(t).slice(0, e);
|
|
953
953
|
}
|
|
954
954
|
async getSomeObjectItems(e) {
|
|
955
|
-
const t = (await this.getAll()).filter(this.isObjectItem);
|
|
955
|
+
const t = (await this.getAll()).filter((a) => this.isObjectItem(a));
|
|
956
956
|
return ge(t.filter((a) => !!a.shop?.price)).slice(
|
|
957
957
|
0,
|
|
958
958
|
e
|
|
@@ -983,7 +983,9 @@ class Nt extends w {
|
|
|
983
983
|
return (await this.getAll()).filter(e);
|
|
984
984
|
}
|
|
985
985
|
async fromDBToEquipableEquipment(e) {
|
|
986
|
-
const a = (await this.getAll()).filter(
|
|
986
|
+
const a = (await this.getAll()).filter(
|
|
987
|
+
(r) => this.isEquipment(r)
|
|
988
|
+
).find(
|
|
987
989
|
({ entityId: r }) => r === e.entityId
|
|
988
990
|
);
|
|
989
991
|
if (!a)
|
|
@@ -2028,19 +2030,19 @@ class bn extends w {
|
|
|
2028
2030
|
return this.isTitle(e) && "price" in e;
|
|
2029
2031
|
}
|
|
2030
2032
|
async getAllBackgrounds() {
|
|
2031
|
-
return (await this.getAll()).filter(this.isBackground);
|
|
2033
|
+
return (await this.getAll()).filter((e) => this.isBackground(e));
|
|
2032
2034
|
}
|
|
2033
2035
|
async getAllTitles() {
|
|
2034
|
-
return (await this.getAll()).filter(this.isTitle);
|
|
2036
|
+
return (await this.getAll()).filter((e) => this.isTitle(e));
|
|
2035
2037
|
}
|
|
2036
2038
|
async getAllFactionTitles() {
|
|
2037
|
-
return (await this.getAll()).filter(this.isFactionTitle);
|
|
2039
|
+
return (await this.getAll()).filter((e) => this.isFactionTitle(e));
|
|
2038
2040
|
}
|
|
2039
2041
|
async getAllQuestTitles() {
|
|
2040
|
-
return (await this.getAll()).filter(this.isQuestTitle);
|
|
2042
|
+
return (await this.getAll()).filter((e) => this.isQuestTitle(e));
|
|
2041
2043
|
}
|
|
2042
2044
|
async getAllShopTitles() {
|
|
2043
|
-
return (await this.getAll()).filter(this.isShopTitle);
|
|
2045
|
+
return (await this.getAll()).filter((e) => this.isShopTitle(e));
|
|
2044
2046
|
}
|
|
2045
2047
|
formatBackgroundId(e) {
|
|
2046
2048
|
const t = nt(e) ? e : e.ornamentId;
|
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){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){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){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){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){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){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){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){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){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){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){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(this.isStoreItem);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(this.isRepairItem);return o.shuffle(t).slice(0,e)}async getSomeObjectItems(e){const t=(await this.getAll()).filter(this.isObjectItem);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(this.isEquipment).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(this.isBackground)}async getAllTitles(){return(await this.getAll()).filter(this.isTitle)}async getAllFactionTitles(){return(await this.getAll()).filter(this.isFactionTitle)}async getAllQuestTitles(){return(await this.getAll()).filter(this.isQuestTitle)}async getAllShopTitles(){return(await this.getAll()).filter(this.isShopTitle)}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(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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/services/entities/helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,WAAW,EACX,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,IAAI,EACJ,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACV,MAAM,mBAAmB,CAAC;AAa3B,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,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,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAazD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAK3D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAS3D,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,0BAA0B,CACrC,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/services/entities/helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,SAAS,EACT,cAAc,EACd,WAAW,EACX,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,IAAI,EACJ,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACV,MAAM,mBAAmB,CAAC;AAa3B,OAAO,EAAE,kCAAkC,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,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,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAazD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAK3D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAS3D,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,0BAA0B,CACrC,SAAS,EAAE,WAAW,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAcjB,gCAAgC,CAAC,QAAQ,EAAE,aAAa;IAqC9D,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAGzD,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAG7D,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAG1D,yBAAyB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAI/D,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO;IAG1D,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO;IAG9D,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO;IAGhE,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,OAAO;IAI3D,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,SAAS,GAAG,CAAC;IAG7D,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC;IAG/D,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,SAAS,GAAG,CAAC;IAG7D,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC;IAG/D,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,SAAS;IAG7D,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC;IAG/D,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,UAAU,GAAG,CAAC;IAG/D,YAAY,CACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAClC,IAAI,IAAI,cAAc;IAGlB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,WAAW,GAAG,CAAC;IAIjE,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;IAMpE,QAAQ,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;CAKhD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAwBlC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,QAAA,MAAM,UAAU;;;;;;;;EASd,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAwBlC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,QAAA,MAAM,UAAU;;;;;;;;EASd,CAAC;AA4BH,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user-inventory/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,QAAA,MAAM,mBAAmB;;;;;;;;EAsBxB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user-inventory/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,QAAA,MAAM,mBAAmB;;;;;;;;EAsBxB,CAAC;AAWF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user-meta/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AASjD,QAAA,MAAM,cAAc;;;;;;;;EAgFlB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user-meta/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AASjD,QAAA,MAAM,cAAc;;;;;;;;EAgFlB,CAAC;AAeH,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user-ornament/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,QAAA,MAAM,kBAAkB;;;;;;;;EAqBtB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user-ornament/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,QAAA,MAAM,kBAAkB;;;;;;;;EAqBtB,CAAC;AAWH,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user-quest/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQlC,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,QAAA,MAAM,eAAe;;;;;;;;EAmBpB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/services/user-quest/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQlC,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,QAAA,MAAM,eAAe;;;;;;;;EAmBpB,CAAC;AAWF,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/casino/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD,QAAA,MAAM,qBAAqB;;;;;;;;EAwCzB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/casino/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExD,QAAA,MAAM,qBAAqB;;;;;;;;EAwCzB,CAAC;AAWH,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/economy/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,QAAA,MAAM,sBAAsB;;;;;;;;EAU1B,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/economy/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,QAAA,MAAM,sBAAsB;;;;;;;;EAU1B,CAAC;AAWH,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/engagement/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAE5D,QAAA,MAAM,yBAAyB;;;;;;;;EAY7B,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/engagement/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAE5D,QAAA,MAAM,yBAAyB;;;;;;;;EAY7B,CAAC;AAWH,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/flags/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,QAAA,MAAM,oBAAoB;;;;;;;;EAuBxB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/flags/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,QAAA,MAAM,oBAAoB;;;;;;;;EAuBxB,CAAC;AAWH,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/frequency/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAE3D,QAAA,MAAM,wBAAwB;;;;;;;;EAY5B,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/frequency/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAE3D,QAAA,MAAM,wBAAwB;;;;;;;;EAY5B,CAAC;AAWH,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/inventory/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAE3D,QAAA,MAAM,wBAAwB;;;;;;;;EA8B5B,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/services/user-stats/inventory/definition/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMlC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAE3D,QAAA,MAAM,wBAAwB;;;;;;;;EA8B5B,CAAC;AAWH,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opfr/services",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "OPFR services",
|
|
6
6
|
"author": "Matthieu VEIGA",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"node_modules",
|
|
47
47
|
"dist"
|
|
48
48
|
],
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "d7a9832dc7c05d22b45392929191b94766314d52"
|
|
50
50
|
}
|