@opfr/services 1.0.2 → 1.0.4
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 +42 -42
- package/dist/index.umd.js +1 -1
- package/dist/services/crew-stats/engagement/types.d.ts.map +1 -1
- package/dist/services/crew-stats/frequency/types.d.ts.map +1 -1
- package/dist/services/shop/items/default.d.ts.map +1 -1
- package/dist/services/user-cooldown/helper.d.ts +2 -2
- package/dist/services/user-cooldown/helper.d.ts.map +1 -1
- package/dist/services/user-inventory/process/findOne.d.ts.map +1 -1
- package/dist/services/user-stats/engagement/types.d.ts.map +1 -1
- package/dist/services/user-stats/frequency/types.d.ts.map +1 -1
- package/dist/services/user-stats/inventory/types.d.ts.map +1 -1
- package/package.json +5 -4
package/dist/index.es.js
CHANGED
|
@@ -52,11 +52,11 @@ class b extends f {
|
|
|
52
52
|
}), t;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
const
|
|
56
|
-
|
|
55
|
+
const Ce = new ue.EventEmitter(), m = (n, e, t) => {
|
|
56
|
+
Ce.emit(n, e, t);
|
|
57
57
|
}, ws = (n) => {
|
|
58
58
|
for (const [e, t] of Object.entries(n))
|
|
59
|
-
|
|
59
|
+
Ce.on(e, (a, r) => {
|
|
60
60
|
t(a, r);
|
|
61
61
|
});
|
|
62
62
|
}, h = {
|
|
@@ -79,11 +79,11 @@ const De = new ue.EventEmitter(), m = (n, e, t) => {
|
|
|
79
79
|
USER_STATS_FLAGS: "middleware/quest/USER_STATS_FLAGS",
|
|
80
80
|
USER_STATS_FREQUENCY: "middleware/quest/USER_STATS_FREQUENCY",
|
|
81
81
|
USER_STATS_INVENTORY: "middleware/quest/USER_STATS_INVENTORY"
|
|
82
|
-
},
|
|
83
|
-
|
|
82
|
+
}, De = new ue.EventEmitter(), ce = (n, e, t) => {
|
|
83
|
+
De.emit(n, e, t);
|
|
84
84
|
}, gs = (n) => {
|
|
85
85
|
for (const [e, t] of Object.entries(n))
|
|
86
|
-
|
|
86
|
+
De.on(e, (a, r) => {
|
|
87
87
|
t(a, r);
|
|
88
88
|
});
|
|
89
89
|
}, oe = {
|
|
@@ -298,11 +298,11 @@ Me.post("findOneAndUpdate", async function(n) {
|
|
|
298
298
|
const de = d?.CrewMeta || l("CrewMeta", Me), Ot = async (n) => await de.create({
|
|
299
299
|
crew: n
|
|
300
300
|
});
|
|
301
|
-
async function
|
|
301
|
+
async function Ct(n) {
|
|
302
302
|
const e = await de.findOne({ user: n }).lean();
|
|
303
303
|
return e || y(await Ot(n));
|
|
304
304
|
}
|
|
305
|
-
const
|
|
305
|
+
const Dt = (n, e) => de.findOneAndUpdate({ user: n }, e, {
|
|
306
306
|
returnDocument: "after",
|
|
307
307
|
upsert: !0
|
|
308
308
|
}).lean();
|
|
@@ -317,10 +317,10 @@ class Rt extends Tt {
|
|
|
317
317
|
return e;
|
|
318
318
|
}
|
|
319
319
|
fetchFromDb(e) {
|
|
320
|
-
return
|
|
320
|
+
return Ct(e);
|
|
321
321
|
}
|
|
322
322
|
updateInDb(e, t) {
|
|
323
|
-
return
|
|
323
|
+
return Dt(e, t);
|
|
324
324
|
}
|
|
325
325
|
}
|
|
326
326
|
const $e = new Rt();
|
|
@@ -832,7 +832,7 @@ Ne.post("findOneAndUpdate", async function(n) {
|
|
|
832
832
|
n
|
|
833
833
|
), n.hp <= 0 && an("death", n.user._id);
|
|
834
834
|
});
|
|
835
|
-
const
|
|
835
|
+
const C = d?.UserMeta || l("UserMeta", Ne), Fe = new u({
|
|
836
836
|
user: {
|
|
837
837
|
type: u.Types.ObjectId,
|
|
838
838
|
required: !0,
|
|
@@ -967,7 +967,7 @@ ze.post("findOneAndUpdate", function(n) {
|
|
|
967
967
|
n
|
|
968
968
|
);
|
|
969
969
|
});
|
|
970
|
-
const
|
|
970
|
+
const D = d?.UserStatsCasino || l("UserStatsCasino", ze), Ke = new u({
|
|
971
971
|
user: {
|
|
972
972
|
type: u.Types.ObjectId,
|
|
973
973
|
required: !0,
|
|
@@ -1123,7 +1123,7 @@ fe.post("findOneAndUpdate", function(n) {
|
|
|
1123
1123
|
});
|
|
1124
1124
|
fe.post("deleteOne", async function() {
|
|
1125
1125
|
const n = this.getQuery()._id;
|
|
1126
|
-
await Q.deleteOne({ user: n }), await _.deleteOne({ user: n }), await Zt.deleteOne({ user: n }), await W.deleteOne({ user: n }), await G.deleteOne({ user: n }), await Y.deleteOne({ user: n }), await
|
|
1126
|
+
await Q.deleteOne({ user: n }), await _.deleteOne({ user: n }), await Zt.deleteOne({ user: n }), await W.deleteOne({ user: n }), await G.deleteOne({ user: n }), await Y.deleteOne({ user: n }), await C.deleteOne({ user: n }), await X.deleteOne({ user: n }), await v.deleteMany({ user: n }), await V.deleteOne({ user: n }), await k.deleteOne({ user: n }), await J.deleteOne({ user: n }), await D.deleteOne({ user: n }), await Z.deleteOne({ user: n }), await ee.deleteOne({ user: n }), await te.deleteOne({ user: n }), await ne.deleteOne({ user: n }), await R.deleteOne({ user: n }), await M.deleteOne({ user: n });
|
|
1127
1127
|
});
|
|
1128
1128
|
const $ = d?.User || l("User", fe);
|
|
1129
1129
|
class un extends b {
|
|
@@ -1597,7 +1597,7 @@ const w = new Tn(), On = new u(
|
|
|
1597
1597
|
halfBonus: u.Types.Mixed
|
|
1598
1598
|
},
|
|
1599
1599
|
{ minimize: !1 }
|
|
1600
|
-
), ae = d?.Panoplies || l("Panoplies", On),
|
|
1600
|
+
), ae = d?.Panoplies || l("Panoplies", On), Cn = (n) => ae.find(n).lean(), Dn = async (n) => ae.find(n).populate("equipments");
|
|
1601
1601
|
async function Rn(n) {
|
|
1602
1602
|
const e = await ae.findOne({ panoplyId: n }).lean();
|
|
1603
1603
|
return e || null;
|
|
@@ -1605,7 +1605,7 @@ async function Rn(n) {
|
|
|
1605
1605
|
const Mn = async (n) => ae.findOne(n).populate("equipments");
|
|
1606
1606
|
class vn extends b {
|
|
1607
1607
|
getAllPopulated() {
|
|
1608
|
-
return
|
|
1608
|
+
return Dn({});
|
|
1609
1609
|
}
|
|
1610
1610
|
getPopulated(e) {
|
|
1611
1611
|
return Mn({ panoplyId: e });
|
|
@@ -1647,7 +1647,7 @@ class _n extends vn {
|
|
|
1647
1647
|
return Rn(e);
|
|
1648
1648
|
}
|
|
1649
1649
|
fetchManyFromDb(e = {}) {
|
|
1650
|
-
return
|
|
1650
|
+
return Cn(e);
|
|
1651
1651
|
}
|
|
1652
1652
|
}
|
|
1653
1653
|
const I = new _n();
|
|
@@ -2264,7 +2264,7 @@ const Zn = (n) => Y.create({
|
|
|
2264
2264
|
});
|
|
2265
2265
|
async function ea(n) {
|
|
2266
2266
|
const e = await Y.findOne({ user: n }).lean();
|
|
2267
|
-
return e
|
|
2267
|
+
return e || y(await Zn(n));
|
|
2268
2268
|
}
|
|
2269
2269
|
const ta = (n, e) => Y.findOneAndUpdate({ user: n }, e, {
|
|
2270
2270
|
upsert: !0,
|
|
@@ -2369,7 +2369,7 @@ class aa extends f {
|
|
|
2369
2369
|
}
|
|
2370
2370
|
}
|
|
2371
2371
|
async getGlobalRank(e) {
|
|
2372
|
-
return (await
|
|
2372
|
+
return (await C.aggregate([
|
|
2373
2373
|
{
|
|
2374
2374
|
$setWindowFields: {
|
|
2375
2375
|
sortBy: { "xp.amount": -1 },
|
|
@@ -2383,7 +2383,7 @@ class aa extends f {
|
|
|
2383
2383
|
]))[0];
|
|
2384
2384
|
}
|
|
2385
2385
|
async getBerryRank(e) {
|
|
2386
|
-
return (await
|
|
2386
|
+
return (await C.aggregate([
|
|
2387
2387
|
{
|
|
2388
2388
|
$setWindowFields: {
|
|
2389
2389
|
sortBy: { berry: -1 },
|
|
@@ -2684,14 +2684,14 @@ class aa extends f {
|
|
|
2684
2684
|
return await this.addBerry(e, r), r;
|
|
2685
2685
|
}
|
|
2686
2686
|
}
|
|
2687
|
-
const ra = async (n) => await
|
|
2687
|
+
const ra = async (n) => await C.create({
|
|
2688
2688
|
user: n
|
|
2689
2689
|
});
|
|
2690
2690
|
async function sa(n) {
|
|
2691
|
-
const e = await
|
|
2691
|
+
const e = await C.findOne({ user: n }).lean();
|
|
2692
2692
|
return e || y(await ra(n));
|
|
2693
2693
|
}
|
|
2694
|
-
const ia = (n, e) =>
|
|
2694
|
+
const ia = (n, e) => C.findOneAndUpdate({ user: n }, e, {
|
|
2695
2695
|
returnDocument: "after",
|
|
2696
2696
|
upsert: !0
|
|
2697
2697
|
}).lean();
|
|
@@ -2775,11 +2775,11 @@ class ya extends ca {
|
|
|
2775
2775
|
}
|
|
2776
2776
|
const Ee = new ya();
|
|
2777
2777
|
class fa extends f {
|
|
2778
|
-
getCommandCooldown(e, t) {
|
|
2779
|
-
return e.commands[t];
|
|
2778
|
+
async getCommandCooldown(e, t) {
|
|
2779
|
+
return (await this.get(e)).commands[t];
|
|
2780
2780
|
}
|
|
2781
|
-
getRaidCooldown(e, t) {
|
|
2782
|
-
return e.raid[t];
|
|
2781
|
+
async getRaidCooldown(e, t) {
|
|
2782
|
+
return (await this.get(e)).raid[t];
|
|
2783
2783
|
}
|
|
2784
2784
|
async reduceRaidCooldown(e, t) {
|
|
2785
2785
|
await this.update(e, [
|
|
@@ -3000,11 +3000,11 @@ class Ta extends f {
|
|
|
3000
3000
|
const Oa = async (n) => await X.create({
|
|
3001
3001
|
user: n
|
|
3002
3002
|
});
|
|
3003
|
-
async function
|
|
3003
|
+
async function Ca(n) {
|
|
3004
3004
|
const e = await X.findOne({ user: n }).lean();
|
|
3005
3005
|
return e || y(await Oa(n));
|
|
3006
3006
|
}
|
|
3007
|
-
const
|
|
3007
|
+
const Da = async (n, e) => X.findOneAndUpdate({ user: n }, e, {
|
|
3008
3008
|
upsert: !0,
|
|
3009
3009
|
returnDocument: "after"
|
|
3010
3010
|
}).lean();
|
|
@@ -3019,10 +3019,10 @@ class Ra extends Ta {
|
|
|
3019
3019
|
return e;
|
|
3020
3020
|
}
|
|
3021
3021
|
fetchFromDb(e) {
|
|
3022
|
-
return
|
|
3022
|
+
return Ca(e);
|
|
3023
3023
|
}
|
|
3024
3024
|
updateInDb(e, t) {
|
|
3025
|
-
return
|
|
3025
|
+
return Da(e, t);
|
|
3026
3026
|
}
|
|
3027
3027
|
}
|
|
3028
3028
|
const Xe = new Ra();
|
|
@@ -3220,7 +3220,7 @@ class ja extends xa {
|
|
|
3220
3220
|
return Fa(e, t);
|
|
3221
3221
|
}
|
|
3222
3222
|
}
|
|
3223
|
-
const
|
|
3223
|
+
const Cs = new ja();
|
|
3224
3224
|
class za extends f {
|
|
3225
3225
|
async isBuyLimitReached(e, t, a) {
|
|
3226
3226
|
const r = await p.getAllEntitiesLimit();
|
|
@@ -3292,7 +3292,7 @@ class La extends za {
|
|
|
3292
3292
|
return Ha(e, t);
|
|
3293
3293
|
}
|
|
3294
3294
|
}
|
|
3295
|
-
const
|
|
3295
|
+
const Ds = new La();
|
|
3296
3296
|
class Qa extends f {
|
|
3297
3297
|
async didSevenDoubleAtDoQ(e) {
|
|
3298
3298
|
await this.update(e, {
|
|
@@ -3320,7 +3320,7 @@ class Qa extends f {
|
|
|
3320
3320
|
const t = z();
|
|
3321
3321
|
t.setHours(0, 0, 0, 0);
|
|
3322
3322
|
const a = /* @__PURE__ */ new Date();
|
|
3323
|
-
a.setHours(0, 0, 0, 0), await
|
|
3323
|
+
a.setHours(0, 0, 0, 0), await D.updateOne(
|
|
3324
3324
|
{
|
|
3325
3325
|
user: e,
|
|
3326
3326
|
"bet666.last": {
|
|
@@ -3329,7 +3329,7 @@ class Qa extends f {
|
|
|
3329
3329
|
}
|
|
3330
3330
|
},
|
|
3331
3331
|
{ $inc: { "bet666.count": 1 }, $set: { "bet666.last": /* @__PURE__ */ new Date() } }
|
|
3332
|
-
), await
|
|
3332
|
+
), await D.updateOne(
|
|
3333
3333
|
{
|
|
3334
3334
|
user: e,
|
|
3335
3335
|
"bet666.last": {
|
|
@@ -3372,14 +3372,14 @@ class Qa extends f {
|
|
|
3372
3372
|
await this.update(e, { $inc: { "dice.drawWithDoubleSixCount": 1 } });
|
|
3373
3373
|
}
|
|
3374
3374
|
}
|
|
3375
|
-
const Wa = async (n) => await
|
|
3375
|
+
const Wa = async (n) => await D.create({
|
|
3376
3376
|
user: n
|
|
3377
3377
|
});
|
|
3378
3378
|
async function Ga(n) {
|
|
3379
|
-
const e = await
|
|
3379
|
+
const e = await D.findOne({ user: n }).lean();
|
|
3380
3380
|
return e || y(await Wa(n));
|
|
3381
3381
|
}
|
|
3382
|
-
const Ya = (n, e) =>
|
|
3382
|
+
const Ya = (n, e) => D.findOneAndUpdate({ user: n }, e, {
|
|
3383
3383
|
upsert: !0,
|
|
3384
3384
|
returnDocument: "after"
|
|
3385
3385
|
}).lean();
|
|
@@ -3729,7 +3729,7 @@ const Or = (n, e) => M.findOneAndUpdate({ user: n }, e, {
|
|
|
3729
3729
|
upsert: !0,
|
|
3730
3730
|
returnDocument: "after"
|
|
3731
3731
|
}).lean();
|
|
3732
|
-
class
|
|
3732
|
+
class Cr extends Ir {
|
|
3733
3733
|
constructor() {
|
|
3734
3734
|
super(300);
|
|
3735
3735
|
}
|
|
@@ -3746,13 +3746,13 @@ class Dr extends Ir {
|
|
|
3746
3746
|
return Or(e, t);
|
|
3747
3747
|
}
|
|
3748
3748
|
}
|
|
3749
|
-
const Bs = new
|
|
3749
|
+
const Bs = new Cr(), Dr = new u({
|
|
3750
3750
|
bannedUserId: { type: String, index: !0, required: !0 },
|
|
3751
3751
|
authorId: { type: String, required: !0 },
|
|
3752
3752
|
unbannedTimestamp: { type: Date, index: 1 },
|
|
3753
3753
|
reason: { type: String, required: !0 },
|
|
3754
3754
|
guildId: { type: String, required: !0 }
|
|
3755
|
-
}), re = d?.Bans || l("Bans",
|
|
3755
|
+
}), re = d?.Bans || l("Bans", Dr), Rr = (n) => re.create({
|
|
3756
3756
|
...n
|
|
3757
3757
|
}), Mr = (n, e) => re.exists({ bannedUserId: n, guildId: e });
|
|
3758
3758
|
class vr extends b {
|
|
@@ -4434,9 +4434,9 @@ export {
|
|
|
4434
4434
|
T as userMetaService,
|
|
4435
4435
|
Xe as userOrnamentService,
|
|
4436
4436
|
Os as userQuestService,
|
|
4437
|
-
|
|
4437
|
+
Cs as userRaidService,
|
|
4438
4438
|
Is as userService,
|
|
4439
|
-
|
|
4439
|
+
Ds as userShopService,
|
|
4440
4440
|
Rs as userStatsCasinoService,
|
|
4441
4441
|
Ms as userStatsCrewService,
|
|
4442
4442
|
ur as userStatsEconomyService,
|
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(d,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("mongoose"),require("@opfr/utils-lang"),require("node-cache"),require("@opfr/definitions"),require("events")):typeof define=="function"&&define.amd?define(["exports","mongoose","@opfr/utils-lang","node-cache","@opfr/definitions","events"],s):(d=typeof globalThis<"u"?globalThis:d||self,s(d.services={},d.mongoose,d["@opfr/utils-lang"],d["node-cache"],d["@opfr/definitions"],d.events))})(this,(function(d,s,o,He,m,Qe){"use strict";function We(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const re=We(Qe),k="___ALL_ENTITIES___";class f{cache;constructor(e){this.cache=new He({stdTTL:e,checkperiod:e*.2,useClones:!1})}async get(e){const t=this.normalizeKey(e),r=this.cache.get(t);if(r)return r;const n=await this.fetchFromDb(e);return n&&this.cache.set(t,n),n}async update(e,t,r){const n=await this.updateInDb(e,t,r);if(n){const i=this.getKey(n);this.cache.del(k),this.cache.set(this.normalizeKey(i),n)}return n}invalidate(e){this.cache.del(k),e&&this.cache.del(this.normalizeKey(e))}clearAll(){this.cache.flushAll()}}class $ extends f{async getAll(){const e=this.cache.get(k);if(e)return e;const t=await this.fetchManyFromDb({});return this.cache.set(k,t),t.forEach(r=>{this.cache.set(this.normalizeKey(this.getKey(r)),r)}),t}async getMany(e){const t=await this.fetchManyFromDb(e);return t.forEach(r=>{this.cache.set(this.normalizeKey(this.getKey(r)),r)}),t}}const fe=new re.EventEmitter,h=(a,e,t)=>{fe.emit(a,e,t)},Ge=a=>{for(const[e,t]of Object.entries(a))fe.on(e,(r,n)=>{t(r,n)})},w={CREW:"middleware/quest/CREW",CREW_META:"middleware/quest/CREW_META",CREW_ORNAMENTS:"middleware/quest/CREW_ORNAMENTS",CREW_QUEST:"middleware/quest/CREW_QUEST",CREW_STATS_ENGAGEMENT:"middleware/quest/CREW_STATS_ENGAGEMENT",CREW_STATS_FREQUENCY:"middleware/quest/CREW_STATS_FREQUENCY",USER:"middleware/quest/USER",USER_CREW:"middleware/quest/USER_CREW",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_CREW:"middleware/quest/USER_STATS_CREW",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"},me=new re.EventEmitter,x=(a,e,t)=>{me.emit(a,e,t)},Ye=a=>{for(const[e,t]of Object.entries(a))me.on(e,(r,n)=>{t(r,n)})},F={USER_INVENTORY:"middleware/raid/USER_INVENTORY",USER_QUEST:"middleware/raid/USER_QUEST",USER_RAID:"middleware/raid/USER_RAID"},he=new s.Schema({createdBy:s.Schema.Types.ObjectId,name:String,description:String,channelId:String,memberLimit:{type:Number,default:m.CREW_DEFAULT_MEMBER_LIMIT},disintegration:{type:Number,default:m.CREW_DEFAULT_DISINTEGRATION},faction:String},{timestamps:!0,minimize:!1});he.post("findOneAndUpdate",async function(a){h(w.CREW,a._id,a)});const j=s.models?.Crew||s.model("Crew",he);class Xe extends f{async getCrewRank(e){return(await j.aggregate([{$lookup:{from:"crewmetas",localField:"_id",foreignField:"crew",as:"meta"}},{$unwind:"$meta"},{$setWindowFields:{sortBy:{"meta.xp":-1},output:{rank:{$rank:{}}}}},{$match:{_id:e}},{$project:{_id:1,rank:1}}]))[0]}getCrewRanking(){return j.aggregate([{$lookup:{from:"crewmetas",localField:"_id",foreignField:"crew",as:"meta"}},{$unwind:"$meta"},{$sort:{"meta.xp":-1}},{$limit:10},{$project:{_id:1,"meta.xp":1}}])}async increaseLimit(e){await this.update(e,{$inc:{memberLimit:1}})}async repair(e,t){await this.update(e,[{$set:{disintegration:{$min:[{$add:["$disintegration",t]},100]}}}])}async applyDisintegration(e){const t=await this.get(e);if(!t)return;const{memberLimit:r}=t,[n,i]=[r-2,(r-3)*2+3];await this.update(e,[{$set:{disintegration:{$max:[{$add:["$disintegration",-1*o.randomBetween(n,i)]},0]}}}])}}const Le=async a=>{const e=await j.findById(a).lean();return e||null},Ve=(a,e)=>j.findOneAndUpdate({_id:a},e,{returnDocument:"after"}).lean();class Je extends Xe{constructor(){super(3600)}normalizeKey(e){return e.toString()}getKey({_id:e}){return e}fetchFromDb(e){return Le(e)}updateInDb(e,t){return Ve(e,t)}}const we=new Je;class Ze extends f{async hasXpBuff(e){const t=await this.get(e);if(!o.hasExpire(t.buffs.xp.expireAt))return t.buffs.xp.boost}async calcXp(e,t){const r=await we.get(e);return r?Math.ceil(t*(r.disintegration/m.CREW_DEFAULT_DISINTEGRATION)*(await this.hasXpBuff(e)??1)):0}async addXp(e,t){await this.update(e,{$inc:{xp:t}})}async addBerry(e,t){await this.update(e,{$inc:{berry:t}})}async removeBerry(e,t){await this.update(e,{$inc:{berry:-t}})}async addXpBuff(e,t){const r=new Date;await this.update(e,[{$set:{"buffs.xp":{$cond:{if:{lt:["$buffs.xp.expireAt",r]},then:{boost:1.1,expireAt:{$add:[r,t*60*60*1e3]}},else:{boost:1.1,expireAt:{$add:["$buffs.xp.expireAt",t*60*60*1e3]}}}}}}])}}const y=a=>a.toObject({flattenMaps:!0,flattenObjectIds:!1}),Se=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"Crew"},xp:{type:Number,default:0,index:-1},berry:{type:Number,default:0,index:-1},buffs:{xp:{boost:{type:Number,default:1.1},expireAt:{type:Date,default:new Date(0)}}}});Se.post("findOneAndUpdate",async function(a){h(w.CREW_META,a.crew._id,a)});const ne=s.models?.CrewMeta||s.model("CrewMeta",Se),et=async a=>await ne.create({crew:a});async function tt(a){const e=await ne.findOne({user:a}).lean();return e||y(await et(a))}const at=(a,e)=>ne.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class rt extends Ze{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({crew:e}){return e}fetchFromDb(e){return tt(e)}updateInDb(e,t){return at(e,t)}}const se=new rt;class nt extends f{async unlockBadge(e,t,r){t.isProgressive?await this.update(e,{$addToSet:{unlockedBadges:`${t.id}_${r}`}}):await this.update(e,{$addToSet:{unlockedBadges:t.id}})}}const ge=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"Crew"},unlockedBadges:{type:[String],default:[]}});ge.post("findOneAndUpdate",async function(a){h(w.CREW_ORNAMENTS,a.crew._id,a)});const ie=s.models?.CrewOrnaments||s.model("CrewOrnaments",ge),st=a=>ie.create({crew:a});async function it(a){const e=await ie.findOne({crew:a}).lean();return e||y(await st(a))}const ut=(a,e)=>ie.findOneAndUpdate({crew:a},e,{upsert:!0,returnDocument:"after"}).lean();class ct extends nt{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({crew:e}){return e}fetchFromDb(e){return it(e)}updateInDb(e,t){return ut(e,t)}}const dt=new ct;class lt extends ${async getStatus(e,t){return(await this.get({crew:e,questId:t})).status}async isCompleted(e,t){return await this.getStatus(e,t)==="COMPLETED"}async isStreaking(e,t){const{lastCompletionDate:r}=await this.get({crew:e,questId:t});return!!r&&o.sameDay(o.yesterday(),r)}async completeQuest(e){return this.update(e,[{$set:{lastCompletionDate:new Date,status:m.QuestStatus.COMPLETED}}],{upsert:!1})}}const be=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,ref:"Crew",index:!0},questId:{type:String,required:!0,index:!0},status:{type:String,default:m.QuestStatus.IN_PROGRESS,index:!0},lastCompletionDate:Date},{minimize:!1});be.post("findOneAndUpdate",function(a){h(w.CREW_QUEST,a.crew._id,a)});const z=s.models?.CrewQuest||s.model("CrewQuest",be);function ot(a){return z.find(a).lean()}const pt=async a=>await z.create({...a});async function yt(a){const e=await z.findOne(a).lean();return e||y(await pt(a))}function ft(a,e,t){return z.findOneAndUpdate(a,e,{upsert:!0,...t,returnDocument:"after"}).lean()}class mt extends lt{constructor(){super(300)}normalizeKey({crew:e,questId:t}){return`${e.toString()}/${t}`}getKey({crew:e,questId:t}){return{crew:e,questId:t}}fetchFromDb(e){return yt(e)}fetchManyFromDb(e){return ot(e)}updateInDb(e,t,r){return ft(e,t,r)}}const ht=new mt;class wt extends f{async setActualVoiceMembers(e,t){await this.update(e,{$set:{"currentVoiceState.amount":t,"currentVoiceState.connectedAt":new Date}})}async setMaxVoiceMembers(e,t){await this.update(e,{$set:{maxVoiceMembersReached:t}})}}const $e=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"Crew"},maxVoiceMembersReached:{type:Number,default:0},currentVoiceState:{amount:{type:Number,default:0},connectedAt:{type:Date,default:new Date(0)}}});$e.post("findOneAndUpdate",function(a){h(w.CREW_STATS_ENGAGEMENT,a.crew._id,a)});const ue=s.models?.CrewStatsEngagement||s.model("CrewStatsEngagement",$e),St=a=>ue.create({crew:a});async function gt(a){const e=await ue.findOne({crew:a}).lean();return e||y(await St(a))}const bt=(a,e)=>ue.findOneAndUpdate({crew:a},e,{upsert:!0,returnDocument:"after"}).lean();class $t extends wt{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({crew:e}){return e}fetchFromDb(e){return gt(e)}updateInDb(e,t){return bt(e,t)}}const Et=new $t;class It extends f{}const Ee=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"Crew"},streak80Percent:{type:Number,default:0}});Ee.post("findOneAndUpdate",function(a){h(w.CREW_STATS_FREQUENCY,a.crew._id,a)});const ce=s.models?.CrewStatsFrequency||s.model("CrewStatsFrequency",Ee),Ut=a=>ce.create({crew:a});async function Tt(a){const e=await ce.findOne({crew:a}).lean();return e||y(await Ut(a))}const Ot=(a,e)=>ce.findOneAndUpdate({crew:a},e,{upsert:!0,returnDocument:"after"}).lean();class Dt extends It{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({crew:e}){return e}fetchFromDb(e){return Tt(e)}updateInDb(e,t){return Ot(e,t)}}const Ct=new Dt,Ie=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:m.QuestStatus.IN_PROGRESS,index:1},lastCompletionDate:Date,streak:Number},{minimize:!1});Ie.post("findOneAndUpdate",function(a){x(F.USER_QUEST,a.user._id,a),h(w.USER_QUEST,a.user._id,a)});const O=s.models?.UserQuest||s.model("UserQuest",Ie),vt=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)},qod:{type:Date,default:new Date(0)},guess:{type:Date,default:new Date(0)},blackjack:{type:Date,default:new Date(0)},rps:{type:Date,default:new Date(0)}}}),P=s.models?.UserCooldown||s.model("UserCooldown",vt),Ue=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},crew:{type:s.Schema.Types.ObjectId,ref:"Crew",required:!0,index:!0},permission:{type:String,default:"member",required:!0},percent:{type:Number,default:m.CREW_DEFAULT_XP_PERCENT}},{minimize:!1});Ue.post("findOneAndUpdate",function(a){h(w.USER_CREW,a.user._id,a)});const D=s.models?.UserCrew||s.model("UserCrew",Ue),Rt=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}}),Mt=s.models?.UserDailyReport||s.model("UserDailyReport",Rt),At=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},encyclopedia:{type:[String],default:[]}}),K=s.models?.UserEncyclopedia||s.model("UserEncyclopedia",At),_t=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}}),H=s.models?.UserGames||s.model("UserGames",_t),Te=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});Te.post("findOneAndUpdate",function(a){x(F.USER_INVENTORY,a.user._id,a),h(w.USER_INVENTORY,a.user._id,a)});const Q=s.models?.UserInventory||s.model("UserInventory",Te),Bt=new re.EventEmitter,qt=(a,e)=>{Bt.emit(a,e)},C={multiplier:{type:Number,default:0},origin:String,expireAt:{type:Date,default:null},startAt:{type:Date,default:null}},Oe=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},scam:{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:[C],default:[]},work:{type:[C],default:[]}},berry:{work:{type:[C],default:[]},global:{type:[C],default:[]}},drop:{work:{type:[C],default:[]}},xp:{global:{type:[C],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}}});Oe.post("findOneAndUpdate",async function(a){h(w.USER_META,a.user._id,a),a.hp<=0&&qt("death",a.user._id)});const v=s.models?.UserMeta||s.model("UserMeta",Oe),De=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"}});De.post("findOneAndUpdate",function(a){h(w.USER_ORNAMENT,a.user._id,a)});const W=s.models?.UserOrnament||s.model("UserOrnament",De),Ce=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},currentRaid:{type:{raidId:String,seed:String,progression:{type:[String],default:[]},buffItem:String,rewards:{type:s.Schema.Types.Mixed,default:{}}},default:void 0},obtainedConditions:{type:s.Schema.Types.Mixed,default:{},_id:!1},obtainedRewards:{type:s.Schema.Types.Mixed,default:{},_id:!1},unlocked:{type:s.Schema.Types.Mixed,default:{},_id:!1}},{minimize:!1});Ce.post("findOneAndUpdate",function(a){x(F.USER_RAID,a.user._id,a)});const G=s.models?.UserRaid||s.model("UserRaid",Ce),Nt=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}}}}),_=s.models?.UserSettings||s.model("UserSettings",Nt),kt=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}),Y=s.models?.UserShop||s.model("UserShop",kt),ve=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}}});ve.post("findOneAndUpdate",function(a){h(w.USER_STATS_CASINO,a.user._id,a)});const R=s.models?.UserStatsCasino||s.model("UserStatsCasino",ve),Re=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},xpGivenToCrew:{type:Number,default:0},berryGivenToCrew:{type:Number,default:0},timeCrewBeyond10PercentXp:{type:Number,default:0},timeCrewAbove90PercentXp:{type:Number,default:0}});Re.post("findOneAndUpdate",function(a){h(w.USER_STATS_CREW,a.user._id,a)});const X=s.models?.UserStatsCrew||s.model("UserStatsCrew",Re),Me=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},workCount:{type:Number,default:0},raidFinishedCount:{type:Number,default:0},totalSpentInShop:{type:Number,default:0}});Me.post("findOneAndUpdate",function(a){h(w.USER_STATS_ECONOMY,a.user._id,a)});const L=s.models?.UserStatsEconomy||s.model("UserStatsEconomy",Me),Ae=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:[]}});Ae.post("findOneAndUpdate",function(a){h(w.USER_STATS_ENGAGEMENT,a.user._id,a)});const V=s.models?.UserStatsEngagement||s.model("UserStatsEngagement",Ae),_e=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},tagEveryone:{type:Boolean,default:!1},botPingCount:{type:Number,default:0},reportedSomeone:{type:Boolean,default:!1},hasCelebrateBirthday:{type:Boolean,default:!1},gamblingFlags:{betMin:{type:Boolean,default:!1},bet10M:{type:Boolean,default:!1},lose10M:{type:Boolean,default:!1},winBet10M:{type:Boolean,default:!1},loseEverything:{type:Boolean,default:!1}}});_e.post("findOneAndUpdate",function(a){h(w.USER_STATS_FLAGS,a.user._id,a)});const J=s.models?.UserStatsFlags||s.model("UserStatsFlags",_e),Be=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},edito:{readToday:{type:Number,default:0},lastTimeRead:{type:Date,default:new Date}}});Be.post("findOneAndUpdate",function(a){h(w.USER_STATS_FREQUENCY,a.user._id,a)});const M=s.models?.UserStatsFrequency||s.model("UserStatsFrequency",Be),qe=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}}});qe.post("findOneAndUpdate",function(a){h(w.USER_STATS_INVENTORY,a.user._id,a)});const A=s.models?.UserStatsInventory||s.model("UserStatsInventory",qe),de=new s.Schema({discordId:{type:String,required:!0,unique:!0},birthday:{type:Date,default:null,index:1},faction:{type:String,default:m.DEFAULT_FACTION,index:1},canChangeFaction:{type:Boolean,default:!1},canChooseFaction:{type:Boolean,default:!1}});de.post("findOneAndUpdate",function(a){h(w.USER,a._id,a)}),de.post("deleteOne",async function(){const a=this.getQuery()._id;await P.deleteOne({user:a}),await D.deleteOne({user:a}),await Mt.deleteOne({user:a}),await K.deleteOne({user:a}),await H.deleteOne({user:a}),await Q.deleteOne({user:a}),await v.deleteOne({user:a}),await W.deleteOne({user:a}),await O.deleteMany({user:a}),await G.deleteOne({user:a}),await _.deleteOne({user:a}),await Y.deleteOne({user:a}),await R.deleteOne({user:a}),await X.deleteOne({user:a}),await L.deleteOne({user:a}),await V.deleteOne({user:a}),await J.deleteOne({user:a}),await M.deleteOne({user:a}),await A.deleteOne({user:a})});const E=s.models?.User||s.model("User",de);class xt extends ${getByObjectId(e){return this.update({_id:e},{})}getNextBirthdays(){const e=new Date,t=e.getFullYear();return E.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}}])}async getFactionRank(e){const t=await this.get(e);return(await E.aggregate([{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$match:{faction:t.faction}},{$setWindowFields:{sortBy:{"meta.xp.amount":-1},output:{rank:{$rank:{}}}}},{$match:{_id:t._id}},{$project:{_id:0,rank:1}}]))[0]}getFactionRanking(e){return E.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 E.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 E.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 O.aggregate([{$match:{status:m.QuestStatus.COMPLETED}},{$group:{_id:"$user",questCount:{$sum:1}}},{$setWindowFields:{sortBy:{questCount:-1},output:{rank:{$rank:{}}}}},{$project:{_id:0,discordId:"$_id",questCount:1,rank:1}},{$sort:{rank:1}}])}getTodayAllBirthday(){const e=new Date;return E.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}})}}const Ft=a=>E.find(a),jt=a=>E.create({discordId:a});async function zt(a){const e=await E.findOne({discordId:a}).lean();return e||y(await jt(a))}const Pt=(a,e)=>E.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"});class Kt extends xt{constructor(){super(3600)}normalizeKey(e){return e}getKey({discordId:e}){return e}fetchFromDb(e){return zt(e)}fetchManyFromDb(e){return Ft(e)}updateInDb(e,t){return Pt(e,t)}}const Ht=new Kt,Qt=["work","rps","blackjack","guess","qod","dice"],Wt=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}),B=s.models?.Reminder||s.model("Reminder",Wt),Gt=async a=>{await B.deleteMany(a)},Yt=async(a,e)=>{await B.deleteOne({user:a,type:e})};class Xt extends ${getAllPassedReminder(){return this.getMany({date:{$lte:new Date}})}async addReminder(e,t,r){await this.update({user:e,type:t},{$set:{date:r}},{upsert:!0})}async updateReminderDate(e,t,r){await this.update({user:e,type:t},[{$set:{date:{$add:["$date",r]}}}])}async removeReminder(e,t){await Yt(e,t),this.invalidate({user:e,type:t})}async deleteSelectedReminders(e){const t=await this.getMany({_id:{$in:e}});await Gt({_id:{$in:e}}),t.forEach(r=>{this.invalidate({user:r.user,type:r.type})})}}function Lt(a,e={}){return B.find(a,e).lean()}async function Vt(a){const e=await B.findOne(a).lean();return e||null}async function Jt(a,e,t){return B.findOneAndUpdate(a,e,{...t,returnDocument:"after"}).lean()}class Zt extends Xt{constructor(){super(300)}getKey(e){return{user:e.user,type:e.type}}normalizeKey({user:e,type:t}){return`${e.toString()}/${t}`}fetchFromDb(e){return Vt(e)}fetchManyFromDb(e,t){return Lt(e,t)}updateInDb(e,t,r={upsert:!1}){return Jt(e,t,r)}}const q=new Zt;class ea extends ${async isOrnamentIds(e,t=()=>!0){const n=(await this.getAll()).filter(t).map(({ornamentId:i})=>i);return e.every(i=>n.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){return e.ornamentId==="background_default"?"par défaut":`"${o.capitalizeAllWords(e.ornamentId.split("_").join(" "))}"`}pickOrnament(e){const t=Math.random();let r=0;if(Object.keys(e).map(i=>parseFloat(i)).reduce((i,u)=>i+u,0)!==1)throw RangeError("pickOrnament - Sum of all odds (keys) must be equal to 1");for(const[i,u]of Object.entries(e)){const l=parseFloat(i);if(t>=r+l){r+=l;continue}if(u.length!==0)return u[o.randomBetween(0,u.length)]}throw Error("pickOrnament - All ods array were empty")}pickEachRarityOrnament(e,t){if(t.length!==m.RANK_IDS_WITHOUT_BASIC.length)throw new RangeError("pickEachRarityOrnament - must give same number of odds than ranks");return o.filterNullAndUndefined(t.map((r,n)=>{const i=m.RANK_IDS_WITHOUT_BASIC[n],u=e[i];return Math.random()>r||!u||!u.length?null:o.pickFrom(u)}))}}const ta=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}),Ne=s.models?.Ornaments||s.model("Ornaments",ta),aa=async(a,e={})=>Ne.find(a,e).lean();async function ra(a){const e=await Ne.findOne({ornamentId:a}).lean();return e||null}class na extends ea{constructor(){super(3600)}updateInDb(e,t){throw new Error("Method not implemented."+e+t)}fetchFromDb(e){return ra(e)}fetchManyFromDb(e){return aa(e)}getKey(e){return e.ornamentId}normalizeKey(e){return e}}const S=new na,sa=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}),Z=s.models?.Panoplies||s.model("Panoplies",sa),ia=a=>Z.find(a).lean(),ua=async a=>Z.find(a).populate("equipments");async function ca(a){const e=await Z.findOne({panoplyId:a}).lean();return e||null}const da=async a=>Z.findOne(a).populate("equipments");class la extends ${getAllPopulated(){return ua({})}getPopulated(e){return da({panoplyId:e})}hasPanoply(e,t){const r=o.filterNullAndUndefined(Object.values(e)),n=t.equipments.filter(i=>r.find(u=>u.entityId===i.entityId)).length;if(n===t.equipments.length)return t.fullBonus;if(n>=t.equipments.length/2)return t.halfBonus}async getPanoplyBonus(e){const t=[],r=await this.getAllPopulated();for(const n of r){const i=o.filterNullAndUndefined(Object.values(e)),u=n.equipments.filter(l=>i.find(({entityId:c})=>c===l.entityId));u.length===n.equipments.length?t.push([n,"full"]):u.length>=n.equipments.length/2?t.push([n,"half"]):u.length>=1&&t.push([n,null])}return t}}class oa extends la{constructor(){super(3600)}normalizeKey(e){return e}getKey({panoplyId:e}){return e}updateInDb(e,t){throw new Error("Method not implemented."+e+t)}fetchFromDb(e){return ca(e)}fetchManyFromDb(e={}){return ia(e)}}const I=new oa;class pa extends ${isEntity(e){return!!e&&"entityId"in e}isItem(e){return!this.isEquipment(e)}isEquipment(e){return e.category==="equipment"}async isEntityId(e,t=()=>!0){return(await this.getAll()).filter(t).map(({entityId:n})=>n).includes(e)}async isEquipmentId(e){const r=(await this.getAll()).find(n=>n.entityId===e);return!!r&&this.isEquipment(r)}async isItemId(e){const r=(await this.getAll()).find(n=>n.entityId===e);return!!r&&this.isItem(r)}async getSomeStoreItems(e){const t=(await this.getAll()).filter(this.isStoreItem);return this.getSomeItems(e,t)}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(r=>!!r.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((r,[n,i])=>{const u=t.find(({entityId:l})=>l===n);return u&&r.push([u,i]),r},[])}async getAllEntitiesLimit(){const e=await this.getAll();return o.arrayToRecord(e.map(t=>[t.entityId,t.shop?.limit??0]))}async getAllEntitiesBy(e){return(await this.getAll()).filter(e)}async fromDBToEquipableEquipment(e){const r=(await this.getAll()).filter(this.isEquipment).find(({entityId:n})=>n===e.entityId);if(!r)throw new Error(`cannot find any equipment: ${e.entityId}`);return this.seedEquipment(r,e.seed)}async getUserEquipmentsCharacteristics(e){let t={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};const r=await I.getAllPopulated();for(const n of m.EQUIPMENT_SLOT){const i=e[n];i&&(t=o.mergeObjects(t,(await this.fromDBToEquipableEquipment(i)).characteristics,(u,l)=>u+l))}for(const n of r){const i=I.hasPanoply(e,n);i&&!("target"in i)&&(t=o.mergeObjects(t,i,(u,l)=>u+l))}return t}getSomeItems(e,t){const r=[];for(;r.length<e;){const n=o.exclude(t,r,i=>i.entityId);r.push(S.pickOrnament(o.groupBy(n,i=>i.shop?.odd??0)))}return o.sortBy(r,n=>n.shop?.price??0)}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}getEquipmentSlotType(e){return m.EQUIPMENT_FROM_SLOT_TO_TYPE[e]}seedEquipment(e,t){const r=o.seededRandom(t),n=o.sortBy(o.recordToArray(e.characteristics),([i])=>i);return{...e,seed:t,characteristics:Object.fromEntries(n.map(([i,u])=>[i,Array.isArray(u)?o.randomBetween(u[0],u[1]+1,r):u]))}}isEquipped(e,t){return!!Object.values(e).find(r=>r&&this.isSameEquipment(r,t))}calcILvl(e){return Object.values(e.characteristics).reduce((r,n)=>r+n,0)+e.level}}const ya=new s.Schema({type:{type:String,enum:m.EFFECT_KEYS,required:!0},params:{type:s.Schema.Types.Mixed}},{_id:!1}),fa=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:[ya],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}),ke=s.models?.Entities||s.model("Entities",fa),ma=async(a,e={})=>ke.find(a,e).lean();async function ha(a){const e=await ke.findOne({entityId:a}).lean();return e||null}class wa extends pa{constructor(){super(3600)}updateInDb(e,t){throw new Error("Method not implemented."+e+t)}fetchFromDb(e){return ha(e)}fetchManyFromDb(e){return ma(e)}normalizeKey(e){return e}getKey(e){return e.entityId}}const p=new wa,Sa=(a,e,t)=>D.create({user:a,crew:e,permission:t}),ga=async a=>{await D.deleteOne({user:a})};class ba extends ${async updatePercent(e,t){await this.update(e,{$set:{percent:t}})}async updatePermission(e,t){await this.update(e,{$set:{permission:t}})}async addUserToCrew(e,t,r){await Sa(e,t,r),this.invalidate(t)}async removeUserFromCrew(e,t){await ga(e),this.invalidate(e),this.invalidate(t)}async getAllUserIdsFromCrew(e){const t=e.toString(),r=this.cache.get(t);if(r)return r.map(({user:i})=>i);const n=await this.getMany({crew:e});return this.cache.set(t,n),n.map(({user:i})=>i)}}const $a=a=>D.find(a).lean(),Ea=a=>D.findOne({user:a}).lean(),Ia=(a,e)=>D.findOneAndUpdate({user:a},e).lean();class Ua extends ba{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Ea(e)}fetchManyFromDb(e){return $a(e)}updateInDb(e,t){return Ia(e,t)}}const xe=new Ua;class Ta extends f{hasAlreadyFoundEntity(e,t){return e.encyclopedia.includes(t)}async addEntities(e,t){await this.update(e,{$addToSet:{encyclopedia:{$each:t}}})}}const Oa=async a=>await K.create({user:a});async function Da(a){const e=await K.findOne({user:a}).lean();return e||y(await Oa(a))}const Ca=(a,e)=>K.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class va extends Ta{constructor(){super(300)}fetchFromDb(e){return Da(e)}getKey({user:e}){return e}normalizeKey(e){return e.toString()}updateInDb(e,t){return Ca(e,t)}}const ee=new va;class Ra extends f{getPanoplyEffectiveBonus(e,t){const r=o.filterNullAndUndefined(Object.values(e.equippedItems)),n=t.equipments.filter(i=>r.find(u=>u.entityId===i.entityId)).length;if(n===t.equipments.length)return t.fullBonus;if(n>=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 r=await I.getAllPopulated();for(const n of m.EQUIPMENT_SLOT){const i=e.equippedItems?.[n];if(!i)continue;const u=await p.fromDBToEquipableEquipment(i);t=o.mergeObjects(t,u.characteristics,(l,c)=>l+c)}for(const n of r){const i=this.getPanoplyEffectiveBonus(e,n);i&&!("target"in i)&&(t=o.mergeObjects(t,i,(u,l)=>u+l))}return t}maxCraftQuantity(e,t){let r=1/0;for(const n of t)r=Math.min(r,Math.floor((e.itemList[n.entityId]??0)/n.size));return r}hasEnoughItemsForRecipe(e,t,r){for(const n of t)if((e.itemList[n.entityId]??0)<n.size*r)return!1;return!0}hasInventoryRequirements(e,t){return o.recordToArray(t).reduce((r,[n,i])=>r&&(e.itemList[n]??0)>=(i??0),!0)}hasEnoughEntity(e,t,r){return(e.itemList[r]??0)>=t}getItemList(e){return Object.fromEntries(e.itemList)}async calcBottleMultiplier(e,{bottle:{buffs:t}}){const r=await this.get(e),i=(await I.getPanoplyBonus(r.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 I.getPanoplyBonus(e.equippedItems)).find(([r,n])=>r.panoplyId==="marine"&&n!==null);return t&&t[1]==="full"?10:t&&t[1]==="half"?20:1/0}async hasRevolutionaryBuff(e){const t=await this.get(e);return(await I.getPanoplyBonus(t.equippedItems)).find(([n,i])=>n.panoplyId==="revolutionary"&&i!==null)?.[1]??null}async getRecipeResult(e,t){const r=(await I.getPanoplyBonus(e.equippedItems)).find(([n,i])=>n.panoplyId==="little_blacksmith"&&i!==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}async addItem(e,t,r){await this.update(e,{$inc:{[`itemList.${t}`]:r}}),await ee.addEntities(e,[t])}async addItems(e,t){await this.update(e,{$inc:Object.fromEntries(Object.entries(t).filter(([,r])=>(r??0)>0).map(([r,n])=>[`itemList.${r}`,n]))}),await ee.addEntities(e,o.recordToArray(t).filter(([,r])=>r>0).map(([r])=>r))}async removeItem(e,t,r){r!==0&&await this.update(e,[{$set:{[`itemList.${t}`]:{$max:[{$add:[`$itemList.${t}`,-r]},0]}}}])}async removeEquipment(e,t,r){await this.update(e,{$pull:{equipmentList:{id:t,seed:r}}})}async removeAllItem(e,t){await this.update(e,{$set:{[`itemList.${t}`]:0}})}async addEquipments(e,t){await this.update(e,{$push:{equipmentList:{$each:t}}}),await ee.addEntities(e,t.map(r=>r.entityId))}async saveEquipments(e){await this.update(e,[{$set:{equipmentSave:{$push:["$equipmentSave","$equippedItems"]}}}])}async changeEquippedEquipment(e,t){const r=await this.get(e);r?.equipmentSave[t]&&await this.equip(e,r.equipmentSave[t])}async equip(e,t){const r=await T.getMaxHp(e),n=Object.fromEntries(o.recordToArray(t).map(([i,u])=>[`equippedItems.${i}`,u]));await this.update(e,{$set:n}),await T.updateHp(e,r)}async unequip(e,t){const r=await T.getMaxHp(e);await this.update(e,{$set:{[`equippedItems.${t}`]:null}}),await T.updateHp(e,r)}async craftItem(e,t,r,n,i){for(const{entityId:c,size:b}of t)await this.removeItem(e,c,b*n);const{entityId:u,size:l}=r;await p.isEquipmentId(u)?await this.addEquipments(e,[{entityId:u,seed:i}]):await p.isItemId(u)&&await this.addItem(e,u,l*n)}async dismantleEntity(e,t,r,n,i){p.isEquipment(t)?await this.removeEquipment(e,t.entityId,i):p.isItem(t)&&await this.removeItem(e,t.entityId,n);for(const{entityId:u,quantity:l}of r)await p.isItemId(u)&&await this.addItem(e,u,n*l);await this.removeItem(e,"tools",1)}async enchantItem(e,t,r,n){await this.removeItem(e,t,n*4),await this.removeItem(e,"enchanted_stone",n),await this.addItem(e,r,n)}async unlockRecipe(e,t){await this.update(e,{$addToSet:{recipes:t}})}}const Ma=a=>Q.create({user:a});async function Aa(a){const e=await Q.findOne({user:a}).lean();return e?.itemList,e||y(await Ma(a))}const _a=(a,e)=>Q.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Ba extends Ra{constructor(){super(300)}fetchFromDb(e){return Aa(e)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}updateInDb(e,t){return _a(e,t)}}const g=new Ba;class qa extends f{getTotalCharacteristics({characteristics:e,scrolls:t}){return o.arrayToRecord(m.CHARACTERISTICS.map(r=>[r,m.getComputedCharacteristicValue(e[r])+t[r]]))}async isCooldownForXpPassed(e){const t=await this.get(e);return Date.now()-t.xp.lastMessageWithXp.getTime()>60*1e3}async calcXpBoost(e){const t=await this.get(e),{boost:r}=t.xp,n=r!==null&&Date.now()<r.getTime()?.2:0,i=Math.max(t.premium?.5:0,t.booster?.25:0);return n+i+t.buffs.xp.global.reduce((u,{expireAt:l,startAt:c,multiplier:b})=>c&&c>new Date||l&&o.hasExpire(l)?u:u+b,0)}calcMessageXp(e){const t=e.trim().length,r=2;return t<10?10*r:t>300?300*r:t*r}async getXpDeathPenalties(e){const t=await this.get(e),r=m.getCurrentLevel(t.xp.amount);return r<=10?5e3:r<=20?1e4:r<=30?2e4:r<=40?3e4:r<=50?5e4:r<=60?75e3:r<=70?15e4:r<=80?25e4:r<=90?4e5:r<=100?75e4:14e6}async calcXp(e,t,r){return t*=1+await this.calcXpBoost(e),Math.ceil(t*r)}async calcBerry(e,t,r){if(t<=0)return t;const n=r?1:await this.calcBuffMultiplier(e,"berry","global");return Math.ceil(t*(n||1))}async calcBuffMultiplier(e,t,r){return(await this.get(e)).buffs[t][r].reduce((u,{expireAt:l,startAt:c,multiplier:b})=>u+(new Date>=(c??new Date)&&(!l||!o.hasExpire(l))?b:0),1)}async getMaxHp(e){const t=await this.get(e),r=await g.get(e),{vitality:n}=this.getTotalCharacteristics(t),i=await g.getUserEquipmentsCharacteristics(r);return(n+i.vitality)*m.HP_PER_VITALITY+m.DEFAULT_MAX_HP}async getHpRatio(e){const t=await this.get(e),r=await this.getMaxHp(e);return Math.min(t.hp/r,1)}async hasCharacteristicRequirement(e,t){const r=await this.get(e),n=await g.get(e),i=await g.getUserEquipmentsCharacteristics(n),u=o.mergeObjects(this.getTotalCharacteristics(r),i,(l,c)=>l+c);if("sum"in t){let l=0;for(const c of t.characteristics)l+=u[c]??0;return l>=t.sum}else{for(const l of Object.keys(t))if(u[l]<(t[l]??0))return!1;return!0}}async getGlobalRank(e){return(await v.aggregate([{$setWindowFields:{sortBy:{"xp.amount":-1},output:{rank:{$rank:{}}}}},{$match:{_id:e}},{$project:{rank:1}}]))[0]}async getBerryRank(e){return(await v.aggregate([{$setWindowFields:{sortBy:{berry:-1},output:{rank:{$rank:{}}}}},{$match:{_id:e}},{$project:{rank:1}}]))[0]}async hasMalusBuff(e){const t=await this.get(e),r=[...t.buffs.xp.global,...t.buffs.berry.global,...t.buffs.berry.work,...t.buffs.cooldown.work,...t.buffs.cooldown.casino,...t.buffs.drop.work];for(const{multiplier:n,startAt:i,expireAt:u}of r)if(n<0&&(!u||!o.hasExpire(u))&&(i??new Date)<=new Date)return!0;return!1}async addBerry(e,t){await this.update(e,[{$set:{berry:{$max:[{$add:["$berry",t]},0]}}}])}async addXp(e,t){await this.update(e,{$inc:{"xp.amount":t}})}async updatePremium(e,t){await this.update(e,{$set:{premium:t}})}async updateBooster(e,t){await this.update(e,{$set:{booster:t}})}async updateBoost(e,t){const{xp:{boost:r}}=await this.update(e,[{$set:{"xp.boost":{$cond:{if:{$or:[{$not:"$xp.boost"},{$lt:["$xp.boost",new Date]}]},then:{$add:[new Date,t]},else:{$add:["$xp.boost",t]}}}}}]);return r}async updateBuff(e,t){if(Array.isArray(t)){for(const n of t)await this.updateBuff(e,n);return}const r=m.transformToDBBuff(t);await this.update(e,[{$set:{[`buffs.${t.target}`]:{$map:{input:`$buffs.${t.target}`,as:"buff",in:{$cond:{if:{$eq:[{$substr:["$$buff.origin",0,{$indexOfBytes:["$$buff.origin","/"]}]},t.origin.split("/")[0]]},then:{multiplier:t.multiplier,origin:t.origin,expireAt:r.expireAt?{$cond:{if:{$lt:["$$buff.expireAt",new Date]},then:r.expireAt,else:{$add:["$$buff.expireAt",(t.endIn??0)*60*60*1e3]}}}:null,startAt:{$cond:{if:{$gte:["$$buff.startAt",new Date]},then:"$$buff.startAt",else:{$add:[new Date,(t.startIn??0)*60*60*1e3]}}}},else:"$$buff"}}}}}},{$set:{[`buffs.${t.target}`]:{$cond:{if:{$in:[t.origin.split("/")[0],{$map:{input:`$buffs.${t.target}`,as:"buff",in:{$substr:["$$buff.origin",0,{$indexOfBytes:["$$buff.origin","/"]}]}}}]},then:`$buffs.${t.target}`,else:{$concatArrays:[`$buffs.${t.target}`,[{...r}]]}}}}}])}async removeBuff(e,t){await this.update(e,{$pull:{[`buffs.${t.target}`]:{origin:t.origin}}})}async updatePanoplyBuff(e,t,r,n){const i=await p.fromDBToEquipableEquipment(t),u=o.filterNullAndUndefined(Object.values(r)),c=(await I.getAllPopulated()).find(N=>N.panoplyId===i.panoply);if(!c)return;const b=c.equipments.filter(N=>(u.find(is=>N.entityId===is.entityId)||!n&&i.entityId===N.entityId)&&(n?i.entityId!==N.entityId:!0)).length,ye=b===c.equipments.length?c.fullBonus:b>=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),ye&&"target"in ye&&await this.updateBuff(e,ye)}async gainHp(e,t){const r=await this.get(e),i=await this.getMaxHp(e)-r.hp;await this.update(e,{$set:{hp:r.hp+Math.floor(Math.min(t,i))}})}async loseHp(e,t){await this.update(e,[{$set:{hp:{$max:[{$add:["$hp",-t]},0]}}}])}async updateHp(e,t){const r=await this.getMaxHp(e);await this.update(e,[{$set:{hp:{$round:[{$multiply:[{$divide:["$hp",t]},r]},0]}}}])}async addCharacteristics(e,t){const r=await this.getMaxHp(e),n=Object.fromEntries(Object.entries(t).filter(([,i])=>i!==0).map(([i,u])=>[`characteristics.${i}`,u]));await this.update(e,{$inc:n}),await this.updateHp(e,r)}async addScrollCharacteristic(e,t){const r=await this.getMaxHp(e),n=Object.fromEntries(Object.entries(t).filter(([,i])=>i!==0).map(([i,u])=>[`scrolls.${i}`,u]));await this.update(e,{$inc:n}),await this.updateHp(e,r)}async resetCharacteristics(e,t){const r=await this.getMaxHp(e),n={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};t?await this.update(e,{$set:{characteristics:n,"resetCharacteristics.free":!1}}):await this.update(e,{$set:{characteristics:n,"resetCharacteristics.nextAvailable":new Date(Date.now()+720*60*60*1e3)},$inc:{berry:-1e8}}),await this.updateHp(e,r)}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 updateScam(e,t){await this.update(e,{$set:{scam:t}})}async updateUserXp(e,t){const r=await xe.get(e),n=r?.percent??0,i=await this.calcXp(e,t,(1-n)*await this.getHpRatio(e));let u=0;return await this.addXp(e,i),r&&(u=await se.calcXp(r.crew,t*n),await se.addXp(r.crew,u)),{userXp:i,crewXp:u}}async updateUserBerry(e,t,r){const n=await this.calcBerry(e,t,r);return await this.addBerry(e,n),n}}const Na=async a=>await v.create({user:a});async function ka(a){const e=await v.findOne({user:a}).lean();return e||y(await Na(a))}const xa=(a,e)=>v.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Fa extends qa{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return ka(e)}updateInDb(e,t){return xa(e,t)}}const T=new Fa;class ja extends ${async updateSendDailyQuest(e,t){await this.update({discordId:e},{$set:{sendDailyQuest:t}})}async updateSendDailyReport(e,t){await this.update({discordId:e},{$set:{sendDailyReport:t}})}async updateInventorySort(e,t){await this.update({discordId:e},{$set:{"sort.inventory":t}})}async updateReminderSettings(e,t,r){await this.update({discordId:e},{$set:{[`reminder.${t}`]:r}})}getUsersWithDailyReportEnable(){return this.getMany({"settings.sendDailyReport":!0,faction:{$ne:"citizen"}})}}const za=a=>_.find(a).lean(),Pa=async a=>await _.create({user:a});async function Ka(a){const e=await _.findOne({user:a}).lean();return e||y(await Pa(a))}const Ha=(a,e)=>_.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Qa extends ja{constructor(){super(3600)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Ka(e)}fetchManyFromDb(e){return za(e)}updateInDb(e,t){return Ha(e,t)}}const Fe=new Qa;class Wa extends f{getCommandCooldown(e,t){return e.commands[t]}getRaidCooldown(e,t){return e.raid[t]}async reduceRaidCooldown(e,t){await this.update(e,[{$set:{"raid.special":{$subtract:[{$ifNull:["$raid.special",new Date]},t*3600*1e3]},"raid.classic":{$subtract:[{$ifNull:["$raid.classic",new Date]},t*3600*1e3]}}}]),await q.updateReminderDate(e,"raid/special",-1*t*3600*1e3),await q.updateReminderDate(e,"raid/classic",-1*t*3600*1e3)}async startRaidCooldown(e,t,r){const{reminder:n}=await Fe.get(e);await this.update(e,{$set:{[`raid.${t}`]:new Date(Date.now()+r)}}),n.raid[t]&&await q.addReminder(e,`raid/${t}`,new Date(Date.now()+r))}async lockUserCommand(e){await this.update(e,{$set:{lockUserCommand:new Date(Date.now()+2*3600*1e3)}}),await T.gainHp(e,1)}async useCommand(e,t,r){const{reminder:n}=await Fe.get(e);await this.update(e,{$set:{[`commands.${t}`]:new Date(Date.now()+r)}}),n.commands[t]&&await q.addReminder(e,`commands/${t}`,new Date(Date.now()+r))}}const Ga=async a=>await P.create({user:a});async function Ya(a){const e=await P.findOne({user:a}).lean();return e||y(await Ga(a))}const Xa=(a,e)=>P.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class La extends Wa{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Ya(e)}updateInDb(e,t){return Xa(e,t)}}const je=new La;class Va extends f{async setGuessGame(e,t,r,n){await this.update(e,{$set:{guess:{amount:t,tries:r,numberToGuess:n,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 Ja=async a=>await H.create({user:a});async function Za(a){const e=await H.findOne({user:a}).lean();return e||y(await Ja(a))}const er=(a,e)=>H.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class tr extends Va{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Za(e)}updateInDb(e,t){return er(e,t)}}const ar=new tr;class rr extends f{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,r){t.isProgressive?await this.update(e,{$addToSet:{unlockedBadges:`${t.id}_${r}`}}):await this.update(e,{$addToSet:{unlockedBadges:t.id}})}async unlockFactionBadge(e,t){await this.update(e,{$addToSet:{unlockedFactionBadges:{$each:[`b_marine_${t}`,`b_revolutionary_${t}`,`b_pirate_${t}`]}}})}async unlockProfileAsset(e,t){await this.update(e,{$addToSet:{unlockedProfileAssets:t}})}async unlockBag(e,t){await this.update(e,{$addToSet:{unlockedBags:t}})}async selectBag(e,t){await this.update(e,{$set:{selectedBag:t}})}}const nr=async a=>await W.create({user:a});async function sr(a){const e=await W.findOne({user:a}).lean();return e||y(await nr(a))}const ir=async(a,e)=>W.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class ur extends rr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return sr(e)}updateInDb(e,t){return ir(e,t)}}const le=new ur;class cr 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:r}=await this.get({user:e,questId:t});return!!r&&o.sameDay(o.yesterday(),r)}async getStreakMultiplier(e,t){const r=await this.get({user:e,questId:t});return await this.isStreaking(e,t)?1+Math.min(2,(r.streak??0)/10):1}async completeQuest(e,t=!1){const r=o.yesterday();r.setHours(0,0,0,0);const n=new Date;return n.setHours(0,0,0,0),this.update(e,[{$set:{...t?{streak:{$cond:{if:{$and:[{$gte:["$lastCompletionDate",r]},{$lt:["$lastCompletionDate",n]}]},then:{$add:[{$ifNull:["$streak",0]},1]},else:1}}}:{},lastCompletionDate:new Date,status:m.QuestStatus.COMPLETED}}],{upsert:!1})}}function dr(a){return O.find(a).lean()}const lr=async a=>await O.create({...a});async function or(a){const e=await O.findOne(a).lean();return e||y(await lr(a))}function pr(a,e,t){return O.findOneAndUpdate(a,e,{upsert:!0,...t,returnDocument:"after"}).lean()}class yr extends cr{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 or(e)}fetchManyFromDb(e){return dr(e)}updateInDb(e,t,r){return pr(e,t,r)}}const fr=new yr;class mr extends f{async hasUnlockedRaid(e,t){return(await this.get(e)).unlocked?.[t]}async alreadyObtainedRaidReward(e,t,r){const n=await this.get(e);return t in n.obtainedRewards?n.obtainedRewards[t].includes(r):!1}async getObtainedRaidReward(e,t){return(await this.get(e)).obtainedRewards[t]??[]}async fulfillCondition(e,t,r,n){const i=await this.get(e);return n==="include"?r.every(u=>(i.obtainedConditions[t]??[]).includes(u)):r.every(u=>!(i.obtainedConditions[t]??[]).includes(u))}async unlockRaid(e,t){await this.update(e,{$set:{[`unlocked.${t}`]:!0}})}async startRaid(e,t,r,n,i){const u=Date.now();return await this.update(e,{$set:{currentRaid:{raidId:t,buffItem:r,seed:u,progression:[],rewards:{}}}}),await je.startRaidCooldown(e,n,i),u}async resetRaid(e){await this.update(e,{$unset:{currentRaid:""}})}async resetRaidProgression(e){await this.update(e,{$set:{"currentRaid.progression":[]}})}async progressRaid(e,t){await this.update(e,{$push:{"currentRaid.progression":t}})}async claimReward(e,t,r){await this.update(e,{$addToSet:{[`obtainedRewards.${t}`]:r}})}async addRewardsToRaid(e,t){await this.update(e,{$inc:Object.fromEntries(o.recordToArray(t).filter(([r])=>r!=="title"&&r!=="condition").map(([r,n])=>[`currentRaid.rewards.${r}`,n])),...t.title?{$set:{"currentRaid.rewards.title":t.title}}:{}})}async updateCondition(e,t,r){await this.update(e,{$addToSet:{[`obtainedConditions.${t}`]:r}})}}const hr=a=>G.create({user:a}),wr=async a=>{const e=await G.findOne({user:a}).lean();return e||y(await hr(a))},Sr=(a,e)=>G.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"});class gr extends mr{constructor(){super(3600)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return wr(e)}updateInDb(e,t){return Sr(e,t)}}const br=new gr;class $r extends f{async isBuyLimitReached(e,t,r){const n=await p.getAllEntitiesLimit();if(await p.isEntityId(t,p.isEquipment))return!1;const i=await this.get(e),u=i.limit?.[t];let l=n[t];const c=await g.hasRevolutionaryBuff(e);return i.lastShopId!==r?!1:(c==="half"&&t==="chest_2"&&(l+=2),c==="full"&&t==="chest_3"&&(l+=1),!!(l&&u&&u>=l))}async getShopItemRest(e,t,r,n=m.SHOP_DEFAULT_AVAILABLE_ENTITY_AMOUNT){const i=await p.getAllEntitiesLimit();if(await p.isEntityId(t,p.isEquipment))return n;let u=i[t];const l=await this.get(e),c=l.limit?.[t],b=await g.hasRevolutionaryBuff(e);return b==="half"&&t==="chest_2"&&(u+=2),b==="full"&&t==="chest_3"&&(u+=1),u?l.lastShopId!==r?u:c?u-c:Math.min(u,n):n}async increaseBuyLimit(e,t,r,n){await this.update(e,[{$set:{limit:{$cond:{if:{$eq:["$lastShopId",t]},then:{$setField:{field:r,input:{$ifNull:["$limit",{}]},value:{$add:[{$ifNull:[`$limit.${r}`,0]},n]}}},else:{[r]:n}}},lastShopId:t}}])}}const Er=async a=>await Y.create({user:a}),Ir=async a=>{const e=await Y.findOne({user:a}).lean();return e||y(await Er(a))},Ur=(a,e)=>Y.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Tr extends $r{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Ir(e)}updateInDb(e,t){return Ur(e,t)}}const Or=new Tr;class Dr extends f{async didSevenDoubleAtDoQ(e){await this.update(e,{$inc:{"doubleOrQuit.sevenDoubleInARowCount":1}})}async winWithBlackjack(e){await this.update(e,{$inc:{"blackJack.blackJackCount":1}})}async updateLastGames(e,t,r){await this.update(e,{$push:{lastGames:{$each:[{gameType:t,endState:r}],$position:0,$slice:20}}})}async drawIncrement(e){await this.update(e,{$inc:{drawCount:1}})}async bet666(e){const t=o.yesterday();t.setHours(0,0,0,0);const r=new Date;r.setHours(0,0,0,0),await R.updateOne({user:e,"bet666.last":{$gte:t,$lt:r}},{$inc:{"bet666.count":1},$set:{"bet666.last":new Date}}),await R.updateOne({user:e,"bet666.last":{$lt:t}},{$set:{"bet666.last":new Date,"bet666.count":1}}),this.invalidate(e)}async updateTotalBet(e,t){await this.update(e,{$inc:{totalBet:t}})}async updateRps(e,t){await this.update(e,[{$set:{"rps.count":{$cond:{if:{$eq:["$rps.lastRpsPlayed",t]},then:{$add:["$rps.count",1]},else:1}},"rps.lastRpsPlayed":t}}])}async hasGuessInOneTry(e){await this.update(e,{$inc:{"priceIsRight.guessInOneTryCount":1}})}async diceDoubleSix(e){await this.update(e,{$inc:{"dice.doubleSixCount":1}})}async diceDrawDoubleSix(e){await this.update(e,{$inc:{"dice.drawWithDoubleSixCount":1}})}}const Cr=async a=>await R.create({user:a});async function vr(a){const e=await R.findOne({user:a}).lean();return e||y(await Cr(a))}const Rr=(a,e)=>R.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Mr extends Dr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return vr(e)}updateInDb(e,t){return Rr(e,t)}}const Ar=new Mr;class _r extends f{async increaseXpGiven(e,t){await this.update(e,{$inc:{xpGivenToCrew:t}})}async increaseBerryGiven(e,t){await this.update(e,{$inc:{berryGivenToCrew:t}})}async updateCrew10Percent(e,t){t?await this.update(e,{$set:{timeCrewBeyond10PercentXp:0}}):await this.update(e,{$inc:{timeCrewBeyond10PercentXp:1}})}async updateCrew90Percent(e,t){t?await this.update(e,{$set:{timeCrewAbove90PercentXp:0}}):await this.update(e,{$inc:{timeCrewAbove90PercentXp:1}})}}const Br=async a=>await X.create({user:a});async function qr(a){const e=await X.findOne({user:a}).lean();return e||y(await Br(a))}const Nr=(a,e)=>X.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class kr extends _r{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return qr(e)}updateInDb(e,t){return Nr(e,t)}}const xr=new kr;class Fr extends f{async workIncrement(e){await this.update(e,{$inc:{workCount:1}})}async updateTotalSpentInShop(e,t){await this.update(e,{$inc:{totalSpentInShop:t}})}}const jr=a=>L.create({user:a});async function zr(a){const e=await L.findOne({user:a}).lean();return e||y(await jr(a))}const Pr=(a,e)=>L.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Kr extends Fr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return zr(e)}updateInDb(e,t){return Pr(e,t)}}const ze=new Kr;class Hr extends f{async randomMessageIncrement(e){await this.update(e,{$inc:{randomMessageClaimed:1}})}async addWrittenTextChannel(e,t){await this.update(e,{$addToSet:{writeDifferentChatIds:t}})}async incrementMessageSend(e){await this.update(e,{$inc:{messageSent:1}})}async addTotalMinutesInVoice(e,t){await this.update(e,{$inc:{totalMinutesInVoice:t}})}}const Qr=async a=>await V.create({user:a});async function Wr(a){const e=await V.findOne({user:a}).lean();return e||y(await Qr(a))}const Gr=(a,e)=>V.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Yr extends Hr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Wr(e)}updateInDb(e,t){return Gr(e,t)}}const Xr=new Yr;class Lr extends f{async hasReportedSomeone(e){await this.update(e,{$set:{reportedSomeone:!0}})}async botPingIncrement(e){await this.update(e,{$inc:{botPingCount:1}})}async hasCelebrateBirthday(e){await this.update(e,{$set:{hasCelebrateBirthday:!0}})}async hasTagEveryone(e){await this.update(e,{$set:{tagEveryone:!0}})}async hasBetMin(e){await this.update(e,{$set:{"gamblingFlags.betMin":!0}})}async hasLoseEverything(e){await this.update(e,{$set:{"gamblingFlags.loseEverything":!0}})}async hasBet10M(e){await this.update(e,{$set:{"gamblingFlags.bet10M":!0}})}async hasWinBet10M(e){await this.update(e,{$set:{"gamblingFlags.winBet10M":!0}})}async hasLose10M(e){await this.update(e,{$set:{"gamblingFlags.lose10M":!0}})}}const Vr=async a=>await J.create({user:a});async function Jr(a){const e=await J.findOne({user:a}).lean();return e||y(await Vr(a))}const Zr=(a,e)=>J.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class en extends Lr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Jr(e)}updateInDb(e,t){return Zr(e,t)}}const tn=new en;class an extends f{async readEdito(e){const t=new Date;t.setHours(0,0,0,0),await M.updateOne({user:e,"edito.lastTimeRead":{$gte:t}},{$inc:{"edito.readToday":1},$set:{"edito.lastTimeRead":new Date}}),await M.updateOne({user:e,"edito.lastTimeRead":{$lt:t}},{$set:{"edito.lastTimeRead":new Date,"edito.readToday":1}}),this.invalidate(e)}}const rn=async a=>await M.create({user:a});async function nn(a){const e=await M.findOne({user:a}).lean();return e||y(await rn(a))}const sn=(a,e)=>M.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 nn(e)}updateInDb(e,t){return sn(e,t)}}const cn=new un;class dn extends f{async updateCraftStats(e,t,r){const n=await p.get(r);!n||!p.isItem(n)||await this.update(e,{$inc:{"crafts.cookedMeal":p.isCookedMeal(n)?t:0,"crafts.scrolls":p.isScrollItem(n)?t:0,"crafts.totalCrafted":t}})}async incrementAlcoholDrink(e,t,r){["wine","beer","rhum"].includes(t)&&await this.update(e,{$inc:{"alcohols.wines":t==="wine"?r:0,"alcohols.beers":t==="beer"?r:0,"alcohols.rhums":t==="rhum"?r:0,"alcohols.totalConsumed":r}})}async incrementBottleUsedToday(e,t){const r=new Date;r.setHours(0,0,0,0),await A.updateOne({user:e,"bottle.lastUsed":{$gte:r}},{$inc:{"bottle.usedToday":t},$set:{"bottle.lastUsed":new Date}}),await A.updateOne({user:e,"bottle.lastUsed":{$lt:r}},{$set:{"bottle.lastUsed":new Date,"bottle.usedToday":t}}),this.invalidate(e)}async incrementBottleUsedTotal(e,t){await this.update(e,{$inc:{"bottle.totalUsed":t}})}async incrementChestOpenedTotal(e,t){await this.update(e,{$inc:{"chest.totalOpened":t}})}}const ln=async a=>await A.create({user:a});async function on(a){const e=await A.findOne({user:a}).lean();return e||y(await ln(a))}const pn=(a,e)=>A.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,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}}),te=s.models?.Bans||s.model("Bans",mn),hn=a=>te.create({...a}),wn=(a,e)=>te.exists({bannedUserId:a,guildId:e});class Sn extends ${async getUnbanUsers(){return this.getMany({unbannedTimestamp:{$lte:new Date,$ne:null}})}async banUserFromGuild(e){await hn(e)}async isBannedFromGuild(e,t){return!!await wn(e,t)}}const gn=a=>te.find(a).lean(),bn=a=>te.findOne(a).lean();class $n extends Sn{constructor(){super(3600*36)}normalizeKey(e){return`${e.guildId}/${e.bannedUserId}`}getKey({bannedUserId:e,guildId:t}){return{bannedUserId:e,guildId:t}}fetchFromDb(e){return bn(e)}fetchManyFromDb(e){return gn(e)}updateInDb(){throw new Error("Method not implemented.")}}const En=new $n,In=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}}}),oe=s.models?.Invitation||s.model("Invitation",In),Un=a=>oe.create({...a}),Tn=async a=>{await oe.deleteMany({...a})};class On extends f{async sendInvitation({senderId:e,receiverId:t,gameMode:r,...n}){return await this.get({senderId:e,gameMode:r,receiverId:t})?!1:(await Un({...n,senderId:e,gameMode:r,receiverId:t}),!0)}async receiveInvitation(e){return this.get(e)}async deleteInvitation(e){await Tn(e),this.invalidate(e)}}const Dn=a=>oe.findOne({...a}).lean();class Cn extends On{constructor(){super(3600)}normalizeKey(e){return`${e.gameMode}/${e.receiverId}/${e.senderId}`}getKey({receiverId:e,gameMode:t,senderId:r}){return{gameMode:t,receiverId:e,senderId:r}}fetchFromDb(e){return Dn(e)}updateInDb(){throw new Error("Method not implemented.")}}const vn=new Cn;class Rn extends f{async setEditoChannel(e,t){await this.update({guildId:e},{$set:{"edito.channelId":t}})}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 setRankingChannel(e,t){await this.update({guildId:e},{$set:{"ranking.channelId":t}})}async setRankingMessage(e,t){await this.update({guildId:e},{$set:{"ranking.messageId":t}})}async setCrewInfoChannelId(e,t){await this.update({guildId:e},{$set:{"crew.infoChannelId":t}})}async addCrewChannelId(e,t,r){await this.update({guildId:e},{$push:{"crew.crewChannelIds":{channelId:r,crewId:t}}})}async updateRolesId(e,t){await this.update({guildId:e},{$set:Object.fromEntries(Object.entries(t).map(([r,n])=>[`roles.${r}`,n]))})}async updateChannelId(e,t){await this.update({guildId:e},{$set:Object.fromEntries(Object.entries(t).map(([r,n])=>[`channels.${r}`,n]))})}}const Mn=new s.Schema({guildId:{type:String,required:!0,unique:!0},ranking:{channelId:{type:String,default:null},messageId:{type:String,default:null}},roles:{premium:{type:String,default:null},booster:{type:String,default:null},scam:{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:{channelId:{type:String,default:null},price:{type:Number,default:100},messageId:{type:String,default:null}},crew:{infoChannelId:{type:String,default:null},crewChannelIds:{type:[{channelId:{type:String},crewId:{type:String}}],default:[]}},shopChannelId:{type:String,default:null}}),pe=s.models?.Settings||s.model("Settings",Mn),An=a=>pe.create({guildId:a}),_n=async a=>{const e=await pe.findOne({guildId:a}).lean();return e||y(await An(a))},Bn=(a,e)=>pe.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"}).lean();class qn extends Rn{constructor(){super(3600*24*30)}normalizeKey(e){return e}getKey({guildId:e}){return e}fetchFromDb(e){return _n(e)}updateInDb(e,t){return Bn(e,t)}}const Nn=new qn,kn=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}),ae=s.models?.Shop||s.model("Shop",kn),xn=a=>ae.create({shopType:a}),Pe=async a=>{const e=await ae.findOne({shopType:a}).lean();return e||y(await xn(a))};class U{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 T.updateUserBerry(e,-1*this.price*t,!1),await ze.updateTotalSpentInShop(e,this.price*t)):await g.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 Fn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await le.unlockBackground(e,this.data.ornamentId)}isBackground(){return!0}}class jn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isBoostXp(){return!0}}class zn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isChest(){return!0}}class Pn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isObject(){return!0}}class Kn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addEquipments(e,o.range({stop:t}).map(()=>p.seedEquipment({...this.data},Date.now()-Math.round(Math.random()*1e3))).map(r=>({entityId:r.entityId,seed:r.seed})))}isEquipment(){return!0}}class Hn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isBottle(){return!0}}class Qn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isRepair(){return!0}}class Wn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isStore(){return!0}}class Gn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await le.unlockTitle(e,this.data.ornamentId)}isTitle(){return!0}}class Yn extends f{async getShopItem(e,t){const n=(await this.get(e)).items.find(b=>b.id===t);if(!n)return;const{price:i,size:u,currency:l}=n,c=await p.get(n.id)??await S.get(n.id);if(S.isOrnament(c)&&S.isBackground(c))return new Fn({price:i,item:c,size:u,currency:l});if(S.isOrnament(c)&&S.isTitle(c))return new Gn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isChestItem(c))return new zn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isBoostItem(c))return new jn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isRepairItem(c))return new Qn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isStoreItem(c))return new Wn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isObjectItem(c))return new Pn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isEquipment(c))return new Kn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isBottleItem(c))return new Hn({price:i,size:u,item:c,currency:l})}async getShopItemList(e){const t=await this.get(e),r=[];for(const{id:n}of t.items){const i=await this.getShopItem(e,n);i&&r.push(i)}return r}getShopItemId(e){return p.isEntity(e.data)?e.data.entityId:e.data.ornamentId}async updateShopStats(e,t,r){await this.update({shopType:e},{$inc:{"stats.berrySpent":t.price*r,"stats.itemBought":r,"stats.chestBought":t.isChest()?r:0,"stats.percentBought":t.isRepair()?(t.data.effects.find(n=>n.type==="CREW_REPAIR")?.params.amount??0)*r:0,"stats.boostTimeBought":t.isBoostXp()?t.data.ms/(1440*60*1e3):0}})}async buyShopItem(e,t,r,n){const i=t.map(u=>(u.id===this.getShopItemId(r)&&u.size&&(u.size-=n),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 Xn=(a,e)=>ae.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"}).lean();class Ln extends Yn{constructor(){super(3600)}normalizeKey(e){return e}getKey({shopType:e}){return e}fetchFromDb(e){return Pe(e)}updateInDb(e,t){return Xn(e,t)}}const Vn=new Ln,Jn=new s.Schema({warnedUserId:{type:String,required:!0,index:!0},authorId:String,date:{type:Date,default:Date.now()},reason:{type:String,default:null}}),Ke=s.models?.Warn||s.model("Warn",Jn),Zn=a=>Ke.countDocuments(a);class es extends ${getUserWarns(e){return this.getMany({warnedUserId:e})}getUserWarnCount(e){return Zn({warnedUserId:e})}}const ts=a=>Ke.find(a).lean();class as extends es{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 ts(e)}updateInDb(){throw new Error("Method not implemented.")}}const rs=new as,ns=a=>{s.connect(a)};class ss extends s.Types.ObjectId{}d.COOLDOWN_COMMANDS=Qt,d.ObjectId=ss,d.QUEST_MIDDLEWARE_EVENT_NAME=w,d.RAID_MIDDLEWARE_EVENT_NAME=F,d.banService=En,d.connectToServices=ns,d.crewMetaService=se,d.crewOrnamentsService=dt,d.crewQuestService=ht,d.crewService=we,d.crewStatsEngagementService=Et,d.crewStatsFrequencyService=Ct,d.emitQuestMiddlewareEvent=h,d.emitRaidMiddlewareEvent=x,d.entityService=p,d.findShop=Pe,d.invitationService=vn,d.ornamentService=S,d.panoplyService=I,d.registerQuestMiddlewareEvents=Ge,d.registerRaidMiddlewareEvents=Ye,d.reminderService=q,d.settingsService=Nn,d.shopModel=ae,d.shopService=Vn,d.userCooldownService=je,d.userCrewService=xe,d.userEncyclopediaService=ee,d.userGamesService=ar,d.userInventoryService=g,d.userMetaService=T,d.userOrnamentService=le,d.userQuestService=fr,d.userRaidService=br,d.userService=Ht,d.userShopService=Or,d.userStatsCasinoService=Ar,d.userStatsCrewService=xr,d.userStatsEconomyService=ze,d.userStatsEngagementService=Xr,d.userStatsFlagsService=tn,d.userStatsFrequencyService=cn,d.userStatsInventoryService=fn,d.warnService=rs,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
(function(d,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("mongoose"),require("@opfr/utils-lang"),require("node-cache"),require("@opfr/definitions"),require("events")):typeof define=="function"&&define.amd?define(["exports","mongoose","@opfr/utils-lang","node-cache","@opfr/definitions","events"],s):(d=typeof globalThis<"u"?globalThis:d||self,s(d.services={},d.mongoose,d["@opfr/utils-lang"],d["node-cache"],d["@opfr/definitions"],d.events))})(this,(function(d,s,o,He,m,Qe){"use strict";function We(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const re=We(Qe),k="___ALL_ENTITIES___";class f{cache;constructor(e){this.cache=new He({stdTTL:e,checkperiod:e*.2,useClones:!1})}async get(e){const t=this.normalizeKey(e),r=this.cache.get(t);if(r)return r;const n=await this.fetchFromDb(e);return n&&this.cache.set(t,n),n}async update(e,t,r){const n=await this.updateInDb(e,t,r);if(n){const i=this.getKey(n);this.cache.del(k),this.cache.set(this.normalizeKey(i),n)}return n}invalidate(e){this.cache.del(k),e&&this.cache.del(this.normalizeKey(e))}clearAll(){this.cache.flushAll()}}class $ extends f{async getAll(){const e=this.cache.get(k);if(e)return e;const t=await this.fetchManyFromDb({});return this.cache.set(k,t),t.forEach(r=>{this.cache.set(this.normalizeKey(this.getKey(r)),r)}),t}async getMany(e){const t=await this.fetchManyFromDb(e);return t.forEach(r=>{this.cache.set(this.normalizeKey(this.getKey(r)),r)}),t}}const fe=new re.EventEmitter,h=(a,e,t)=>{fe.emit(a,e,t)},Ge=a=>{for(const[e,t]of Object.entries(a))fe.on(e,(r,n)=>{t(r,n)})},w={CREW:"middleware/quest/CREW",CREW_META:"middleware/quest/CREW_META",CREW_ORNAMENTS:"middleware/quest/CREW_ORNAMENTS",CREW_QUEST:"middleware/quest/CREW_QUEST",CREW_STATS_ENGAGEMENT:"middleware/quest/CREW_STATS_ENGAGEMENT",CREW_STATS_FREQUENCY:"middleware/quest/CREW_STATS_FREQUENCY",USER:"middleware/quest/USER",USER_CREW:"middleware/quest/USER_CREW",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_CREW:"middleware/quest/USER_STATS_CREW",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"},me=new re.EventEmitter,x=(a,e,t)=>{me.emit(a,e,t)},Ye=a=>{for(const[e,t]of Object.entries(a))me.on(e,(r,n)=>{t(r,n)})},F={USER_INVENTORY:"middleware/raid/USER_INVENTORY",USER_QUEST:"middleware/raid/USER_QUEST",USER_RAID:"middleware/raid/USER_RAID"},he=new s.Schema({createdBy:s.Schema.Types.ObjectId,name:String,description:String,channelId:String,memberLimit:{type:Number,default:m.CREW_DEFAULT_MEMBER_LIMIT},disintegration:{type:Number,default:m.CREW_DEFAULT_DISINTEGRATION},faction:String},{timestamps:!0,minimize:!1});he.post("findOneAndUpdate",async function(a){h(w.CREW,a._id,a)});const j=s.models?.Crew||s.model("Crew",he);class Xe extends f{async getCrewRank(e){return(await j.aggregate([{$lookup:{from:"crewmetas",localField:"_id",foreignField:"crew",as:"meta"}},{$unwind:"$meta"},{$setWindowFields:{sortBy:{"meta.xp":-1},output:{rank:{$rank:{}}}}},{$match:{_id:e}},{$project:{_id:1,rank:1}}]))[0]}getCrewRanking(){return j.aggregate([{$lookup:{from:"crewmetas",localField:"_id",foreignField:"crew",as:"meta"}},{$unwind:"$meta"},{$sort:{"meta.xp":-1}},{$limit:10},{$project:{_id:1,"meta.xp":1}}])}async increaseLimit(e){await this.update(e,{$inc:{memberLimit:1}})}async repair(e,t){await this.update(e,[{$set:{disintegration:{$min:[{$add:["$disintegration",t]},100]}}}])}async applyDisintegration(e){const t=await this.get(e);if(!t)return;const{memberLimit:r}=t,[n,i]=[r-2,(r-3)*2+3];await this.update(e,[{$set:{disintegration:{$max:[{$add:["$disintegration",-1*o.randomBetween(n,i)]},0]}}}])}}const Ve=async a=>{const e=await j.findById(a).lean();return e||null},Le=(a,e)=>j.findOneAndUpdate({_id:a},e,{returnDocument:"after"}).lean();class Je extends Xe{constructor(){super(3600)}normalizeKey(e){return e.toString()}getKey({_id:e}){return e}fetchFromDb(e){return Ve(e)}updateInDb(e,t){return Le(e,t)}}const we=new Je;class Ze extends f{async hasXpBuff(e){const t=await this.get(e);if(!o.hasExpire(t.buffs.xp.expireAt))return t.buffs.xp.boost}async calcXp(e,t){const r=await we.get(e);return r?Math.ceil(t*(r.disintegration/m.CREW_DEFAULT_DISINTEGRATION)*(await this.hasXpBuff(e)??1)):0}async addXp(e,t){await this.update(e,{$inc:{xp:t}})}async addBerry(e,t){await this.update(e,{$inc:{berry:t}})}async removeBerry(e,t){await this.update(e,{$inc:{berry:-t}})}async addXpBuff(e,t){const r=new Date;await this.update(e,[{$set:{"buffs.xp":{$cond:{if:{lt:["$buffs.xp.expireAt",r]},then:{boost:1.1,expireAt:{$add:[r,t*60*60*1e3]}},else:{boost:1.1,expireAt:{$add:["$buffs.xp.expireAt",t*60*60*1e3]}}}}}}])}}const y=a=>a.toObject({flattenMaps:!0,flattenObjectIds:!1}),Se=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"Crew"},xp:{type:Number,default:0,index:-1},berry:{type:Number,default:0,index:-1},buffs:{xp:{boost:{type:Number,default:1.1},expireAt:{type:Date,default:new Date(0)}}}});Se.post("findOneAndUpdate",async function(a){h(w.CREW_META,a.crew._id,a)});const ne=s.models?.CrewMeta||s.model("CrewMeta",Se),et=async a=>await ne.create({crew:a});async function tt(a){const e=await ne.findOne({user:a}).lean();return e||y(await et(a))}const at=(a,e)=>ne.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class rt extends Ze{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({crew:e}){return e}fetchFromDb(e){return tt(e)}updateInDb(e,t){return at(e,t)}}const se=new rt;class nt extends f{async unlockBadge(e,t,r){t.isProgressive?await this.update(e,{$addToSet:{unlockedBadges:`${t.id}_${r}`}}):await this.update(e,{$addToSet:{unlockedBadges:t.id}})}}const ge=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"Crew"},unlockedBadges:{type:[String],default:[]}});ge.post("findOneAndUpdate",async function(a){h(w.CREW_ORNAMENTS,a.crew._id,a)});const ie=s.models?.CrewOrnaments||s.model("CrewOrnaments",ge),st=a=>ie.create({crew:a});async function it(a){const e=await ie.findOne({crew:a}).lean();return e||y(await st(a))}const ut=(a,e)=>ie.findOneAndUpdate({crew:a},e,{upsert:!0,returnDocument:"after"}).lean();class ct extends nt{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({crew:e}){return e}fetchFromDb(e){return it(e)}updateInDb(e,t){return ut(e,t)}}const dt=new ct;class lt extends ${async getStatus(e,t){return(await this.get({crew:e,questId:t})).status}async isCompleted(e,t){return await this.getStatus(e,t)==="COMPLETED"}async isStreaking(e,t){const{lastCompletionDate:r}=await this.get({crew:e,questId:t});return!!r&&o.sameDay(o.yesterday(),r)}async completeQuest(e){return this.update(e,[{$set:{lastCompletionDate:new Date,status:m.QuestStatus.COMPLETED}}],{upsert:!1})}}const be=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,ref:"Crew",index:!0},questId:{type:String,required:!0,index:!0},status:{type:String,default:m.QuestStatus.IN_PROGRESS,index:!0},lastCompletionDate:Date},{minimize:!1});be.post("findOneAndUpdate",function(a){h(w.CREW_QUEST,a.crew._id,a)});const z=s.models?.CrewQuest||s.model("CrewQuest",be);function ot(a){return z.find(a).lean()}const pt=async a=>await z.create({...a});async function yt(a){const e=await z.findOne(a).lean();return e||y(await pt(a))}function ft(a,e,t){return z.findOneAndUpdate(a,e,{upsert:!0,...t,returnDocument:"after"}).lean()}class mt extends lt{constructor(){super(300)}normalizeKey({crew:e,questId:t}){return`${e.toString()}/${t}`}getKey({crew:e,questId:t}){return{crew:e,questId:t}}fetchFromDb(e){return yt(e)}fetchManyFromDb(e){return ot(e)}updateInDb(e,t,r){return ft(e,t,r)}}const ht=new mt;class wt extends f{async setActualVoiceMembers(e,t){await this.update(e,{$set:{"currentVoiceState.amount":t,"currentVoiceState.connectedAt":new Date}})}async setMaxVoiceMembers(e,t){await this.update(e,{$set:{maxVoiceMembersReached:t}})}}const $e=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"Crew"},maxVoiceMembersReached:{type:Number,default:0},currentVoiceState:{amount:{type:Number,default:0},connectedAt:{type:Date,default:new Date(0)}}});$e.post("findOneAndUpdate",function(a){h(w.CREW_STATS_ENGAGEMENT,a.crew._id,a)});const ue=s.models?.CrewStatsEngagement||s.model("CrewStatsEngagement",$e),St=a=>ue.create({crew:a});async function gt(a){const e=await ue.findOne({crew:a}).lean();return e||y(await St(a))}const bt=(a,e)=>ue.findOneAndUpdate({crew:a},e,{upsert:!0,returnDocument:"after"}).lean();class $t extends wt{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({crew:e}){return e}fetchFromDb(e){return gt(e)}updateInDb(e,t){return bt(e,t)}}const Et=new $t;class It extends f{}const Ee=new s.Schema({crew:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"Crew"},streak80Percent:{type:Number,default:0}});Ee.post("findOneAndUpdate",function(a){h(w.CREW_STATS_FREQUENCY,a.crew._id,a)});const ce=s.models?.CrewStatsFrequency||s.model("CrewStatsFrequency",Ee),Ut=a=>ce.create({crew:a});async function Tt(a){const e=await ce.findOne({crew:a}).lean();return e||y(await Ut(a))}const Ot=(a,e)=>ce.findOneAndUpdate({crew:a},e,{upsert:!0,returnDocument:"after"}).lean();class Dt extends It{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({crew:e}){return e}fetchFromDb(e){return Tt(e)}updateInDb(e,t){return Ot(e,t)}}const Ct=new Dt,Ie=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:m.QuestStatus.IN_PROGRESS,index:1},lastCompletionDate:Date,streak:Number},{minimize:!1});Ie.post("findOneAndUpdate",function(a){x(F.USER_QUEST,a.user._id,a),h(w.USER_QUEST,a.user._id,a)});const O=s.models?.UserQuest||s.model("UserQuest",Ie),vt=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)},qod:{type:Date,default:new Date(0)},guess:{type:Date,default:new Date(0)},blackjack:{type:Date,default:new Date(0)},rps:{type:Date,default:new Date(0)}}}),P=s.models?.UserCooldown||s.model("UserCooldown",vt),Ue=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},crew:{type:s.Schema.Types.ObjectId,ref:"Crew",required:!0,index:!0},permission:{type:String,default:"member",required:!0},percent:{type:Number,default:m.CREW_DEFAULT_XP_PERCENT}},{minimize:!1});Ue.post("findOneAndUpdate",function(a){h(w.USER_CREW,a.user._id,a)});const D=s.models?.UserCrew||s.model("UserCrew",Ue),Rt=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}}),Mt=s.models?.UserDailyReport||s.model("UserDailyReport",Rt),At=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},encyclopedia:{type:[String],default:[]}}),K=s.models?.UserEncyclopedia||s.model("UserEncyclopedia",At),_t=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}}),H=s.models?.UserGames||s.model("UserGames",_t),Te=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});Te.post("findOneAndUpdate",function(a){x(F.USER_INVENTORY,a.user._id,a),h(w.USER_INVENTORY,a.user._id,a)});const Q=s.models?.UserInventory||s.model("UserInventory",Te),Bt=new re.EventEmitter,qt=(a,e)=>{Bt.emit(a,e)},C={multiplier:{type:Number,default:0},origin:String,expireAt:{type:Date,default:null},startAt:{type:Date,default:null}},Oe=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},scam:{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:[C],default:[]},work:{type:[C],default:[]}},berry:{work:{type:[C],default:[]},global:{type:[C],default:[]}},drop:{work:{type:[C],default:[]}},xp:{global:{type:[C],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}}});Oe.post("findOneAndUpdate",async function(a){h(w.USER_META,a.user._id,a),a.hp<=0&&qt("death",a.user._id)});const v=s.models?.UserMeta||s.model("UserMeta",Oe),De=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"}});De.post("findOneAndUpdate",function(a){h(w.USER_ORNAMENT,a.user._id,a)});const W=s.models?.UserOrnament||s.model("UserOrnament",De),Ce=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},currentRaid:{type:{raidId:String,seed:String,progression:{type:[String],default:[]},buffItem:String,rewards:{type:s.Schema.Types.Mixed,default:{}}},default:void 0},obtainedConditions:{type:s.Schema.Types.Mixed,default:{},_id:!1},obtainedRewards:{type:s.Schema.Types.Mixed,default:{},_id:!1},unlocked:{type:s.Schema.Types.Mixed,default:{},_id:!1}},{minimize:!1});Ce.post("findOneAndUpdate",function(a){x(F.USER_RAID,a.user._id,a)});const G=s.models?.UserRaid||s.model("UserRaid",Ce),Nt=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}}}}),_=s.models?.UserSettings||s.model("UserSettings",Nt),kt=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}),Y=s.models?.UserShop||s.model("UserShop",kt),ve=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}}});ve.post("findOneAndUpdate",function(a){h(w.USER_STATS_CASINO,a.user._id,a)});const R=s.models?.UserStatsCasino||s.model("UserStatsCasino",ve),Re=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},xpGivenToCrew:{type:Number,default:0},berryGivenToCrew:{type:Number,default:0},timeCrewBeyond10PercentXp:{type:Number,default:0},timeCrewAbove90PercentXp:{type:Number,default:0}});Re.post("findOneAndUpdate",function(a){h(w.USER_STATS_CREW,a.user._id,a)});const X=s.models?.UserStatsCrew||s.model("UserStatsCrew",Re),Me=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},workCount:{type:Number,default:0},raidFinishedCount:{type:Number,default:0},totalSpentInShop:{type:Number,default:0}});Me.post("findOneAndUpdate",function(a){h(w.USER_STATS_ECONOMY,a.user._id,a)});const V=s.models?.UserStatsEconomy||s.model("UserStatsEconomy",Me),Ae=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:[]}});Ae.post("findOneAndUpdate",function(a){h(w.USER_STATS_ENGAGEMENT,a.user._id,a)});const L=s.models?.UserStatsEngagement||s.model("UserStatsEngagement",Ae),_e=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},tagEveryone:{type:Boolean,default:!1},botPingCount:{type:Number,default:0},reportedSomeone:{type:Boolean,default:!1},hasCelebrateBirthday:{type:Boolean,default:!1},gamblingFlags:{betMin:{type:Boolean,default:!1},bet10M:{type:Boolean,default:!1},lose10M:{type:Boolean,default:!1},winBet10M:{type:Boolean,default:!1},loseEverything:{type:Boolean,default:!1}}});_e.post("findOneAndUpdate",function(a){h(w.USER_STATS_FLAGS,a.user._id,a)});const J=s.models?.UserStatsFlags||s.model("UserStatsFlags",_e),Be=new s.Schema({user:{type:s.Schema.Types.ObjectId,required:!0,unique:!0,ref:"User"},edito:{readToday:{type:Number,default:0},lastTimeRead:{type:Date,default:new Date}}});Be.post("findOneAndUpdate",function(a){h(w.USER_STATS_FREQUENCY,a.user._id,a)});const M=s.models?.UserStatsFrequency||s.model("UserStatsFrequency",Be),qe=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}}});qe.post("findOneAndUpdate",function(a){h(w.USER_STATS_INVENTORY,a.user._id,a)});const A=s.models?.UserStatsInventory||s.model("UserStatsInventory",qe),de=new s.Schema({discordId:{type:String,required:!0,unique:!0},birthday:{type:Date,default:null,index:1},faction:{type:String,default:m.DEFAULT_FACTION,index:1},canChangeFaction:{type:Boolean,default:!1},canChooseFaction:{type:Boolean,default:!1}});de.post("findOneAndUpdate",function(a){h(w.USER,a._id,a)}),de.post("deleteOne",async function(){const a=this.getQuery()._id;await P.deleteOne({user:a}),await D.deleteOne({user:a}),await Mt.deleteOne({user:a}),await K.deleteOne({user:a}),await H.deleteOne({user:a}),await Q.deleteOne({user:a}),await v.deleteOne({user:a}),await W.deleteOne({user:a}),await O.deleteMany({user:a}),await G.deleteOne({user:a}),await _.deleteOne({user:a}),await Y.deleteOne({user:a}),await R.deleteOne({user:a}),await X.deleteOne({user:a}),await V.deleteOne({user:a}),await L.deleteOne({user:a}),await J.deleteOne({user:a}),await M.deleteOne({user:a}),await A.deleteOne({user:a})});const E=s.models?.User||s.model("User",de);class xt extends ${getByObjectId(e){return this.update({_id:e},{})}getNextBirthdays(){const e=new Date,t=e.getFullYear();return E.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}}])}async getFactionRank(e){const t=await this.get(e);return(await E.aggregate([{$lookup:{from:"usermetas",localField:"_id",foreignField:"user",as:"meta"}},{$unwind:"$meta"},{$match:{faction:t.faction}},{$setWindowFields:{sortBy:{"meta.xp.amount":-1},output:{rank:{$rank:{}}}}},{$match:{_id:t._id}},{$project:{_id:0,rank:1}}]))[0]}getFactionRanking(e){return E.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 E.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 E.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 O.aggregate([{$match:{status:m.QuestStatus.COMPLETED}},{$group:{_id:"$user",questCount:{$sum:1}}},{$setWindowFields:{sortBy:{questCount:-1},output:{rank:{$rank:{}}}}},{$project:{_id:0,discordId:"$_id",questCount:1,rank:1}},{$sort:{rank:1}}])}getTodayAllBirthday(){const e=new Date;return E.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}})}}const Ft=a=>E.find(a),jt=a=>E.create({discordId:a});async function zt(a){const e=await E.findOne({discordId:a}).lean();return e||y(await jt(a))}const Pt=(a,e)=>E.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"});class Kt extends xt{constructor(){super(3600)}normalizeKey(e){return e}getKey({discordId:e}){return e}fetchFromDb(e){return zt(e)}fetchManyFromDb(e){return Ft(e)}updateInDb(e,t){return Pt(e,t)}}const Ht=new Kt,Qt=["work","rps","blackjack","guess","qod","dice"],Wt=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}),B=s.models?.Reminder||s.model("Reminder",Wt),Gt=async a=>{await B.deleteMany(a)},Yt=async(a,e)=>{await B.deleteOne({user:a,type:e})};class Xt extends ${getAllPassedReminder(){return this.getMany({date:{$lte:new Date}})}async addReminder(e,t,r){await this.update({user:e,type:t},{$set:{date:r}},{upsert:!0})}async updateReminderDate(e,t,r){await this.update({user:e,type:t},[{$set:{date:{$add:["$date",r]}}}])}async removeReminder(e,t){await Yt(e,t),this.invalidate({user:e,type:t})}async deleteSelectedReminders(e){const t=await this.getMany({_id:{$in:e}});await Gt({_id:{$in:e}}),t.forEach(r=>{this.invalidate({user:r.user,type:r.type})})}}function Vt(a,e={}){return B.find(a,e).lean()}async function Lt(a){const e=await B.findOne(a).lean();return e||null}async function Jt(a,e,t){return B.findOneAndUpdate(a,e,{...t,returnDocument:"after"}).lean()}class Zt extends Xt{constructor(){super(300)}getKey(e){return{user:e.user,type:e.type}}normalizeKey({user:e,type:t}){return`${e.toString()}/${t}`}fetchFromDb(e){return Lt(e)}fetchManyFromDb(e,t){return Vt(e,t)}updateInDb(e,t,r={upsert:!1}){return Jt(e,t,r)}}const q=new Zt;class ea extends ${async isOrnamentIds(e,t=()=>!0){const n=(await this.getAll()).filter(t).map(({ornamentId:i})=>i);return e.every(i=>n.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){return e.ornamentId==="background_default"?"par défaut":`"${o.capitalizeAllWords(e.ornamentId.split("_").join(" "))}"`}pickOrnament(e){const t=Math.random();let r=0;if(Object.keys(e).map(i=>parseFloat(i)).reduce((i,u)=>i+u,0)!==1)throw RangeError("pickOrnament - Sum of all odds (keys) must be equal to 1");for(const[i,u]of Object.entries(e)){const l=parseFloat(i);if(t>=r+l){r+=l;continue}if(u.length!==0)return u[o.randomBetween(0,u.length)]}throw Error("pickOrnament - All ods array were empty")}pickEachRarityOrnament(e,t){if(t.length!==m.RANK_IDS_WITHOUT_BASIC.length)throw new RangeError("pickEachRarityOrnament - must give same number of odds than ranks");return o.filterNullAndUndefined(t.map((r,n)=>{const i=m.RANK_IDS_WITHOUT_BASIC[n],u=e[i];return Math.random()>r||!u||!u.length?null:o.pickFrom(u)}))}}const ta=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}),Ne=s.models?.Ornaments||s.model("Ornaments",ta),aa=async(a,e={})=>Ne.find(a,e).lean();async function ra(a){const e=await Ne.findOne({ornamentId:a}).lean();return e||null}class na extends ea{constructor(){super(3600)}updateInDb(e,t){throw new Error("Method not implemented."+e+t)}fetchFromDb(e){return ra(e)}fetchManyFromDb(e){return aa(e)}getKey(e){return e.ornamentId}normalizeKey(e){return e}}const S=new na,sa=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}),Z=s.models?.Panoplies||s.model("Panoplies",sa),ia=a=>Z.find(a).lean(),ua=async a=>Z.find(a).populate("equipments");async function ca(a){const e=await Z.findOne({panoplyId:a}).lean();return e||null}const da=async a=>Z.findOne(a).populate("equipments");class la extends ${getAllPopulated(){return ua({})}getPopulated(e){return da({panoplyId:e})}hasPanoply(e,t){const r=o.filterNullAndUndefined(Object.values(e)),n=t.equipments.filter(i=>r.find(u=>u.entityId===i.entityId)).length;if(n===t.equipments.length)return t.fullBonus;if(n>=t.equipments.length/2)return t.halfBonus}async getPanoplyBonus(e){const t=[],r=await this.getAllPopulated();for(const n of r){const i=o.filterNullAndUndefined(Object.values(e)),u=n.equipments.filter(l=>i.find(({entityId:c})=>c===l.entityId));u.length===n.equipments.length?t.push([n,"full"]):u.length>=n.equipments.length/2?t.push([n,"half"]):u.length>=1&&t.push([n,null])}return t}}class oa extends la{constructor(){super(3600)}normalizeKey(e){return e}getKey({panoplyId:e}){return e}updateInDb(e,t){throw new Error("Method not implemented."+e+t)}fetchFromDb(e){return ca(e)}fetchManyFromDb(e={}){return ia(e)}}const I=new oa;class pa extends ${isEntity(e){return!!e&&"entityId"in e}isItem(e){return!this.isEquipment(e)}isEquipment(e){return e.category==="equipment"}async isEntityId(e,t=()=>!0){return(await this.getAll()).filter(t).map(({entityId:n})=>n).includes(e)}async isEquipmentId(e){const r=(await this.getAll()).find(n=>n.entityId===e);return!!r&&this.isEquipment(r)}async isItemId(e){const r=(await this.getAll()).find(n=>n.entityId===e);return!!r&&this.isItem(r)}async getSomeStoreItems(e){const t=(await this.getAll()).filter(this.isStoreItem);return this.getSomeItems(e,t)}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(r=>!!r.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((r,[n,i])=>{const u=t.find(({entityId:l})=>l===n);return u&&r.push([u,i]),r},[])}async getAllEntitiesLimit(){const e=await this.getAll();return o.arrayToRecord(e.map(t=>[t.entityId,t.shop?.limit??0]))}async getAllEntitiesBy(e){return(await this.getAll()).filter(e)}async fromDBToEquipableEquipment(e){const r=(await this.getAll()).filter(this.isEquipment).find(({entityId:n})=>n===e.entityId);if(!r)throw new Error(`cannot find any equipment: ${e.entityId}`);return this.seedEquipment(r,e.seed)}async getUserEquipmentsCharacteristics(e){let t={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};const r=await I.getAllPopulated();for(const n of m.EQUIPMENT_SLOT){const i=e[n];i&&(t=o.mergeObjects(t,(await this.fromDBToEquipableEquipment(i)).characteristics,(u,l)=>u+l))}for(const n of r){const i=I.hasPanoply(e,n);i&&!("target"in i)&&(t=o.mergeObjects(t,i,(u,l)=>u+l))}return t}getSomeItems(e,t){const r=[];for(;r.length<e;){const n=o.exclude(t,r,i=>i.entityId);r.push(S.pickOrnament(o.groupBy(n,i=>i.shop?.odd??0)))}return o.sortBy(r,n=>n.shop?.price??0)}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}getEquipmentSlotType(e){return m.EQUIPMENT_FROM_SLOT_TO_TYPE[e]}seedEquipment(e,t){const r=o.seededRandom(t),n=o.sortBy(o.recordToArray(e.characteristics),([i])=>i);return{...e,seed:t,characteristics:Object.fromEntries(n.map(([i,u])=>[i,Array.isArray(u)?o.randomBetween(u[0],u[1]+1,r):u]))}}isEquipped(e,t){return!!Object.values(e).find(r=>r&&this.isSameEquipment(r,t))}calcILvl(e){return Object.values(e.characteristics).reduce((r,n)=>r+n,0)+e.level}}const ya=new s.Schema({type:{type:String,enum:m.EFFECT_KEYS,required:!0},params:{type:s.Schema.Types.Mixed}},{_id:!1}),fa=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:[ya],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}),ke=s.models?.Entities||s.model("Entities",fa),ma=async(a,e={})=>ke.find(a,e).lean();async function ha(a){const e=await ke.findOne({entityId:a}).lean();return e||null}class wa extends pa{constructor(){super(3600)}updateInDb(e,t){throw new Error("Method not implemented."+e+t)}fetchFromDb(e){return ha(e)}fetchManyFromDb(e){return ma(e)}normalizeKey(e){return e}getKey(e){return e.entityId}}const p=new wa,Sa=(a,e,t)=>D.create({user:a,crew:e,permission:t}),ga=async a=>{await D.deleteOne({user:a})};class ba extends ${async updatePercent(e,t){await this.update(e,{$set:{percent:t}})}async updatePermission(e,t){await this.update(e,{$set:{permission:t}})}async addUserToCrew(e,t,r){await Sa(e,t,r),this.invalidate(t)}async removeUserFromCrew(e,t){await ga(e),this.invalidate(e),this.invalidate(t)}async getAllUserIdsFromCrew(e){const t=e.toString(),r=this.cache.get(t);if(r)return r.map(({user:i})=>i);const n=await this.getMany({crew:e});return this.cache.set(t,n),n.map(({user:i})=>i)}}const $a=a=>D.find(a).lean(),Ea=a=>D.findOne({user:a}).lean(),Ia=(a,e)=>D.findOneAndUpdate({user:a},e).lean();class Ua extends ba{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Ea(e)}fetchManyFromDb(e){return $a(e)}updateInDb(e,t){return Ia(e,t)}}const xe=new Ua;class Ta extends f{hasAlreadyFoundEntity(e,t){return e.encyclopedia.includes(t)}async addEntities(e,t){await this.update(e,{$addToSet:{encyclopedia:{$each:t}}})}}const Oa=async a=>await K.create({user:a});async function Da(a){const e=await K.findOne({user:a}).lean();return e||y(await Oa(a))}const Ca=(a,e)=>K.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class va extends Ta{constructor(){super(300)}fetchFromDb(e){return Da(e)}getKey({user:e}){return e}normalizeKey(e){return e.toString()}updateInDb(e,t){return Ca(e,t)}}const ee=new va;class Ra extends f{getPanoplyEffectiveBonus(e,t){const r=o.filterNullAndUndefined(Object.values(e.equippedItems)),n=t.equipments.filter(i=>r.find(u=>u.entityId===i.entityId)).length;if(n===t.equipments.length)return t.fullBonus;if(n>=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 r=await I.getAllPopulated();for(const n of m.EQUIPMENT_SLOT){const i=e.equippedItems?.[n];if(!i)continue;const u=await p.fromDBToEquipableEquipment(i);t=o.mergeObjects(t,u.characteristics,(l,c)=>l+c)}for(const n of r){const i=this.getPanoplyEffectiveBonus(e,n);i&&!("target"in i)&&(t=o.mergeObjects(t,i,(u,l)=>u+l))}return t}maxCraftQuantity(e,t){let r=1/0;for(const n of t)r=Math.min(r,Math.floor((e.itemList[n.entityId]??0)/n.size));return r}hasEnoughItemsForRecipe(e,t,r){for(const n of t)if((e.itemList[n.entityId]??0)<n.size*r)return!1;return!0}hasInventoryRequirements(e,t){return o.recordToArray(t).reduce((r,[n,i])=>r&&(e.itemList[n]??0)>=(i??0),!0)}hasEnoughEntity(e,t,r){return(e.itemList[r]??0)>=t}getItemList(e){return Object.fromEntries(e.itemList)}async calcBottleMultiplier(e,{bottle:{buffs:t}}){const r=await this.get(e),i=(await I.getPanoplyBonus(r.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 I.getPanoplyBonus(e.equippedItems)).find(([r,n])=>r.panoplyId==="marine"&&n!==null);return t&&t[1]==="full"?10:t&&t[1]==="half"?20:1/0}async hasRevolutionaryBuff(e){const t=await this.get(e);return(await I.getPanoplyBonus(t.equippedItems)).find(([n,i])=>n.panoplyId==="revolutionary"&&i!==null)?.[1]??null}async getRecipeResult(e,t){const r=(await I.getPanoplyBonus(e.equippedItems)).find(([n,i])=>n.panoplyId==="little_blacksmith"&&i!==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}async addItem(e,t,r){await this.update(e,{$inc:{[`itemList.${t}`]:r}}),await ee.addEntities(e,[t])}async addItems(e,t){await this.update(e,{$inc:Object.fromEntries(Object.entries(t).filter(([,r])=>(r??0)>0).map(([r,n])=>[`itemList.${r}`,n]))}),await ee.addEntities(e,o.recordToArray(t).filter(([,r])=>r>0).map(([r])=>r))}async removeItem(e,t,r){r!==0&&await this.update(e,[{$set:{[`itemList.${t}`]:{$max:[{$add:[`$itemList.${t}`,-r]},0]}}}])}async removeEquipment(e,t,r){await this.update(e,{$pull:{equipmentList:{id:t,seed:r}}})}async removeAllItem(e,t){await this.update(e,{$set:{[`itemList.${t}`]:0}})}async addEquipments(e,t){await this.update(e,{$push:{equipmentList:{$each:t}}}),await ee.addEntities(e,t.map(r=>r.entityId))}async saveEquipments(e){await this.update(e,[{$set:{equipmentSave:{$push:["$equipmentSave","$equippedItems"]}}}])}async changeEquippedEquipment(e,t){const r=await this.get(e);r?.equipmentSave[t]&&await this.equip(e,r.equipmentSave[t])}async equip(e,t){const r=await T.getMaxHp(e),n=Object.fromEntries(o.recordToArray(t).map(([i,u])=>[`equippedItems.${i}`,u]));await this.update(e,{$set:n}),await T.updateHp(e,r)}async unequip(e,t){const r=await T.getMaxHp(e);await this.update(e,{$set:{[`equippedItems.${t}`]:null}}),await T.updateHp(e,r)}async craftItem(e,t,r,n,i){for(const{entityId:c,size:b}of t)await this.removeItem(e,c,b*n);const{entityId:u,size:l}=r;await p.isEquipmentId(u)?await this.addEquipments(e,[{entityId:u,seed:i}]):await p.isItemId(u)&&await this.addItem(e,u,l*n)}async dismantleEntity(e,t,r,n,i){p.isEquipment(t)?await this.removeEquipment(e,t.entityId,i):p.isItem(t)&&await this.removeItem(e,t.entityId,n);for(const{entityId:u,quantity:l}of r)await p.isItemId(u)&&await this.addItem(e,u,n*l);await this.removeItem(e,"tools",1)}async enchantItem(e,t,r,n){await this.removeItem(e,t,n*4),await this.removeItem(e,"enchanted_stone",n),await this.addItem(e,r,n)}async unlockRecipe(e,t){await this.update(e,{$addToSet:{recipes:t}})}}const Ma=a=>Q.create({user:a});async function Aa(a){const e=await Q.findOne({user:a}).lean();return e||y(await Ma(a))}const _a=(a,e)=>Q.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Ba extends Ra{constructor(){super(300)}fetchFromDb(e){return Aa(e)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}updateInDb(e,t){return _a(e,t)}}const g=new Ba;class qa extends f{getTotalCharacteristics({characteristics:e,scrolls:t}){return o.arrayToRecord(m.CHARACTERISTICS.map(r=>[r,m.getComputedCharacteristicValue(e[r])+t[r]]))}async isCooldownForXpPassed(e){const t=await this.get(e);return Date.now()-t.xp.lastMessageWithXp.getTime()>60*1e3}async calcXpBoost(e){const t=await this.get(e),{boost:r}=t.xp,n=r!==null&&Date.now()<r.getTime()?.2:0,i=Math.max(t.premium?.5:0,t.booster?.25:0);return n+i+t.buffs.xp.global.reduce((u,{expireAt:l,startAt:c,multiplier:b})=>c&&c>new Date||l&&o.hasExpire(l)?u:u+b,0)}calcMessageXp(e){const t=e.trim().length,r=2;return t<10?10*r:t>300?300*r:t*r}async getXpDeathPenalties(e){const t=await this.get(e),r=m.getCurrentLevel(t.xp.amount);return r<=10?5e3:r<=20?1e4:r<=30?2e4:r<=40?3e4:r<=50?5e4:r<=60?75e3:r<=70?15e4:r<=80?25e4:r<=90?4e5:r<=100?75e4:14e6}async calcXp(e,t,r){return t*=1+await this.calcXpBoost(e),Math.ceil(t*r)}async calcBerry(e,t,r){if(t<=0)return t;const n=r?1:await this.calcBuffMultiplier(e,"berry","global");return Math.ceil(t*(n||1))}async calcBuffMultiplier(e,t,r){return(await this.get(e)).buffs[t][r].reduce((u,{expireAt:l,startAt:c,multiplier:b})=>u+(new Date>=(c??new Date)&&(!l||!o.hasExpire(l))?b:0),1)}async getMaxHp(e){const t=await this.get(e),r=await g.get(e),{vitality:n}=this.getTotalCharacteristics(t),i=await g.getUserEquipmentsCharacteristics(r);return(n+i.vitality)*m.HP_PER_VITALITY+m.DEFAULT_MAX_HP}async getHpRatio(e){const t=await this.get(e),r=await this.getMaxHp(e);return Math.min(t.hp/r,1)}async hasCharacteristicRequirement(e,t){const r=await this.get(e),n=await g.get(e),i=await g.getUserEquipmentsCharacteristics(n),u=o.mergeObjects(this.getTotalCharacteristics(r),i,(l,c)=>l+c);if("sum"in t){let l=0;for(const c of t.characteristics)l+=u[c]??0;return l>=t.sum}else{for(const l of Object.keys(t))if(u[l]<(t[l]??0))return!1;return!0}}async getGlobalRank(e){return(await v.aggregate([{$setWindowFields:{sortBy:{"xp.amount":-1},output:{rank:{$rank:{}}}}},{$match:{_id:e}},{$project:{rank:1}}]))[0]}async getBerryRank(e){return(await v.aggregate([{$setWindowFields:{sortBy:{berry:-1},output:{rank:{$rank:{}}}}},{$match:{_id:e}},{$project:{rank:1}}]))[0]}async hasMalusBuff(e){const t=await this.get(e),r=[...t.buffs.xp.global,...t.buffs.berry.global,...t.buffs.berry.work,...t.buffs.cooldown.work,...t.buffs.cooldown.casino,...t.buffs.drop.work];for(const{multiplier:n,startAt:i,expireAt:u}of r)if(n<0&&(!u||!o.hasExpire(u))&&(i??new Date)<=new Date)return!0;return!1}async addBerry(e,t){await this.update(e,[{$set:{berry:{$max:[{$add:["$berry",t]},0]}}}])}async addXp(e,t){await this.update(e,{$inc:{"xp.amount":t}})}async updatePremium(e,t){await this.update(e,{$set:{premium:t}})}async updateBooster(e,t){await this.update(e,{$set:{booster:t}})}async updateBoost(e,t){const{xp:{boost:r}}=await this.update(e,[{$set:{"xp.boost":{$cond:{if:{$or:[{$not:"$xp.boost"},{$lt:["$xp.boost",new Date]}]},then:{$add:[new Date,t]},else:{$add:["$xp.boost",t]}}}}}]);return r}async updateBuff(e,t){if(Array.isArray(t)){for(const n of t)await this.updateBuff(e,n);return}const r=m.transformToDBBuff(t);await this.update(e,[{$set:{[`buffs.${t.target}`]:{$map:{input:`$buffs.${t.target}`,as:"buff",in:{$cond:{if:{$eq:[{$substr:["$$buff.origin",0,{$indexOfBytes:["$$buff.origin","/"]}]},t.origin.split("/")[0]]},then:{multiplier:t.multiplier,origin:t.origin,expireAt:r.expireAt?{$cond:{if:{$lt:["$$buff.expireAt",new Date]},then:r.expireAt,else:{$add:["$$buff.expireAt",(t.endIn??0)*60*60*1e3]}}}:null,startAt:{$cond:{if:{$gte:["$$buff.startAt",new Date]},then:"$$buff.startAt",else:{$add:[new Date,(t.startIn??0)*60*60*1e3]}}}},else:"$$buff"}}}}}},{$set:{[`buffs.${t.target}`]:{$cond:{if:{$in:[t.origin.split("/")[0],{$map:{input:`$buffs.${t.target}`,as:"buff",in:{$substr:["$$buff.origin",0,{$indexOfBytes:["$$buff.origin","/"]}]}}}]},then:`$buffs.${t.target}`,else:{$concatArrays:[`$buffs.${t.target}`,[{...r}]]}}}}}])}async removeBuff(e,t){await this.update(e,{$pull:{[`buffs.${t.target}`]:{origin:t.origin}}})}async updatePanoplyBuff(e,t,r,n){const i=await p.fromDBToEquipableEquipment(t),u=o.filterNullAndUndefined(Object.values(r)),c=(await I.getAllPopulated()).find(N=>N.panoplyId===i.panoply);if(!c)return;const b=c.equipments.filter(N=>(u.find(is=>N.entityId===is.entityId)||!n&&i.entityId===N.entityId)&&(n?i.entityId!==N.entityId:!0)).length,ye=b===c.equipments.length?c.fullBonus:b>=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),ye&&"target"in ye&&await this.updateBuff(e,ye)}async gainHp(e,t){const r=await this.get(e),i=await this.getMaxHp(e)-r.hp;await this.update(e,{$set:{hp:r.hp+Math.floor(Math.min(t,i))}})}async loseHp(e,t){await this.update(e,[{$set:{hp:{$max:[{$add:["$hp",-t]},0]}}}])}async updateHp(e,t){const r=await this.getMaxHp(e);await this.update(e,[{$set:{hp:{$round:[{$multiply:[{$divide:["$hp",t]},r]},0]}}}])}async addCharacteristics(e,t){const r=await this.getMaxHp(e),n=Object.fromEntries(Object.entries(t).filter(([,i])=>i!==0).map(([i,u])=>[`characteristics.${i}`,u]));await this.update(e,{$inc:n}),await this.updateHp(e,r)}async addScrollCharacteristic(e,t){const r=await this.getMaxHp(e),n=Object.fromEntries(Object.entries(t).filter(([,i])=>i!==0).map(([i,u])=>[`scrolls.${i}`,u]));await this.update(e,{$inc:n}),await this.updateHp(e,r)}async resetCharacteristics(e,t){const r=await this.getMaxHp(e),n={vitality:0,strength:0,agility:0,chance:0,intelligence:0,wisdom:0};t?await this.update(e,{$set:{characteristics:n,"resetCharacteristics.free":!1}}):await this.update(e,{$set:{characteristics:n,"resetCharacteristics.nextAvailable":new Date(Date.now()+720*60*60*1e3)},$inc:{berry:-1e8}}),await this.updateHp(e,r)}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 updateScam(e,t){await this.update(e,{$set:{scam:t}})}async updateUserXp(e,t){const r=await xe.get(e),n=r?.percent??0,i=await this.calcXp(e,t,(1-n)*await this.getHpRatio(e));let u=0;return await this.addXp(e,i),r&&(u=await se.calcXp(r.crew,t*n),await se.addXp(r.crew,u)),{userXp:i,crewXp:u}}async updateUserBerry(e,t,r){const n=await this.calcBerry(e,t,r);return await this.addBerry(e,n),n}}const Na=async a=>await v.create({user:a});async function ka(a){const e=await v.findOne({user:a}).lean();return e||y(await Na(a))}const xa=(a,e)=>v.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Fa extends qa{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return ka(e)}updateInDb(e,t){return xa(e,t)}}const T=new Fa;class ja extends ${async updateSendDailyQuest(e,t){await this.update({discordId:e},{$set:{sendDailyQuest:t}})}async updateSendDailyReport(e,t){await this.update({discordId:e},{$set:{sendDailyReport:t}})}async updateInventorySort(e,t){await this.update({discordId:e},{$set:{"sort.inventory":t}})}async updateReminderSettings(e,t,r){await this.update({discordId:e},{$set:{[`reminder.${t}`]:r}})}getUsersWithDailyReportEnable(){return this.getMany({"settings.sendDailyReport":!0,faction:{$ne:"citizen"}})}}const za=a=>_.find(a).lean(),Pa=async a=>await _.create({user:a});async function Ka(a){const e=await _.findOne({user:a}).lean();return e||y(await Pa(a))}const Ha=(a,e)=>_.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Qa extends ja{constructor(){super(3600)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Ka(e)}fetchManyFromDb(e){return za(e)}updateInDb(e,t){return Ha(e,t)}}const Fe=new Qa;class Wa extends f{async getCommandCooldown(e,t){return(await this.get(e)).commands[t]}async getRaidCooldown(e,t){return(await this.get(e)).raid[t]}async reduceRaidCooldown(e,t){await this.update(e,[{$set:{"raid.special":{$subtract:[{$ifNull:["$raid.special",new Date]},t*3600*1e3]},"raid.classic":{$subtract:[{$ifNull:["$raid.classic",new Date]},t*3600*1e3]}}}]),await q.updateReminderDate(e,"raid/special",-1*t*3600*1e3),await q.updateReminderDate(e,"raid/classic",-1*t*3600*1e3)}async startRaidCooldown(e,t,r){const{reminder:n}=await Fe.get(e);await this.update(e,{$set:{[`raid.${t}`]:new Date(Date.now()+r)}}),n.raid[t]&&await q.addReminder(e,`raid/${t}`,new Date(Date.now()+r))}async lockUserCommand(e){await this.update(e,{$set:{lockUserCommand:new Date(Date.now()+2*3600*1e3)}}),await T.gainHp(e,1)}async useCommand(e,t,r){const{reminder:n}=await Fe.get(e);await this.update(e,{$set:{[`commands.${t}`]:new Date(Date.now()+r)}}),n.commands[t]&&await q.addReminder(e,`commands/${t}`,new Date(Date.now()+r))}}const Ga=async a=>await P.create({user:a});async function Ya(a){const e=await P.findOne({user:a}).lean();return e||y(await Ga(a))}const Xa=(a,e)=>P.findOneAndUpdate({user:a},e,{returnDocument:"after",upsert:!0}).lean();class Va extends Wa{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey(e){return e.user}fetchFromDb(e){return Ya(e)}updateInDb(e,t){return Xa(e,t)}}const je=new Va;class La extends f{async setGuessGame(e,t,r,n){await this.update(e,{$set:{guess:{amount:t,tries:r,numberToGuess:n,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 Ja=async a=>await H.create({user:a});async function Za(a){const e=await H.findOne({user:a}).lean();return e||y(await Ja(a))}const er=(a,e)=>H.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class tr extends La{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Za(e)}updateInDb(e,t){return er(e,t)}}const ar=new tr;class rr extends f{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,r){t.isProgressive?await this.update(e,{$addToSet:{unlockedBadges:`${t.id}_${r}`}}):await this.update(e,{$addToSet:{unlockedBadges:t.id}})}async unlockFactionBadge(e,t){await this.update(e,{$addToSet:{unlockedFactionBadges:{$each:[`b_marine_${t}`,`b_revolutionary_${t}`,`b_pirate_${t}`]}}})}async unlockProfileAsset(e,t){await this.update(e,{$addToSet:{unlockedProfileAssets:t}})}async unlockBag(e,t){await this.update(e,{$addToSet:{unlockedBags:t}})}async selectBag(e,t){await this.update(e,{$set:{selectedBag:t}})}}const nr=async a=>await W.create({user:a});async function sr(a){const e=await W.findOne({user:a}).lean();return e||y(await nr(a))}const ir=async(a,e)=>W.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class ur extends rr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return sr(e)}updateInDb(e,t){return ir(e,t)}}const le=new ur;class cr 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:r}=await this.get({user:e,questId:t});return!!r&&o.sameDay(o.yesterday(),r)}async getStreakMultiplier(e,t){const r=await this.get({user:e,questId:t});return await this.isStreaking(e,t)?1+Math.min(2,(r.streak??0)/10):1}async completeQuest(e,t=!1){const r=o.yesterday();r.setHours(0,0,0,0);const n=new Date;return n.setHours(0,0,0,0),this.update(e,[{$set:{...t?{streak:{$cond:{if:{$and:[{$gte:["$lastCompletionDate",r]},{$lt:["$lastCompletionDate",n]}]},then:{$add:[{$ifNull:["$streak",0]},1]},else:1}}}:{},lastCompletionDate:new Date,status:m.QuestStatus.COMPLETED}}],{upsert:!1})}}function dr(a){return O.find(a).lean()}const lr=async a=>await O.create({...a});async function or(a){const e=await O.findOne(a).lean();return e||y(await lr(a))}function pr(a,e,t){return O.findOneAndUpdate(a,e,{upsert:!0,...t,returnDocument:"after"}).lean()}class yr extends cr{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 or(e)}fetchManyFromDb(e){return dr(e)}updateInDb(e,t,r){return pr(e,t,r)}}const fr=new yr;class mr extends f{async hasUnlockedRaid(e,t){return(await this.get(e)).unlocked?.[t]}async alreadyObtainedRaidReward(e,t,r){const n=await this.get(e);return t in n.obtainedRewards?n.obtainedRewards[t].includes(r):!1}async getObtainedRaidReward(e,t){return(await this.get(e)).obtainedRewards[t]??[]}async fulfillCondition(e,t,r,n){const i=await this.get(e);return n==="include"?r.every(u=>(i.obtainedConditions[t]??[]).includes(u)):r.every(u=>!(i.obtainedConditions[t]??[]).includes(u))}async unlockRaid(e,t){await this.update(e,{$set:{[`unlocked.${t}`]:!0}})}async startRaid(e,t,r,n,i){const u=Date.now();return await this.update(e,{$set:{currentRaid:{raidId:t,buffItem:r,seed:u,progression:[],rewards:{}}}}),await je.startRaidCooldown(e,n,i),u}async resetRaid(e){await this.update(e,{$unset:{currentRaid:""}})}async resetRaidProgression(e){await this.update(e,{$set:{"currentRaid.progression":[]}})}async progressRaid(e,t){await this.update(e,{$push:{"currentRaid.progression":t}})}async claimReward(e,t,r){await this.update(e,{$addToSet:{[`obtainedRewards.${t}`]:r}})}async addRewardsToRaid(e,t){await this.update(e,{$inc:Object.fromEntries(o.recordToArray(t).filter(([r])=>r!=="title"&&r!=="condition").map(([r,n])=>[`currentRaid.rewards.${r}`,n])),...t.title?{$set:{"currentRaid.rewards.title":t.title}}:{}})}async updateCondition(e,t,r){await this.update(e,{$addToSet:{[`obtainedConditions.${t}`]:r}})}}const hr=a=>G.create({user:a}),wr=async a=>{const e=await G.findOne({user:a}).lean();return e||y(await hr(a))},Sr=(a,e)=>G.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"});class gr extends mr{constructor(){super(3600)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return wr(e)}updateInDb(e,t){return Sr(e,t)}}const br=new gr;class $r extends f{async isBuyLimitReached(e,t,r){const n=await p.getAllEntitiesLimit();if(await p.isEntityId(t,p.isEquipment))return!1;const i=await this.get(e),u=i.limit?.[t];let l=n[t];const c=await g.hasRevolutionaryBuff(e);return i.lastShopId!==r?!1:(c==="half"&&t==="chest_2"&&(l+=2),c==="full"&&t==="chest_3"&&(l+=1),!!(l&&u&&u>=l))}async getShopItemRest(e,t,r,n=m.SHOP_DEFAULT_AVAILABLE_ENTITY_AMOUNT){const i=await p.getAllEntitiesLimit();if(await p.isEntityId(t,p.isEquipment))return n;let u=i[t];const l=await this.get(e),c=l.limit?.[t],b=await g.hasRevolutionaryBuff(e);return b==="half"&&t==="chest_2"&&(u+=2),b==="full"&&t==="chest_3"&&(u+=1),u?l.lastShopId!==r?u:c?u-c:Math.min(u,n):n}async increaseBuyLimit(e,t,r,n){await this.update(e,[{$set:{limit:{$cond:{if:{$eq:["$lastShopId",t]},then:{$setField:{field:r,input:{$ifNull:["$limit",{}]},value:{$add:[{$ifNull:[`$limit.${r}`,0]},n]}}},else:{[r]:n}}},lastShopId:t}}])}}const Er=async a=>await Y.create({user:a}),Ir=async a=>{const e=await Y.findOne({user:a}).lean();return e||y(await Er(a))},Ur=(a,e)=>Y.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Tr extends $r{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Ir(e)}updateInDb(e,t){return Ur(e,t)}}const Or=new Tr;class Dr extends f{async didSevenDoubleAtDoQ(e){await this.update(e,{$inc:{"doubleOrQuit.sevenDoubleInARowCount":1}})}async winWithBlackjack(e){await this.update(e,{$inc:{"blackJack.blackJackCount":1}})}async updateLastGames(e,t,r){await this.update(e,{$push:{lastGames:{$each:[{gameType:t,endState:r}],$position:0,$slice:20}}})}async drawIncrement(e){await this.update(e,{$inc:{drawCount:1}})}async bet666(e){const t=o.yesterday();t.setHours(0,0,0,0);const r=new Date;r.setHours(0,0,0,0),await R.updateOne({user:e,"bet666.last":{$gte:t,$lt:r}},{$inc:{"bet666.count":1},$set:{"bet666.last":new Date}}),await R.updateOne({user:e,"bet666.last":{$lt:t}},{$set:{"bet666.last":new Date,"bet666.count":1}}),this.invalidate(e)}async updateTotalBet(e,t){await this.update(e,{$inc:{totalBet:t}})}async updateRps(e,t){await this.update(e,[{$set:{"rps.count":{$cond:{if:{$eq:["$rps.lastRpsPlayed",t]},then:{$add:["$rps.count",1]},else:1}},"rps.lastRpsPlayed":t}}])}async hasGuessInOneTry(e){await this.update(e,{$inc:{"priceIsRight.guessInOneTryCount":1}})}async diceDoubleSix(e){await this.update(e,{$inc:{"dice.doubleSixCount":1}})}async diceDrawDoubleSix(e){await this.update(e,{$inc:{"dice.drawWithDoubleSixCount":1}})}}const Cr=async a=>await R.create({user:a});async function vr(a){const e=await R.findOne({user:a}).lean();return e||y(await Cr(a))}const Rr=(a,e)=>R.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Mr extends Dr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return vr(e)}updateInDb(e,t){return Rr(e,t)}}const Ar=new Mr;class _r extends f{async increaseXpGiven(e,t){await this.update(e,{$inc:{xpGivenToCrew:t}})}async increaseBerryGiven(e,t){await this.update(e,{$inc:{berryGivenToCrew:t}})}async updateCrew10Percent(e,t){t?await this.update(e,{$set:{timeCrewBeyond10PercentXp:0}}):await this.update(e,{$inc:{timeCrewBeyond10PercentXp:1}})}async updateCrew90Percent(e,t){t?await this.update(e,{$set:{timeCrewAbove90PercentXp:0}}):await this.update(e,{$inc:{timeCrewAbove90PercentXp:1}})}}const Br=async a=>await X.create({user:a});async function qr(a){const e=await X.findOne({user:a}).lean();return e||y(await Br(a))}const Nr=(a,e)=>X.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class kr extends _r{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return qr(e)}updateInDb(e,t){return Nr(e,t)}}const xr=new kr;class Fr extends f{async workIncrement(e){await this.update(e,{$inc:{workCount:1}})}async updateTotalSpentInShop(e,t){await this.update(e,{$inc:{totalSpentInShop:t}})}}const jr=a=>V.create({user:a});async function zr(a){const e=await V.findOne({user:a}).lean();return e||y(await jr(a))}const Pr=(a,e)=>V.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Kr extends Fr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return zr(e)}updateInDb(e,t){return Pr(e,t)}}const ze=new Kr;class Hr extends f{async randomMessageIncrement(e){await this.update(e,{$inc:{randomMessageClaimed:1}})}async addWrittenTextChannel(e,t){await this.update(e,{$addToSet:{writeDifferentChatIds:t}})}async incrementMessageSend(e){await this.update(e,{$inc:{messageSent:1}})}async addTotalMinutesInVoice(e,t){await this.update(e,{$inc:{totalMinutesInVoice:t}})}}const Qr=async a=>await L.create({user:a});async function Wr(a){const e=await L.findOne({user:a}).lean();return e||y(await Qr(a))}const Gr=(a,e)=>L.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class Yr extends Hr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Wr(e)}updateInDb(e,t){return Gr(e,t)}}const Xr=new Yr;class Vr extends f{async hasReportedSomeone(e){await this.update(e,{$set:{reportedSomeone:!0}})}async botPingIncrement(e){await this.update(e,{$inc:{botPingCount:1}})}async hasCelebrateBirthday(e){await this.update(e,{$set:{hasCelebrateBirthday:!0}})}async hasTagEveryone(e){await this.update(e,{$set:{tagEveryone:!0}})}async hasBetMin(e){await this.update(e,{$set:{"gamblingFlags.betMin":!0}})}async hasLoseEverything(e){await this.update(e,{$set:{"gamblingFlags.loseEverything":!0}})}async hasBet10M(e){await this.update(e,{$set:{"gamblingFlags.bet10M":!0}})}async hasWinBet10M(e){await this.update(e,{$set:{"gamblingFlags.winBet10M":!0}})}async hasLose10M(e){await this.update(e,{$set:{"gamblingFlags.lose10M":!0}})}}const Lr=async a=>await J.create({user:a});async function Jr(a){const e=await J.findOne({user:a}).lean();return e||y(await Lr(a))}const Zr=(a,e)=>J.findOneAndUpdate({user:a},e,{upsert:!0,returnDocument:"after"}).lean();class en extends Vr{constructor(){super(300)}normalizeKey(e){return e.toString()}getKey({user:e}){return e}fetchFromDb(e){return Jr(e)}updateInDb(e,t){return Zr(e,t)}}const tn=new en;class an extends f{async readEdito(e){const t=new Date;t.setHours(0,0,0,0),await M.updateOne({user:e,"edito.lastTimeRead":{$gte:t}},{$inc:{"edito.readToday":1},$set:{"edito.lastTimeRead":new Date}}),await M.updateOne({user:e,"edito.lastTimeRead":{$lt:t}},{$set:{"edito.lastTimeRead":new Date,"edito.readToday":1}}),this.invalidate(e)}}const rn=async a=>await M.create({user:a});async function nn(a){const e=await M.findOne({user:a}).lean();return e||y(await rn(a))}const sn=(a,e)=>M.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 nn(e)}updateInDb(e,t){return sn(e,t)}}const cn=new un;class dn extends f{async updateCraftStats(e,t,r){const n=await p.get(r);!n||!p.isItem(n)||await this.update(e,{$inc:{"crafts.cookedMeal":p.isCookedMeal(n)?t:0,"crafts.scrolls":p.isScrollItem(n)?t:0,"crafts.totalCrafted":t}})}async incrementAlcoholDrink(e,t,r){["wine","beer","rhum"].includes(t)&&await this.update(e,{$inc:{"alcohols.wines":t==="wine"?r:0,"alcohols.beers":t==="beer"?r:0,"alcohols.rhums":t==="rhum"?r:0,"alcohols.totalConsumed":r}})}async incrementBottleUsedToday(e,t){const r=new Date;r.setHours(0,0,0,0),await A.updateOne({user:e,"bottle.lastUsed":{$gte:r}},{$inc:{"bottle.usedToday":t},$set:{"bottle.lastUsed":new Date}}),await A.updateOne({user:e,"bottle.lastUsed":{$lt:r}},{$set:{"bottle.lastUsed":new Date,"bottle.usedToday":t}}),this.invalidate(e)}async incrementBottleUsedTotal(e,t){await this.update(e,{$inc:{"bottle.totalUsed":t}})}async incrementChestOpenedTotal(e,t){await this.update(e,{$inc:{"chest.totalOpened":t}})}}const ln=async a=>await A.create({user:a});async function on(a){const e=await A.findOne({user:a}).lean();return e||y(await ln(a))}const pn=(a,e)=>A.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,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}}),te=s.models?.Bans||s.model("Bans",mn),hn=a=>te.create({...a}),wn=(a,e)=>te.exists({bannedUserId:a,guildId:e});class Sn extends ${async getUnbanUsers(){return this.getMany({unbannedTimestamp:{$lte:new Date,$ne:null}})}async banUserFromGuild(e){await hn(e)}async isBannedFromGuild(e,t){return!!await wn(e,t)}}const gn=a=>te.find(a).lean(),bn=a=>te.findOne(a).lean();class $n extends Sn{constructor(){super(3600*36)}normalizeKey(e){return`${e.guildId}/${e.bannedUserId}`}getKey({bannedUserId:e,guildId:t}){return{bannedUserId:e,guildId:t}}fetchFromDb(e){return bn(e)}fetchManyFromDb(e){return gn(e)}updateInDb(){throw new Error("Method not implemented.")}}const En=new $n,In=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}}}),oe=s.models?.Invitation||s.model("Invitation",In),Un=a=>oe.create({...a}),Tn=async a=>{await oe.deleteMany({...a})};class On extends f{async sendInvitation({senderId:e,receiverId:t,gameMode:r,...n}){return await this.get({senderId:e,gameMode:r,receiverId:t})?!1:(await Un({...n,senderId:e,gameMode:r,receiverId:t}),!0)}async receiveInvitation(e){return this.get(e)}async deleteInvitation(e){await Tn(e),this.invalidate(e)}}const Dn=a=>oe.findOne({...a}).lean();class Cn extends On{constructor(){super(3600)}normalizeKey(e){return`${e.gameMode}/${e.receiverId}/${e.senderId}`}getKey({receiverId:e,gameMode:t,senderId:r}){return{gameMode:t,receiverId:e,senderId:r}}fetchFromDb(e){return Dn(e)}updateInDb(){throw new Error("Method not implemented.")}}const vn=new Cn;class Rn extends f{async setEditoChannel(e,t){await this.update({guildId:e},{$set:{"edito.channelId":t}})}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 setRankingChannel(e,t){await this.update({guildId:e},{$set:{"ranking.channelId":t}})}async setRankingMessage(e,t){await this.update({guildId:e},{$set:{"ranking.messageId":t}})}async setCrewInfoChannelId(e,t){await this.update({guildId:e},{$set:{"crew.infoChannelId":t}})}async addCrewChannelId(e,t,r){await this.update({guildId:e},{$push:{"crew.crewChannelIds":{channelId:r,crewId:t}}})}async updateRolesId(e,t){await this.update({guildId:e},{$set:Object.fromEntries(Object.entries(t).map(([r,n])=>[`roles.${r}`,n]))})}async updateChannelId(e,t){await this.update({guildId:e},{$set:Object.fromEntries(Object.entries(t).map(([r,n])=>[`channels.${r}`,n]))})}}const Mn=new s.Schema({guildId:{type:String,required:!0,unique:!0},ranking:{channelId:{type:String,default:null},messageId:{type:String,default:null}},roles:{premium:{type:String,default:null},booster:{type:String,default:null},scam:{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:{channelId:{type:String,default:null},price:{type:Number,default:100},messageId:{type:String,default:null}},crew:{infoChannelId:{type:String,default:null},crewChannelIds:{type:[{channelId:{type:String},crewId:{type:String}}],default:[]}},shopChannelId:{type:String,default:null}}),pe=s.models?.Settings||s.model("Settings",Mn),An=a=>pe.create({guildId:a}),_n=async a=>{const e=await pe.findOne({guildId:a}).lean();return e||y(await An(a))},Bn=(a,e)=>pe.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"}).lean();class qn extends Rn{constructor(){super(3600*24*30)}normalizeKey(e){return e}getKey({guildId:e}){return e}fetchFromDb(e){return _n(e)}updateInDb(e,t){return Bn(e,t)}}const Nn=new qn,kn=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}),ae=s.models?.Shop||s.model("Shop",kn),xn=a=>ae.create({shopType:a}),Pe=async a=>{const e=await ae.findOne({shopType:a}).lean();return e||y(await xn(a))};class U{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 T.updateUserBerry(e,-1*this.price*t,!1),await ze.updateTotalSpentInShop(e,this.price*t)):await g.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 Fn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await le.unlockBackground(e,this.data.ornamentId)}isBackground(){return!0}}class jn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isBoostXp(){return!0}}class zn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isChest(){return!0}}class Pn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isObject(){return!0}}class Kn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addEquipments(e,o.range({stop:t}).map(()=>p.seedEquipment({...this.data},Date.now()-Math.round(Math.random()*1e3))).map(r=>({entityId:r.entityId,seed:r.seed})))}isEquipment(){return!0}}class Hn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isBottle(){return!0}}class Qn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isRepair(){return!0}}class Wn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await g.addItem(e,this.data.entityId,t)}isStore(){return!0}}class Gn extends U{price;size;currency;data;constructor({price:e,item:t,size:r,currency:n}){super(),this.data=t,this.price=e,this.size=r,this.currency=n}async onBuy(e,t){await super.onBuy(e,t),await le.unlockTitle(e,this.data.ornamentId)}isTitle(){return!0}}class Yn extends f{async getShopItem(e,t){const n=(await this.get(e)).items.find(b=>b.id===t);if(!n)return;const{price:i,size:u,currency:l}=n,c=await p.get(n.id)??await S.get(n.id);if(S.isOrnament(c)&&S.isBackground(c))return new Fn({price:i,item:c,size:u,currency:l});if(S.isOrnament(c)&&S.isTitle(c))return new Gn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isChestItem(c))return new zn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isBoostItem(c))return new jn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isRepairItem(c))return new Qn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isStoreItem(c))return new Wn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isObjectItem(c))return new Pn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isEquipment(c))return new Kn({price:i,item:c,size:u,currency:l});if(p.isEntity(c)&&p.isBottleItem(c))return new Hn({price:i,size:u,item:c,currency:l})}async getShopItemList(e){const t=await this.get(e),r=[];for(const{id:n}of t.items){const i=await this.getShopItem(e,n);i&&r.push(i)}return r}getShopItemId(e){return p.isEntity(e.data)?e.data.entityId:e.data.ornamentId}async updateShopStats(e,t,r){await this.update({shopType:e},{$inc:{"stats.berrySpent":t.price*r,"stats.itemBought":r,"stats.chestBought":t.isChest()?r:0,"stats.percentBought":t.isRepair()?(t.data.effects.find(n=>n.type==="CREW_REPAIR")?.params.amount??0)*r:0,"stats.boostTimeBought":t.isBoostXp()?t.data.ms/(1440*60*1e3):0}})}async buyShopItem(e,t,r,n){const i=t.map(u=>(u.id===this.getShopItemId(r)&&u.size&&(u.size-=n),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 Xn=(a,e)=>ae.findOneAndUpdate(a,e,{upsert:!0,returnDocument:"after"}).lean();class Vn extends Yn{constructor(){super(3600)}normalizeKey(e){return e}getKey({shopType:e}){return e}fetchFromDb(e){return Pe(e)}updateInDb(e,t){return Xn(e,t)}}const Ln=new Vn,Jn=new s.Schema({warnedUserId:{type:String,required:!0,index:!0},authorId:String,date:{type:Date,default:Date.now()},reason:{type:String,default:null}}),Ke=s.models?.Warn||s.model("Warn",Jn),Zn=a=>Ke.countDocuments(a);class es extends ${getUserWarns(e){return this.getMany({warnedUserId:e})}getUserWarnCount(e){return Zn({warnedUserId:e})}}const ts=a=>Ke.find(a).lean();class as extends es{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 ts(e)}updateInDb(){throw new Error("Method not implemented.")}}const rs=new as,ns=a=>{s.connect(a)};class ss extends s.Types.ObjectId{}d.COOLDOWN_COMMANDS=Qt,d.ObjectId=ss,d.QUEST_MIDDLEWARE_EVENT_NAME=w,d.RAID_MIDDLEWARE_EVENT_NAME=F,d.banService=En,d.connectToServices=ns,d.crewMetaService=se,d.crewOrnamentsService=dt,d.crewQuestService=ht,d.crewService=we,d.crewStatsEngagementService=Et,d.crewStatsFrequencyService=Ct,d.emitQuestMiddlewareEvent=h,d.emitRaidMiddlewareEvent=x,d.entityService=p,d.findShop=Pe,d.invitationService=vn,d.ornamentService=S,d.panoplyService=I,d.registerQuestMiddlewareEvents=Ge,d.registerRaidMiddlewareEvents=Ye,d.reminderService=q,d.settingsService=Nn,d.shopModel=ae,d.shopService=Ln,d.userCooldownService=je,d.userCrewService=xe,d.userEncyclopediaService=ee,d.userGamesService=ar,d.userInventoryService=g,d.userMetaService=T,d.userOrnamentService=le,d.userQuestService=fr,d.userRaidService=br,d.userService=Ht,d.userShopService=Or,d.userStatsCasinoService=Ar,d.userStatsCrewService=xr,d.userStatsEconomyService=ze,d.userStatsEngagementService=Xr,d.userStatsFlagsService=tn,d.userStatsFrequencyService=cn,d.userStatsInventoryService=fn,d.warnService=rs,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/crew-stats/engagement/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,sBAAsB,EAAE,MAAM,CAAC;IAE/B,iBAAiB,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,IAAI,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,2BACf,SAAQ,QAAQ,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/crew-stats/engagement/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,sBAAsB,EAAE,MAAM,CAAC;IAE/B,iBAAiB,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,IAAI,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,2BACf,SAAQ,QAAQ,EAAE,mBAAmB;CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/crew-stats/frequency/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BACf,SAAQ,QAAQ,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/crew-stats/frequency/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BACf,SAAQ,QAAQ,EAAE,kBAAkB;CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../src/services/shop/items/default.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,KAAK,EACN,MAAM,mBAAmB,CAAC;AAM3B,uBAAe,eAAe,
|
|
1
|
+
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../src/services/shop/items/default.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,KAAK,EACN,MAAM,mBAAmB,CAAC;AAM3B,uBAAe,eAAe,CAC5B,CAAC,SAAS,MAAM,GAAG,QAAQ,CAC3B,YAAW,cAAc,CAAC,CAAC,CAAC;IAC5B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAgB,QAAQ,EAAE,YAAY,CAAC;IAEvC,SAAgB,IAAI,EAAE,CAAC,CAAC;IAEjB,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAS/B,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM;IAoBhD,YAAY,IAAI,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC;IAIlD,OAAO,IAAI,IAAI,IAAI,cAAc,CAAC,SAAS,CAAC;IAI5C,OAAO,IAAI,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC;IAIxC,SAAS,IAAI,IAAI,IAAI,cAAc,CAAC,SAAS,CAAC;IAI9C,QAAQ,IAAI,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC;IAI9C,OAAO,IAAI,IAAI,IAAI,cAAc,CAAC,SAAS,CAAC;IAI5C,QAAQ,IAAI,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC;IAI9C,QAAQ,IAAI,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC;IAI9C,WAAW,IAAI,IAAI,IAAI,cAAc,CAAC,SAAS,CAAC;CAGxD;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -3,8 +3,8 @@ import type { RaidType } from '@opfr/definitions';
|
|
|
3
3
|
import { AbstractCachedService } from '../AbstractCachedService';
|
|
4
4
|
import type { CooldownCommand, UserCooldown, UserCooldownDocument } from './types';
|
|
5
5
|
export declare abstract class UserCooldownHelper extends AbstractCachedService<UserCooldown, UserCooldownDocument, Types.ObjectId, true> {
|
|
6
|
-
getCommandCooldown(
|
|
7
|
-
getRaidCooldown(
|
|
6
|
+
getCommandCooldown(userId: Types.ObjectId, commandName: CooldownCommand): Promise<Date>;
|
|
7
|
+
getRaidCooldown(userId: Types.ObjectId, type: RaidType): Promise<Date>;
|
|
8
8
|
reduceRaidCooldown(userId: Types.ObjectId, hours: number): Promise<void>;
|
|
9
9
|
startRaidCooldown(userId: Types.ObjectId, type: RaidType, cooldown: number): Promise<void>;
|
|
10
10
|
lockUserCommand(userId: Types.ObjectId): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/services/user-cooldown/helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB,8BAAsB,kBAAmB,SAAQ,qBAAqB,CACpE,YAAY,EACZ,oBAAoB,EACpB,KAAK,CAAC,QAAQ,EACd,IAAI,CACL;
|
|
1
|
+
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../../../src/services/user-cooldown/helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB,8BAAsB,kBAAmB,SAAQ,qBAAqB,CACpE,YAAY,EACZ,oBAAoB,EACpB,KAAK,CAAC,QAAQ,EACd,IAAI,CACL;IACc,kBAAkB,CAC7B,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,WAAW,EAAE,eAAe;IAMjB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ;IAKtD,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;IAgCxD,iBAAiB,CAC5B,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM;IAiBL,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ;IAStC,UAAU,CACrB,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,WAAW,EAAE,eAAe,EAC5B,EAAE,EAAE,MAAM;CAkBb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../../src/services/user-inventory/process/findOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGtD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,KAAK,CAAC,QAAQ,GACnB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../../src/services/user-inventory/process/findOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGtD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,KAAK,CAAC,QAAQ,GACnB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAOtC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/user-stats/engagement/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,2BACf,SAAQ,QAAQ,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/user-stats/engagement/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,2BACf,SAAQ,QAAQ,EAAE,mBAAmB;CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/user-stats/frequency/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,IAAI,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,0BACf,SAAQ,QAAQ,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/user-stats/frequency/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,IAAI,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,0BACf,SAAQ,QAAQ,EAAE,kBAAkB;CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/user-stats/inventory/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,IAAI,CAAC;KAChB,CAAC;IAEF,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IAEF,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,0BACf,SAAQ,QAAQ,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/user-stats/inventory/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC;IAErB,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,IAAI,CAAC;KAChB,CAAC;IAEF,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IAEF,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,0BACf,SAAQ,QAAQ,EAAE,kBAAkB;CAAG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opfr/services",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "OPFR services",
|
|
6
6
|
"author": "Matthieu VEIGA",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"node-cache": "^5"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@opfr/definitions": "^1.1.
|
|
20
|
-
"@opfr/utils-lang": "^1.0.
|
|
19
|
+
"@opfr/definitions": "^1.1.1",
|
|
20
|
+
"@opfr/utils-lang": "^1.0.2",
|
|
21
21
|
"@opfr/utils-type": "^1.0.1",
|
|
22
22
|
"mongoose": "8.20.3",
|
|
23
23
|
"node-cache": "5.1.2"
|
|
@@ -43,5 +43,6 @@
|
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"node-cache": "5.1.2"
|
|
46
|
-
}
|
|
46
|
+
},
|
|
47
|
+
"gitHead": "c20f5172a10bbfedef2b37e6af3323e2a6b6bee1"
|
|
47
48
|
}
|