apexify.js 2.3.8 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,644 +1,754 @@
1
- const EventEmitter = require('events');
2
- const { updateData, find, searchMany, remove } = require('../../../database/utils');
3
- const { levelCard, leaderBoard, xpRank } = require('../../../canvas/themes/levels-card');
4
- const localArray = require('./cLevelsArray.json');
5
-
6
- class LevelingSystem extends EventEmitter {
7
- constructor(config) {
8
- super();
9
-
10
- this.configCollection = 'configCollection'; // Replace with your actual collection name
11
- this.levelsCollection = 'levelsCollection'; // Replace with your actual collection name
12
- this.XpCount = config?.XpCount || 5;
13
- this.rate = config?.rate || 2;
14
- this.channelId = config?.channelId || null;
15
- this.guildId = config?.guildId || null;
16
- this.levelsArray = config?.levelsArray || localArray;
17
- this.levelingMessage = config?.levelUpMessage || 'Congrates {user} you level up to level {level}.'
18
-
19
- }
20
-
21
- async setupConfig() {
22
- try {
23
-
24
- if (!this.guildId || !this.channelId) {
25
- throw new Error('Error: Please provide guildId and channelId');
26
- }
27
-
28
- if (!Array.isArray(this.levelsArray)) {
29
- throw new Error('Error: levelsArray must be an array');
30
- }
31
-
32
- for (const levelObj of this.levelsArray) {
33
- if (typeof levelObj !== 'object' || !('level' in levelObj) || !('xpCount' in levelObj)) {
34
- throw new Error('Error: Invalid structure in levelsArray. Each object should have "level" and "xpCount" properties.');
35
- }
36
- }
37
-
38
- const configExists = await find(this.configCollection, { guildId: this.guildId });
39
-
40
- if (!configExists) {
41
- await updateData(this.configCollection, { guildId: this.guildId },
42
- {
43
- $set: {
44
- XpCount: this.XpCount,
45
- rate: this.rate,
46
- channelId: this.channelId,
47
- guildId: this.guildId,
48
- levelUpMessage: this.levelingMessage,
49
- levelsArray: this.levelsArray,
50
- },
51
- }
52
- );
53
- } else {
54
- await updateData(this.configCollection, { guildId: this.guildId },
55
- {
56
- $set: {
57
- XpCount: this.XpCount,
58
- rate: this.rate,
59
- channelId: this.channelId,
60
- guildId: this.guildId,
61
- levelUpMessage: this.levelingMessage,
62
- levelsArray: this.levelsArray,
63
- },
64
- }
65
- );
66
- }
67
- } catch (error) {
68
- console.error('Error in setupConfig:', error);
69
- this.emit('error', error.message);
70
- }
71
- }
72
-
73
- async disableLevel(guildId) {
74
- try {
75
- if (!guildId) {
76
- throw new Error('Error: GuildId parameter is required. Usage: disbaleLevel(guildId).');
77
- }
78
-
79
- const search = await find(this.configCollection, { guildId });
80
-
81
- if (!search) {
82
- return 'No data found for this server';
83
- }
84
-
85
- const removeData = await remove(this.configCollection, { guildId });
86
-
87
- const success = {
88
- message: `Disabled LevelingSytem for serverId: ${guildId} Successfully.`,
89
- results: removeData,
90
- }
91
-
92
- return success;
93
- } catch (error) {
94
- console.log(error.message);
95
- throw new Error(`Error: An error occurred while disbaling leveling system.`)
96
- }
97
- }
98
-
99
- async xpCard(context, guildId, userId, version = 1) {
100
- try {
101
- if (!context) {
102
- throw new Error('Error: Interactio/Message parameter is required. Usage: xpCard(interaction, guildId, userId). You can replace interaction with message if prefix.');
103
- }
104
-
105
- if (!guildId) {
106
- throw new Error('Error: GuildId parameter is required. Usage: xpCard(guildId, userId).');
107
- }
108
-
109
- if (!userId) {
110
- throw new Error('Error: UserId parameter is required. Usage: xpCard(guildId, userId).');
111
- }
112
-
113
- const search = await find(this.levelsCollection, { userId, guildId });
114
-
115
- if (!search) {
116
- return 'No data found for this user';
117
- }
118
-
119
- const rank = await searchMany([
120
- { collectionName: this.levelsCollection, displayment: null, filter: { guildId } },
121
- ]);
122
-
123
- const sortedLevels = rank.levelsCollection.sort((a, b) => {
124
- return b.xpCount - a.xpCount;
125
- });
126
-
127
- const userIndex = sortedLevels.findIndex(user => user.userId === userId);
128
- let userRank;
129
-
130
- if (userIndex !== -1) {
131
- userRank = userIndex + 1;
132
- } else {
133
- userRank = 'unknown';
134
- }
135
-
136
-
137
- const nextLevelIndex = search.level + 1;
138
- let nextLevelData;
139
-
140
- if (nextLevelIndex < this.levelsArray.length) {
141
- nextLevelData = this.levelsArray[nextLevelIndex];
142
- } else {
143
- nextLevelData = { level: 'max', xpCount: 'max' };
144
- }
145
-
146
-
147
- const card = await xpRank(context, guildId, userId, search.level, userRank, search.xpCount, nextLevelData.xpCount, this.levelsArray, version, search.bannerURL)
148
-
149
- if (!card) return 'An Error occurred while drawing users xpCard.'
150
-
151
- return card;
152
- } catch (error) {
153
- console.log(error.message);
154
- throw new Error(`An error occurred while sending xpCard.`)
155
- }
156
- }
157
-
158
-
159
- async addXp(userId, guildId) {
160
- try {
161
- if (!guildId) {
162
- throw new Error('Error: GuildId parameter is required. Usage: addXp(userId, guildId).');
163
- }
164
-
165
- if (!userId) {
166
- throw new Error('Error: UserId parameter is required. Usage: addXp(userId, guildId).');
167
- }
168
-
169
- const fetchServer = await find(this.configCollection, { guildId: guildId });
170
-
171
- if (!fetchServer) {
172
- return `This server has no leveling system`;
173
- }
174
-
175
- const userRecord = await find(this.levelsCollection, { userId, guildId: guildId });
176
-
177
- let updatedUserRecord;
178
-
179
- if (!userRecord) {
180
- updatedUserRecord = await updateData(this.levelsCollection, { userId, guildId: guildId }, {
181
- $set: {
182
- userId,
183
- guildId: guildId,
184
- xpCount: this.XpCount * this.rate,
185
- level: 0,
186
- },
187
- });
188
- } else {
189
- updatedUserRecord = await updateData(this.levelsCollection, { userId, guildId: guildId }, {
190
- $inc: { xpCount: this.XpCount * this.rate },
191
- });
192
-
193
- if (updatedUserRecord.data.xpCount >= this.levelsArray[this.levelsArray.length - 1].xpCount) {
194
-
195
- await updateData(this.levelsCollection, { userId, guildId: guildId }, {
196
- $set: {
197
- xpCount: this.levelsArray[this.levelsArray.length - 1].xpCount,
198
- level: this.levelsArray[this.levelsArray.length - 1].level,
199
- },
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.LevelingSystem = void 0;
55
+ var events_1 = require("events");
56
+ var utils_1 = require("../../../database/utils");
57
+ var levels_card_1 = require("../../../canvas/themes/levels-card");
58
+ var localArray = require("./cLevelsArray.json");
59
+ var LevelingSystem = /** @class */ (function (_super) {
60
+ __extends(LevelingSystem, _super);
61
+ function LevelingSystem(config) {
62
+ var _this = _super.call(this) || this;
63
+ _this.configCollection = 'configCollection'; // Replace with your actual collection name
64
+ _this.levelsCollection = 'levelsCollection'; // Replace with your actual collection name
65
+ _this.XpCount = (config === null || config === void 0 ? void 0 : config.XpCount) || 5;
66
+ _this.rate = (config === null || config === void 0 ? void 0 : config.rate) || 2;
67
+ _this.channelId = (config === null || config === void 0 ? void 0 : config.channelId) || null;
68
+ _this.guildId = (config === null || config === void 0 ? void 0 : config.guildId) || null;
69
+ _this.levelsArray = (config === null || config === void 0 ? void 0 : config.levelsArray) || localArray;
70
+ _this.levelingMessage = (config === null || config === void 0 ? void 0 : config.levelUpMessage) || 'Congrates {user} you level up to level {level}.';
71
+ return _this;
72
+ }
73
+ LevelingSystem.prototype.setupConfig = function () {
74
+ return __awaiter(this, void 0, void 0, function () {
75
+ var _i, _a, levelObj, configExists, error_1;
76
+ return __generator(this, function (_b) {
77
+ switch (_b.label) {
78
+ case 0:
79
+ _b.trys.push([0, 6, , 7]);
80
+ if (!this.guildId || !this.channelId) {
81
+ throw new Error('Error: Please provide guildId and channelId');
82
+ }
83
+ if (!Array.isArray(this.levelsArray)) {
84
+ throw new Error('Error: levelsArray must be an array');
85
+ }
86
+ for (_i = 0, _a = this.levelsArray; _i < _a.length; _i++) {
87
+ levelObj = _a[_i];
88
+ if (typeof levelObj !== 'object' || !('level' in levelObj) || !('xpCount' in levelObj)) {
89
+ throw new Error('Error: Invalid structure in levelsArray. Each object should have "level" and "xpCount" properties.');
90
+ }
91
+ }
92
+ return [4 /*yield*/, (0, utils_1.find)(this.configCollection, { guildId: this.guildId })];
93
+ case 1:
94
+ configExists = _b.sent();
95
+ if (!!configExists) return [3 /*break*/, 3];
96
+ return [4 /*yield*/, (0, utils_1.updateData)(this.configCollection, { guildId: this.guildId }, {
97
+ $set: {
98
+ XpCount: this.XpCount,
99
+ rate: this.rate,
100
+ channelId: this.channelId,
101
+ guildId: this.guildId,
102
+ levelUpMessage: this.levelingMessage,
103
+ levelsArray: this.levelsArray,
104
+ },
105
+ })];
106
+ case 2:
107
+ _b.sent();
108
+ return [3 /*break*/, 5];
109
+ case 3: return [4 /*yield*/, (0, utils_1.updateData)(this.configCollection, { guildId: this.guildId }, {
110
+ $set: {
111
+ XpCount: this.XpCount,
112
+ rate: this.rate,
113
+ channelId: this.channelId,
114
+ guildId: this.guildId,
115
+ levelUpMessage: this.levelingMessage,
116
+ levelsArray: this.levelsArray,
117
+ },
118
+ })];
119
+ case 4:
120
+ _b.sent();
121
+ _b.label = 5;
122
+ case 5: return [3 /*break*/, 7];
123
+ case 6:
124
+ error_1 = _b.sent();
125
+ console.error('Error in setupConfig:', error_1);
126
+ this.emit('error', error_1.message);
127
+ return [3 /*break*/, 7];
128
+ case 7: return [2 /*return*/];
129
+ }
130
+ });
200
131
  });
201
-
202
- return `${userId} reached maximum level`;
203
- }
204
-
205
- const levelUp = this.checkLevelUp(updatedUserRecord.data);
206
- const channelData = fetchServer.channelId;
207
-
208
- if (levelUp) {
209
- const results = await updateData(this.levelsCollection, { userId, guildId: guildId }, {
210
- $set: { level: updatedUserRecord.data.level },
132
+ };
133
+ LevelingSystem.prototype.disableLevel = function (guildId) {
134
+ return __awaiter(this, void 0, void 0, function () {
135
+ var search, removeData, success, error_2;
136
+ return __generator(this, function (_a) {
137
+ switch (_a.label) {
138
+ case 0:
139
+ _a.trys.push([0, 3, , 4]);
140
+ if (!guildId) {
141
+ throw new Error('Error: GuildId parameter is required. Usage: disbaleLevel(guildId).');
142
+ }
143
+ return [4 /*yield*/, (0, utils_1.find)(this.configCollection, { guildId: guildId })];
144
+ case 1:
145
+ search = _a.sent();
146
+ if (!search) {
147
+ return [2 /*return*/, 'No data found for this server'];
148
+ }
149
+ return [4 /*yield*/, (0, utils_1.remove)(this.configCollection, { guildId: guildId })];
150
+ case 2:
151
+ removeData = _a.sent();
152
+ success = {
153
+ message: "Disabled LevelingSytem for serverId: ".concat(guildId, " Successfully."),
154
+ results: removeData,
155
+ };
156
+ return [2 /*return*/, success];
157
+ case 3:
158
+ error_2 = _a.sent();
159
+ console.log(error_2.message);
160
+ throw new Error("Error: An error occurred while disbaling leveling system.");
161
+ case 4: return [2 /*return*/];
162
+ }
163
+ });
211
164
  });
212
- const levelUpMessage = fetchServer.levelUpMessage;
213
- let editedMessage = levelUpMessage;
214
- if (editedMessage.includes('{user}')) {
215
- editedMessage = editedMessage.replace('{user}', `<@${userId}>`);
216
- }if (editedMessage.includes('{level}')) {
217
- editedMessage = editedMessage.replace('{level}', results.data.level);
218
- }
219
- this.emit('levelup', editedMessage, userId, results.data.level, results.data.xpCount, channelData, updatedUserRecord.data.guildId);
220
- }
221
- }
222
-
223
- const success = {
224
- message: 'User gained xp.',
225
- newXp: updatedUserRecord.data.xpCount,
226
- newLevel: updatedUserRecord.data.level,
227
- data: updatedUserRecord.data,
228
165
  };
229
-
230
- return success;
231
- } catch (error) {
232
- this.emit('error', error.message);
233
- throw error;
234
- }
235
- }
236
-
237
- async setUserBanner(guildId, userId, bannerURL) {
238
- try {
239
- if (!guildId) {
240
- throw new Error('Error: GuildId parameter is required. Usage: setUserBanner(guildId, userId, bannerURL).');
241
- }
242
-
243
- if (!userId) {
244
- throw new Error('Error: UserId parameter is required. Usage: setUserBanner(guildId, userId, bannerURL).');
245
- }
246
-
247
- if (!bannerURL || !bannerURL.startsWith('http')) {
248
- throw new Error('Error: BannerURL parameter is required. Usage: setUserBanner(guildId, userId, bannerURL).');
249
- }
250
-
251
- const saveData = await updateData(this.levelsCollection, { userId, guildId }, { $set: { bannerURL }})
252
-
253
- return saveData.data
254
- } catch (error) {
255
- console.error(error.message);
256
- throw new Error(`Error: An error occurred while setting user banner.`)
257
- }
258
- }
259
-
260
- async updateUserLevel(userId, guildId) {
261
- try {
262
- const userRecord = await find(this.levelsCollection, { userId, guildId });
263
- if (!userRecord) {
264
- console.error(`User record not found for userId: ${userId}, guildId: ${guildId}`);
265
- return;
266
- }
267
-
268
- const userXp = userRecord.xpCount;
269
-
270
- let updatedLevel = 0;
271
- for (const levelInfo of this.levelsArray) {
272
- if (userXp >= levelInfo.xpCount) {
273
- updatedLevel = levelInfo.level;
274
- } else {
275
- break;
166
+ LevelingSystem.prototype.addXp = function (userId, guildId) {
167
+ return __awaiter(this, void 0, void 0, function () {
168
+ var fetchServer, userRecord, updatedUserRecord, levelUp, channelData, results, levelUpMessage, editedMessage, success, error_3;
169
+ return __generator(this, function (_a) {
170
+ switch (_a.label) {
171
+ case 0:
172
+ _a.trys.push([0, 10, , 11]);
173
+ if (!guildId) {
174
+ throw new Error('Error: GuildId parameter is required. Usage: addXp(userId, guildId).');
175
+ }
176
+ if (!userId) {
177
+ throw new Error('Error: UserId parameter is required. Usage: addXp(userId, guildId).');
178
+ }
179
+ return [4 /*yield*/, (0, utils_1.find)(this.configCollection, { guildId: guildId })];
180
+ case 1:
181
+ fetchServer = _a.sent();
182
+ if (!fetchServer) {
183
+ return [2 /*return*/, "This server has no leveling system"];
184
+ }
185
+ return [4 /*yield*/, (0, utils_1.find)(this.levelsCollection, { userId: userId, guildId: guildId })];
186
+ case 2:
187
+ userRecord = _a.sent();
188
+ updatedUserRecord = void 0;
189
+ if (!!userRecord) return [3 /*break*/, 4];
190
+ return [4 /*yield*/, (0, utils_1.updateData)(this.levelsCollection, { userId: userId, guildId: guildId }, {
191
+ $set: {
192
+ userId: userId,
193
+ guildId: guildId,
194
+ xpCount: this.XpCount * this.rate,
195
+ level: 0,
196
+ },
197
+ })];
198
+ case 3:
199
+ updatedUserRecord = _a.sent();
200
+ return [3 /*break*/, 9];
201
+ case 4: return [4 /*yield*/, (0, utils_1.updateData)(this.levelsCollection, { userId: userId, guildId: guildId }, {
202
+ $inc: { xpCount: this.XpCount * this.rate },
203
+ })];
204
+ case 5:
205
+ updatedUserRecord = _a.sent();
206
+ if (!(updatedUserRecord.data.xpCount >= this.levelsArray[this.levelsArray.length - 1].xpCount)) return [3 /*break*/, 7];
207
+ return [4 /*yield*/, (0, utils_1.updateData)(this.levelsCollection, { userId: userId, guildId: guildId }, {
208
+ $set: {
209
+ xpCount: this.levelsArray[this.levelsArray.length - 1].xpCount,
210
+ level: this.levelsArray[this.levelsArray.length - 1].level,
211
+ },
212
+ })];
213
+ case 6:
214
+ _a.sent();
215
+ return [2 /*return*/, "".concat(userId, " reached maximum level")];
216
+ case 7:
217
+ levelUp = this.checkLevelUp(updatedUserRecord.data);
218
+ channelData = fetchServer.channelId;
219
+ if (!levelUp) return [3 /*break*/, 9];
220
+ return [4 /*yield*/, (0, utils_1.updateData)(this.levelsCollection, { userId: userId, guildId: guildId }, {
221
+ $set: { level: updatedUserRecord.data.level },
222
+ })];
223
+ case 8:
224
+ results = _a.sent();
225
+ levelUpMessage = fetchServer.levelUpMessage;
226
+ editedMessage = levelUpMessage;
227
+ if (editedMessage.includes('{user}')) {
228
+ editedMessage = editedMessage.replace('{user}', "<@".concat(userId, ">"));
229
+ }
230
+ if (editedMessage.includes('{level}')) {
231
+ editedMessage = editedMessage.replace('{level}', results.data.level);
232
+ }
233
+ this.emit('levelup', editedMessage, userId, results.data.level, results.data.xpCount, channelData, updatedUserRecord.data.guildId);
234
+ _a.label = 9;
235
+ case 9:
236
+ success = {
237
+ message: 'User gained xp.',
238
+ newXp: updatedUserRecord.data.xpCount,
239
+ newLevel: updatedUserRecord.data.level,
240
+ data: updatedUserRecord.data,
241
+ };
242
+ return [2 /*return*/, success];
243
+ case 10:
244
+ error_3 = _a.sent();
245
+ this.emit('error', error_3.message);
246
+ throw error_3;
247
+ case 11: return [2 /*return*/];
248
+ }
249
+ });
250
+ });
251
+ };
252
+ LevelingSystem.prototype.setUserBanner = function (guildId, userId, bannerURL) {
253
+ return __awaiter(this, void 0, void 0, function () {
254
+ var saveData, error_4;
255
+ return __generator(this, function (_a) {
256
+ switch (_a.label) {
257
+ case 0:
258
+ _a.trys.push([0, 2, , 3]);
259
+ if (!guildId) {
260
+ throw new Error('Error: GuildId parameter is required. Usage: setUserBanner(guildId, userId, bannerURL).');
261
+ }
262
+ if (!userId) {
263
+ throw new Error('Error: UserId parameter is required. Usage: setUserBanner(guildId, userId, bannerURL).');
264
+ }
265
+ if (!bannerURL || !bannerURL.startsWith('http')) {
266
+ throw new Error('Error: BannerURL parameter is required. Usage: setUserBanner(guildId, userId, bannerURL).');
267
+ }
268
+ return [4 /*yield*/, (0, utils_1.updateData)(this.levelsCollection, { userId: userId, guildId: guildId }, { $set: { bannerURL: bannerURL } })];
269
+ case 1:
270
+ saveData = _a.sent();
271
+ return [2 /*return*/, saveData.data];
272
+ case 2:
273
+ error_4 = _a.sent();
274
+ console.error(error_4.message);
275
+ throw new Error("Error: An error occurred while setting user banner.");
276
+ case 3: return [2 /*return*/];
277
+ }
278
+ });
279
+ });
280
+ };
281
+ LevelingSystem.prototype.updateUserLevel = function (userId, guildId) {
282
+ return __awaiter(this, void 0, void 0, function () {
283
+ var userRecord, userXp, updatedLevel, _i, _a, levelInfo, error_5;
284
+ return __generator(this, function (_b) {
285
+ switch (_b.label) {
286
+ case 0:
287
+ _b.trys.push([0, 3, , 4]);
288
+ return [4 /*yield*/, (0, utils_1.find)(this.levelsCollection, { userId: userId, guildId: guildId })];
289
+ case 1:
290
+ userRecord = _b.sent();
291
+ if (!userRecord) {
292
+ console.error("User record not found for userId: ".concat(userId, ", guildId: ").concat(guildId));
293
+ return [2 /*return*/];
294
+ }
295
+ userXp = userRecord.xpCount;
296
+ updatedLevel = 0;
297
+ for (_i = 0, _a = this.levelsArray; _i < _a.length; _i++) {
298
+ levelInfo = _a[_i];
299
+ if (userXp >= levelInfo.xpCount) {
300
+ updatedLevel = levelInfo.level;
301
+ }
302
+ else {
303
+ break;
304
+ }
305
+ }
306
+ return [4 /*yield*/, (0, utils_1.updateData)(this.levelsCollection, { userId: userId, guildId: guildId }, {
307
+ $set: { level: updatedLevel },
308
+ })];
309
+ case 2:
310
+ _b.sent();
311
+ return [2 /*return*/, updatedLevel];
312
+ case 3:
313
+ error_5 = _b.sent();
314
+ console.error("Error updating user level:", error_5.message);
315
+ throw error_5;
316
+ case 4: return [2 /*return*/];
317
+ }
318
+ });
319
+ });
320
+ };
321
+ LevelingSystem.prototype.checkLevelUp = function (userRecord) {
322
+ var level = this.levelsArray.length - 1;
323
+ while (level >= 0 && userRecord.xpCount <= this.levelsArray[level].xpCount) {
324
+ level--;
276
325
  }
277
- }
278
-
279
- await updateData(this.levelsCollection, { userId, guildId }, {
280
- $set: { level: updatedLevel },
281
- });
282
-
283
- return updatedLevel;
284
- } catch (error) {
285
- console.error("Error updating user level:", error.message);
286
- throw error;
287
- }
288
- }
289
-
290
-
291
- checkLevelUp(userRecord) {
292
- let level = this.levelsArray.length - 1;
293
-
294
- while (level >= 0 && userRecord.xpCount <= this.levelsArray[level].xpCount) {
295
- level--;
296
- }
297
-
298
- if (level < 0) {
299
- console.error(`Error: Invalid level data for user with xpCount: ${userRecord.xpCount}`);
300
- this.emit('error', `Invalid level data for user with xpCount: ${userRecord.xpCount}`);
301
- return false;
302
- }
303
-
304
- const nextLevelData = this.levelsArray[level];
305
-
306
- if (userRecord.level < nextLevelData.level) {
307
- userRecord.level = nextLevelData.level;
308
- return true;
309
- }
310
-
311
- return false;
312
- }
313
-
314
- async userInfo(userId, guildId) {
315
- try {
316
- const userRecord = await find(this.levelsCollection, { userId, guildId });
317
-
318
- if (!userRecord) {
319
- return 'No data found for this user.';
320
- }
321
-
322
- return {
323
- userId: userRecord.userId,
324
- XpCount: userRecord.xpCount,
325
- Level: userRecord.level,
326
- bannerURL: userRecord.bannerURL || `user doesn't have custom banner url`,
326
+ if (level < 0) {
327
+ console.error("Error: Invalid level data for user with xpCount: ".concat(userRecord.xpCount));
328
+ this.emit('error', "Invalid level data for user with xpCount: ".concat(userRecord.xpCount));
329
+ return false;
330
+ }
331
+ var nextLevelData = this.levelsArray[level];
332
+ if (userRecord.level < nextLevelData.level) {
333
+ userRecord.level = nextLevelData.level;
334
+ return true;
335
+ }
336
+ return false;
327
337
  };
328
- } catch (error) {
329
- console.error('Error in userInfo:', error);
330
- this.emit('error', error.message);
331
- return null;
332
- }
333
- }
334
-
335
- async checkConfig(guildId) {
336
- try {
337
- const configData = await find(this.configCollection, { guildId });
338
-
339
- if (!configData) {
340
- return 'No config data found for this server.';
341
- }
342
-
343
- return {
344
- XpCount: configData.XpCount,
345
- rate: configData.rate,
346
- channelId: configData.channelId,
347
- guildId: configData.guildId,
348
- levelsArray: configData.levelsArray,
338
+ LevelingSystem.prototype.userInfo = function (userId, guildId) {
339
+ return __awaiter(this, void 0, void 0, function () {
340
+ var userRecord, error_6;
341
+ return __generator(this, function (_a) {
342
+ switch (_a.label) {
343
+ case 0:
344
+ _a.trys.push([0, 2, , 3]);
345
+ return [4 /*yield*/, (0, utils_1.find)(this.levelsCollection, { userId: userId, guildId: guildId })];
346
+ case 1:
347
+ userRecord = _a.sent();
348
+ if (!userRecord) {
349
+ return [2 /*return*/, 'No data found for this user.'];
350
+ }
351
+ return [2 /*return*/, {
352
+ userId: userRecord.userId,
353
+ XpCount: userRecord.xpCount,
354
+ Level: userRecord.level,
355
+ bannerURL: userRecord.bannerURL || "user doesn't have custom banner url",
356
+ }];
357
+ case 2:
358
+ error_6 = _a.sent();
359
+ console.error('Error in userInfo:', error_6);
360
+ this.emit('error', error_6.message);
361
+ return [2 /*return*/, null];
362
+ case 3: return [2 /*return*/];
363
+ }
364
+ });
365
+ });
349
366
  };
350
- } catch (error) {
351
- console.error('Error in checkConfig:', error);
352
- this.emit('error', error.message);
353
- return null;
354
- }
355
- }
356
-
357
- async serverLeaderBoard(guildId, topUsers = 10) {
358
- try {
359
- if (!guildId) {
360
- throw new Error(`Error: GuildId must be provided in the parameter serverLeaderBoard(guildId).`)
361
- }
362
-
363
- if (topUsers === 0 || topUsers < -1 ) {
364
- throw new Error('Error: serverLeaderBoard cant display 0 members.')
365
- }
366
-
367
- const collectionFilters = [
368
- { collectionName: this.levelsCollection, displayment: topUsers, filter: { guildId } }
369
- ];
370
-
371
- const search = await searchMany(collectionFilters);
372
-
373
- const usersList = search.levelsCollection;
374
-
375
- if (!usersList) {
376
- console.log('No config data found for this server.');
377
- return 'No config data found for this server.';
378
- }
379
-
380
- if (!Array.isArray(usersList)) {
381
- console.error('Error in serverLeaderBoard: usersList is not an array');
382
- return [];
383
- }
384
-
385
- const sortedUsersList = usersList.sort((a, b) => b.xpCount - a.xpCount);
386
-
387
- let topUsersData;
388
-
389
- if (topUsers === -1) {
390
- topUsersData = sortedUsersList;
391
- } else {
392
- topUsersData = sortedUsersList.slice(0, topUsers);
393
- }
394
-
395
- const transformedData = topUsersData.map(user => ({
396
- userId: user.userId,
397
- xpCount: user.xpCount,
398
- level: user.level,
399
- guildId: user.guildId
400
- }));
401
-
402
- return transformedData;
403
- } catch (error) {
404
- console.error('Error in serverLeaderBoard:', error);
405
- this.emit('error', error.message);
406
- return [];
407
- }
408
- }
409
-
410
- async topGlobal(topUsers = 10) {
411
- try {
412
-
413
- if (topUsers === 0 || topUsers < -1 ) {
414
- throw new Error('Error: leaderBoard cant display 0 members.')
415
- }
416
-
417
- const collectionFilters = [
418
- { collectionName: this.levelsCollection, displayment: topUsers, filter: {} }
419
- ];
420
-
421
- const search = await searchMany(collectionFilters);
422
- const usersList = search.levelsCollection;
423
-
424
- if (!usersList) {
425
- return 'No config data found for this server.';
426
- }
427
-
428
- if (!Array.isArray(usersList)) {
429
- console.error('Error in leaderBoard: usersList is not an array');
430
- return [];
431
- }
432
-
433
- const sortedUsersList = usersList.sort((a, b) => b.xpCount - a.xpCount);
434
-
435
- let topUsersData;
436
-
437
- if (topUsers === -1) {
438
- topUsersData = sortedUsersList;
439
- } else {
440
- topUsersData = sortedUsersList.slice(0, topUsers);
441
- }
442
-
443
- const transformedData = topUsersData.map(user => ({
444
- userId: user.userId,
445
- XpCount: user.xpCount,
446
- Level: user.level,
447
- }));
448
-
449
- return transformedData;
450
- } catch (error) {
451
- console.error('Error in leaderBoard:', error);
452
- this.emit('error', error.message);
453
- return [];
454
- }
455
- }
456
-
457
- async levelUpCard(message, userId, guildId, options = {}) {
458
-
459
- if (!message) {
460
- throw new Error('Error: Please define message paramter in userCard(message, userId)');
461
- }
462
-
463
- if (!userId) {
464
- throw new Error('Error: Please define userId paramter in userCard(message, userId)');
465
- }
466
-
467
- try {
468
- const userRecord = await find(this.levelsCollection, { userId, guildId });
469
-
470
- if (!userRecord) {
471
- return 'No data found for this user.';
472
- }
473
-
474
- const attachment = await levelCard(message, userRecord, options);
475
-
476
- return attachment;
477
- } catch (error) {
478
- console.error(error.message)
479
- throw error;
480
- }
481
- }
482
-
483
- async serverLeaderBoardCard(message, guildId, version = 1, colorHex = 'random') {
484
-
485
- if (!guildId) {
486
- throw new Error(`Error: Message must be provided in the parameter leaderBoardCard(message, guildId).`)
487
- }
488
-
489
- if (!guildId) {
490
- throw new Error(`Error: GuildId must be provided in the parameter leaderBoardCard(message, guildId).`)
491
- }
492
-
493
- try {
494
- const fetchServer = await find(this.configCollection, { guildId: guildId });
495
-
496
- if (!fetchServer) {
497
- return `This server has no leveling system`;
498
- }
499
-
500
- const leaderBoardData = await this.serverLeaderBoard(guildId, 5);
501
- const card = await leaderBoard(message, leaderBoardData, version, colorHex)
502
-
503
- return card;
504
- } catch (error) {
505
- console.error(error.message);
506
- }
507
- }
508
-
509
- async editXp(guildId, userId, xpAmount) {
510
- try {
511
- if (!guildId) {
512
- throw new Error(`Error: GuildId isn't provided. Please use editXp(guildId, userId, xpAmount).`)
513
- }
514
-
515
- if (!userId) {
516
- throw new Error(`Error: UserId isn't provided. Please use editXp(guildId, userId, xpAmount).`)
517
- }
518
-
519
- if (!xpAmount || typeof xpAmount !== 'number') {
520
- throw new Error('Error: Please xpAmount editXp(guidId, userId, xpAmount). xpAmount must be a number.');
521
- }
522
-
523
- const search = await find(this.levelsCollection, { guildId, userId });
524
-
525
- if (!search) {
526
- return 'This user has no leveling data'
527
- }
528
-
529
- const searchServer = await find(this.configCollection, { guildId });
530
- const channelId = searchServer.channelId;
531
- const prevLevel = search.level;
532
-
533
- const update = await updateData(this.levelsCollection, { guildId, userId }, { $inc: { xpCount: xpAmount }})
534
-
535
-
536
- const levelUp = await this.updateUserLevel(userId, guildId);
537
-
538
- if (levelUp > prevLevel) {
539
-
540
- const results = await updateData(this.levelsCollection, { userId, guildId }, {
541
- $set: { level: updatedUserRecord.data.level },
367
+ LevelingSystem.prototype.checkConfig = function (guildId) {
368
+ return __awaiter(this, void 0, void 0, function () {
369
+ var configData, error_7;
370
+ return __generator(this, function (_a) {
371
+ switch (_a.label) {
372
+ case 0:
373
+ _a.trys.push([0, 2, , 3]);
374
+ return [4 /*yield*/, (0, utils_1.find)(this.configCollection, { guildId: guildId })];
375
+ case 1:
376
+ configData = _a.sent();
377
+ if (!configData) {
378
+ return [2 /*return*/, 'No config data found for this server.'];
379
+ }
380
+ return [2 /*return*/, {
381
+ XpCount: configData.XpCount,
382
+ rate: configData.rate,
383
+ channelId: configData.channelId,
384
+ guildId: configData.guildId,
385
+ levelsArray: configData.levelsArray,
386
+ }];
387
+ case 2:
388
+ error_7 = _a.sent();
389
+ console.error('Error in checkConfig:', error_7);
390
+ this.emit('error', error_7.message);
391
+ return [2 /*return*/, null];
392
+ case 3: return [2 /*return*/];
393
+ }
394
+ });
542
395
  });
543
-
544
- const levelUpMessage = fetchServer.levelUpMessage;
545
- let editedMessage = levelUpMessage;
546
- if (editedMessage.includes('{user}')) {
547
- editedMessage = editedMessage.replace('{user}', `<@${userId}>`);
548
- }if (editedMessage.includes('{level}')) {
549
- editedMessage = editedMessage.replace('{level}', results.data.level);
550
- }
551
- this.emit('levelup', editedMessage, userId, results.data.level, results.data.xpCount, channelId, updatedUserRecord.data.guildId);
552
- }
553
-
554
- const success = {
555
- message: 'Updated user Xp successfully',
556
- newXp: update.data.xpCount,
557
- newLevel: levelUp,
558
- }
559
-
560
- return success;
561
- } catch (error) {
562
- console.error("Error editing XP:", error.message);
563
- throw new Error("Failed to update user XP");
564
- }
565
- }
566
-
567
- async removeUser(guildId, userId) {
568
- try {
569
- if (!guildId) {
570
- throw new Error(`Error: GuildId isn't provided. Please use removeUser(guildId, userId).`)
571
- }
572
-
573
- if (!userId) {
574
- throw new Error(`Error: UserId isn't provided. Please use removeUser(guildId, userId).`)
575
- }
576
-
577
- const search = await find(this.levelsCollection, { guildId, userId });
578
-
579
- if (!search) {
580
- return 'This user has no leveling data'
581
- }
582
-
583
- const deleteUser = await remove(this.levelsCollection, { guildId, userId });
584
-
585
- const success = {
586
- message: 'User removed successfully',
587
- results: deleteUser,
588
- }
589
-
590
- return success;
591
- } catch (error) {
592
- console.error('Error while removing user from data due to:', error.message)
593
- throw new Error(`Couldn't remove user from data.`)
594
- }
595
- }
596
-
597
- async liveServerLeaderboard(context, guildId, channelId, timer = 10000, version = 1, colorHex) {
598
- try {
599
- if (!guildId) {
600
- throw new Error(`Error: GuildId isn't provided. Please use liveServerLeaderboard(client, guildId, channelId).`);
601
- }
602
-
603
- if (!channelId) {
604
- throw new Error(`Error: ChannelId isn't provided. Please use liveServerLeaderboard(client, guildId, channelId).`);
605
- }
606
-
607
- const fetchServer = await find(this.configCollection, { guildId: guildId });
608
-
609
- if (!fetchServer) {
610
- return `This server has no leveling system`;
611
- }
612
-
613
- const existingConfig = await find('liveLeaderBoard', { guildId, channelId });
614
-
615
- await updateData('liveLeaderBoard', { guildId, channelId }, { $set: { guildId, channelId, version } });
616
-
617
- const card = await this.serverLeaderBoardCard(context.client, guildId, version, colorHex);
618
-
619
- const channel = context.client.channels.cache.get(channelId);
620
-
621
- if (channel) {
622
- const liveLeaderboardMessageId = existingConfig?.messageId;
623
- const existingMessage = liveLeaderboardMessageId ? await channel.messages.fetch(liveLeaderboardMessageId).catch(() => null) : null;
624
-
625
- if (existingMessage) {
626
- await existingMessage.edit({ content: '# LIVE SERVER LEADERBOARD.', files: [card] });
627
- } else {
628
- const newMessage = await channel.send({ content: '# LIVE SERVER LEADERBOARD.', files: [card] });
629
- await updateData('liveLeaderBoard', { guildId, channelId }, { $set: { messageId: newMessage.id } });
630
- }
631
- } else {
632
- console.error('Channel not found');
633
- }
634
-
635
- setTimeout(() => {
636
- this.liveServerLeaderboard(context, guildId, channelId, timer, version, colorHex);
637
- }, timer);
638
- } catch (error) {
639
- console.error('Error:', error.message);
640
- }
641
- }
642
- }
643
-
644
- module.exports = LevelingSystem;
396
+ };
397
+ LevelingSystem.prototype.serverLeaderBoard = function (guildId, topUsers) {
398
+ if (topUsers === void 0) { topUsers = 10; }
399
+ return __awaiter(this, void 0, void 0, function () {
400
+ var collectionFilters, search, usersList, sortedUsersList, topUsersData, transformedData, error_8;
401
+ return __generator(this, function (_a) {
402
+ switch (_a.label) {
403
+ case 0:
404
+ _a.trys.push([0, 2, , 3]);
405
+ if (!guildId) {
406
+ throw new Error("Error: GuildId must be provided in the parameter serverLeaderBoard(guildId).");
407
+ }
408
+ if (topUsers === 0 || topUsers < -1) {
409
+ throw new Error('Error: serverLeaderBoard cant display 0 members.');
410
+ }
411
+ collectionFilters = [
412
+ { collectionName: this.levelsCollection, displayment: topUsers, filter: { guildId: guildId } }
413
+ ];
414
+ return [4 /*yield*/, (0, utils_1.searchMany)(collectionFilters)];
415
+ case 1:
416
+ search = _a.sent();
417
+ usersList = search.levelsCollection;
418
+ if (!usersList) {
419
+ console.log('No config data found for this server.');
420
+ return [2 /*return*/, 'No config data found for this server.'];
421
+ }
422
+ if (!Array.isArray(usersList)) {
423
+ console.error('Error in serverLeaderBoard: usersList is not an array');
424
+ return [2 /*return*/, []];
425
+ }
426
+ sortedUsersList = usersList.sort(function (a, b) { return b.xpCount - a.xpCount; });
427
+ topUsersData = void 0;
428
+ if (topUsers === -1) {
429
+ topUsersData = sortedUsersList;
430
+ }
431
+ else {
432
+ topUsersData = sortedUsersList.slice(0, topUsers);
433
+ }
434
+ transformedData = topUsersData.map(function (user) { return ({
435
+ userId: user.userId,
436
+ xpCount: user.xpCount,
437
+ level: user.level,
438
+ guildId: user.guildId
439
+ }); });
440
+ return [2 /*return*/, transformedData];
441
+ case 2:
442
+ error_8 = _a.sent();
443
+ console.error('Error in serverLeaderBoard:', error_8);
444
+ this.emit('error', error_8.message);
445
+ return [2 /*return*/, []];
446
+ case 3: return [2 /*return*/];
447
+ }
448
+ });
449
+ });
450
+ };
451
+ LevelingSystem.prototype.topGlobal = function (topUsers) {
452
+ if (topUsers === void 0) { topUsers = 10; }
453
+ return __awaiter(this, void 0, void 0, function () {
454
+ var collectionFilters, search, usersList, sortedUsersList, topUsersData, transformedData, error_9;
455
+ return __generator(this, function (_a) {
456
+ switch (_a.label) {
457
+ case 0:
458
+ _a.trys.push([0, 2, , 3]);
459
+ if (topUsers === 0 || topUsers < -1) {
460
+ throw new Error('Error: leaderBoard cant display 0 members.');
461
+ }
462
+ collectionFilters = [
463
+ { collectionName: this.levelsCollection, displayment: topUsers, filter: {} }
464
+ ];
465
+ return [4 /*yield*/, (0, utils_1.searchMany)(collectionFilters)];
466
+ case 1:
467
+ search = _a.sent();
468
+ usersList = search.levelsCollection;
469
+ if (!usersList) {
470
+ return [2 /*return*/, 'No config data found for this server.'];
471
+ }
472
+ if (!Array.isArray(usersList)) {
473
+ console.error('Error in leaderBoard: usersList is not an array');
474
+ return [2 /*return*/, []];
475
+ }
476
+ sortedUsersList = usersList.sort(function (a, b) { return b.xpCount - a.xpCount; });
477
+ topUsersData = void 0;
478
+ if (topUsers === -1) {
479
+ topUsersData = sortedUsersList;
480
+ }
481
+ else {
482
+ topUsersData = sortedUsersList.slice(0, topUsers);
483
+ }
484
+ transformedData = topUsersData.map(function (user) { return ({
485
+ userId: user.userId,
486
+ XpCount: user.xpCount,
487
+ Level: user.level,
488
+ }); });
489
+ return [2 /*return*/, transformedData];
490
+ case 2:
491
+ error_9 = _a.sent();
492
+ console.error('Error in leaderBoard:', error_9);
493
+ this.emit('error', error_9.message);
494
+ return [2 /*return*/, []];
495
+ case 3: return [2 /*return*/];
496
+ }
497
+ });
498
+ });
499
+ };
500
+ LevelingSystem.prototype.levelUpCard = function (message, userId, guildId, options) {
501
+ if (options === void 0) { options = {}; }
502
+ return __awaiter(this, void 0, void 0, function () {
503
+ var userRecord, attachment, error_10;
504
+ return __generator(this, function (_a) {
505
+ switch (_a.label) {
506
+ case 0:
507
+ if (!message) {
508
+ throw new Error('Error: Please define message paramter in userCard(message, userId)');
509
+ }
510
+ if (!userId) {
511
+ throw new Error('Error: Please define userId paramter in userCard(message, userId)');
512
+ }
513
+ _a.label = 1;
514
+ case 1:
515
+ _a.trys.push([1, 4, , 5]);
516
+ return [4 /*yield*/, (0, utils_1.find)(this.levelsCollection, { userId: userId, guildId: guildId })];
517
+ case 2:
518
+ userRecord = _a.sent();
519
+ if (!userRecord) {
520
+ return [2 /*return*/, 'No data found for this user.'];
521
+ }
522
+ return [4 /*yield*/, (0, levels_card_1.levelCard)(message, userRecord)];
523
+ case 3:
524
+ attachment = _a.sent();
525
+ return [2 /*return*/, attachment];
526
+ case 4:
527
+ error_10 = _a.sent();
528
+ console.error(error_10.message);
529
+ throw error_10;
530
+ case 5: return [2 /*return*/];
531
+ }
532
+ });
533
+ });
534
+ };
535
+ LevelingSystem.prototype.serverLeaderBoardCard = function (message, guildId, version, colorHex) {
536
+ if (version === void 0) { version = 1; }
537
+ if (colorHex === void 0) { colorHex = 'random'; }
538
+ return __awaiter(this, void 0, void 0, function () {
539
+ var fetchServer, leaderBoardData, card, error_11;
540
+ return __generator(this, function (_a) {
541
+ switch (_a.label) {
542
+ case 0:
543
+ if (!guildId) {
544
+ throw new Error("Error: Message must be provided in the parameter leaderBoardCard(message, guildId).");
545
+ }
546
+ if (!guildId) {
547
+ throw new Error("Error: GuildId must be provided in the parameter leaderBoardCard(message, guildId).");
548
+ }
549
+ _a.label = 1;
550
+ case 1:
551
+ _a.trys.push([1, 5, , 6]);
552
+ return [4 /*yield*/, (0, utils_1.find)(this.configCollection, { guildId: guildId })];
553
+ case 2:
554
+ fetchServer = _a.sent();
555
+ if (!fetchServer) {
556
+ return [2 /*return*/, "This server has no leveling system"];
557
+ }
558
+ return [4 /*yield*/, this.serverLeaderBoard(guildId, 5)];
559
+ case 3:
560
+ leaderBoardData = _a.sent();
561
+ return [4 /*yield*/, (0, levels_card_1.leaderBoard)(message, leaderBoardData, version, colorHex)];
562
+ case 4:
563
+ card = _a.sent();
564
+ return [2 /*return*/, card];
565
+ case 5:
566
+ error_11 = _a.sent();
567
+ console.error(error_11.message);
568
+ return [3 /*break*/, 6];
569
+ case 6: return [2 /*return*/];
570
+ }
571
+ });
572
+ });
573
+ };
574
+ LevelingSystem.prototype.editXp = function (guildId, userId, xpAmount) {
575
+ return __awaiter(this, void 0, void 0, function () {
576
+ var search, searchServer, channelId, prevLevel, update, levelUp, results, fetchServer, levelUpMessage, editedMessage, success, error_12;
577
+ return __generator(this, function (_a) {
578
+ switch (_a.label) {
579
+ case 0:
580
+ _a.trys.push([0, 8, , 9]);
581
+ if (!guildId) {
582
+ throw new Error("Error: GuildId isn't provided. Please use editXp(guildId, userId, xpAmount).");
583
+ }
584
+ if (!userId) {
585
+ throw new Error("Error: UserId isn't provided. Please use editXp(guildId, userId, xpAmount).");
586
+ }
587
+ if (!xpAmount || typeof xpAmount !== 'number') {
588
+ throw new Error('Error: Please xpAmount editXp(guidId, userId, xpAmount). xpAmount must be a number.');
589
+ }
590
+ return [4 /*yield*/, (0, utils_1.find)(this.levelsCollection, { guildId: guildId, userId: userId })];
591
+ case 1:
592
+ search = _a.sent();
593
+ if (!search) {
594
+ return [2 /*return*/, 'This user has no leveling data'];
595
+ }
596
+ return [4 /*yield*/, (0, utils_1.find)(this.configCollection, { guildId: guildId })];
597
+ case 2:
598
+ searchServer = _a.sent();
599
+ channelId = searchServer.channelId;
600
+ prevLevel = search.level;
601
+ return [4 /*yield*/, (0, utils_1.updateData)(this.levelsCollection, { guildId: guildId, userId: userId }, { $inc: { xpCount: xpAmount } })];
602
+ case 3:
603
+ update = _a.sent();
604
+ return [4 /*yield*/, this.updateUserLevel(userId, guildId)];
605
+ case 4:
606
+ levelUp = _a.sent();
607
+ if (!(levelUp > prevLevel)) return [3 /*break*/, 7];
608
+ return [4 /*yield*/, (0, utils_1.updateData)(this.levelsCollection, { userId: userId, guildId: guildId }, {
609
+ $set: { level: update.data.level },
610
+ })];
611
+ case 5:
612
+ results = _a.sent();
613
+ return [4 /*yield*/, (0, utils_1.find)(this.configCollection, { guildId: guildId })];
614
+ case 6:
615
+ fetchServer = _a.sent();
616
+ levelUpMessage = fetchServer.levelUpMessage;
617
+ editedMessage = levelUpMessage;
618
+ if (editedMessage.includes('{user}')) {
619
+ editedMessage = editedMessage.replace('{user}', "<@".concat(userId, ">"));
620
+ }
621
+ if (editedMessage.includes('{level}')) {
622
+ editedMessage = editedMessage.replace('{level}', results.data.level);
623
+ }
624
+ this.emit('levelup', editedMessage, userId, results.data.level, results.data.xpCount, channelId, results.data.guildId);
625
+ _a.label = 7;
626
+ case 7:
627
+ success = {
628
+ message: 'Updated user Xp successfully',
629
+ newXp: update.data.xpCount,
630
+ newLevel: levelUp,
631
+ };
632
+ return [2 /*return*/, success];
633
+ case 8:
634
+ error_12 = _a.sent();
635
+ console.error("Error editing XP:", error_12.message);
636
+ throw new Error("Failed to update user XP");
637
+ case 9: return [2 /*return*/];
638
+ }
639
+ });
640
+ });
641
+ };
642
+ LevelingSystem.prototype.removeUser = function (guildId, userId) {
643
+ return __awaiter(this, void 0, void 0, function () {
644
+ var search, deleteUser, success, error_13;
645
+ return __generator(this, function (_a) {
646
+ switch (_a.label) {
647
+ case 0:
648
+ _a.trys.push([0, 3, , 4]);
649
+ if (!guildId) {
650
+ throw new Error("Error: GuildId isn't provided. Please use removeUser(guildId, userId).");
651
+ }
652
+ if (!userId) {
653
+ throw new Error("Error: UserId isn't provided. Please use removeUser(guildId, userId).");
654
+ }
655
+ return [4 /*yield*/, (0, utils_1.find)(this.levelsCollection, { guildId: guildId, userId: userId })];
656
+ case 1:
657
+ search = _a.sent();
658
+ if (!search) {
659
+ return [2 /*return*/, 'This user has no leveling data'];
660
+ }
661
+ return [4 /*yield*/, (0, utils_1.remove)(this.levelsCollection, { guildId: guildId, userId: userId })];
662
+ case 2:
663
+ deleteUser = _a.sent();
664
+ success = {
665
+ message: 'User removed successfully',
666
+ results: deleteUser,
667
+ };
668
+ return [2 /*return*/, success];
669
+ case 3:
670
+ error_13 = _a.sent();
671
+ console.error('Error while removing user from data due to:', error_13.message);
672
+ throw new Error("Couldn't remove user from data.");
673
+ case 4: return [2 /*return*/];
674
+ }
675
+ });
676
+ });
677
+ };
678
+ LevelingSystem.prototype.liveServerLeaderboard = function (context, guildId, channelId, timer, version, colorHex) {
679
+ if (timer === void 0) { timer = 10000; }
680
+ if (version === void 0) { version = 1; }
681
+ return __awaiter(this, void 0, void 0, function () {
682
+ var fetchServer, existingConfig, card, channel, liveLeaderboardMessageId, existingMessage, _a, newMessage, error_14;
683
+ var _this = this;
684
+ return __generator(this, function (_b) {
685
+ switch (_b.label) {
686
+ case 0:
687
+ _b.trys.push([0, 15, , 16]);
688
+ if (!guildId) {
689
+ throw new Error("Error: GuildId isn't provided. Please use liveServerLeaderboard(client, guildId, channelId).");
690
+ }
691
+ if (!channelId) {
692
+ throw new Error("Error: ChannelId isn't provided. Please use liveServerLeaderboard(client, guildId, channelId).");
693
+ }
694
+ return [4 /*yield*/, (0, utils_1.find)(this.configCollection, { guildId: guildId })];
695
+ case 1:
696
+ fetchServer = _b.sent();
697
+ if (!fetchServer) {
698
+ return [2 /*return*/, "This server has no leveling system"];
699
+ }
700
+ return [4 /*yield*/, (0, utils_1.find)('liveLeaderBoard', { guildId: guildId, channelId: channelId })];
701
+ case 2:
702
+ existingConfig = _b.sent();
703
+ return [4 /*yield*/, (0, utils_1.updateData)('liveLeaderBoard', { guildId: guildId, channelId: channelId }, { $set: { guildId: guildId, channelId: channelId, version: version } })];
704
+ case 3:
705
+ _b.sent();
706
+ return [4 /*yield*/, this.serverLeaderBoardCard(context.client, guildId, version, colorHex)];
707
+ case 4:
708
+ card = _b.sent();
709
+ channel = context.client.channels.cache.get(channelId);
710
+ if (!channel) return [3 /*break*/, 13];
711
+ liveLeaderboardMessageId = existingConfig === null || existingConfig === void 0 ? void 0 : existingConfig.messageId;
712
+ if (!liveLeaderboardMessageId) return [3 /*break*/, 6];
713
+ return [4 /*yield*/, channel.messages.fetch(liveLeaderboardMessageId).catch(function () { return null; })];
714
+ case 5:
715
+ _a = _b.sent();
716
+ return [3 /*break*/, 7];
717
+ case 6:
718
+ _a = null;
719
+ _b.label = 7;
720
+ case 7:
721
+ existingMessage = _a;
722
+ if (!existingMessage) return [3 /*break*/, 9];
723
+ return [4 /*yield*/, existingMessage.edit({ content: '# LIVE SERVER LEADERBOARD.', files: [card] })];
724
+ case 8:
725
+ _b.sent();
726
+ return [3 /*break*/, 12];
727
+ case 9: return [4 /*yield*/, channel.send({ content: '# LIVE SERVER LEADERBOARD.', files: [card] })];
728
+ case 10:
729
+ newMessage = _b.sent();
730
+ return [4 /*yield*/, (0, utils_1.updateData)('liveLeaderBoard', { guildId: guildId, channelId: channelId }, { $set: { messageId: newMessage.id } })];
731
+ case 11:
732
+ _b.sent();
733
+ _b.label = 12;
734
+ case 12: return [3 /*break*/, 14];
735
+ case 13:
736
+ console.error('Channel not found');
737
+ _b.label = 14;
738
+ case 14:
739
+ setTimeout(function () {
740
+ _this.liveServerLeaderboard(context, guildId, channelId, timer, version, colorHex);
741
+ }, timer);
742
+ return [3 /*break*/, 16];
743
+ case 15:
744
+ error_14 = _b.sent();
745
+ console.error('Error:', error_14.message);
746
+ return [3 /*break*/, 16];
747
+ case 16: return [2 /*return*/];
748
+ }
749
+ });
750
+ });
751
+ };
752
+ return LevelingSystem;
753
+ }(events_1.EventEmitter));
754
+ exports.LevelingSystem = LevelingSystem;