simply-xp 1.3.7 → 2.0.0-beta.0-fix.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FUNDING.yml +2 -2
- package/README.md +73 -43
- package/lib/src/add.d.ts +35 -0
- package/lib/src/add.js +23 -0
- package/lib/src/cards.d.ts +160 -0
- package/lib/src/cards.js +35 -0
- package/lib/src/charts.d.ts +28 -0
- package/lib/src/charts.js +10 -0
- package/lib/src/connect.d.ts +29 -0
- package/lib/src/connect.js +43 -0
- package/lib/src/create.d.ts +12 -0
- package/lib/src/create.js +12 -0
- package/lib/src/fetch.d.ts +12 -0
- package/lib/src/fetch.js +11 -0
- package/lib/src/fonts/Baloo2-ExtraBold.woff2 +0 -0
- package/lib/src/functions/database.d.ts +164 -0
- package/lib/src/functions/database.js +78 -0
- package/lib/src/functions/https.d.ts +26 -0
- package/lib/src/functions/https.js +15 -0
- package/lib/src/functions/utilities.d.ts +82 -0
- package/lib/src/functions/utilities.js +43 -0
- package/lib/src/functions/xplogs.d.ts +81 -0
- package/lib/src/functions/xplogs.js +15 -0
- package/lib/src/leaderboard.d.ts +11 -0
- package/lib/src/leaderboard.js +10 -0
- package/lib/src/migrate.d.ts +27 -0
- package/lib/src/migrate.js +19 -0
- package/lib/src/remove.d.ts +29 -0
- package/lib/src/remove.js +23 -0
- package/lib/src/reset.d.ts +12 -0
- package/lib/src/reset.js +12 -0
- package/lib/src/roleSetup.d.ts +78 -0
- package/lib/src/roleSetup.js +47 -0
- package/lib/src/set.d.ts +26 -0
- package/lib/src/set.js +23 -0
- package/lib/xp.d.ts +62 -0
- package/lib/xp.js +56 -0
- package/package.json +49 -35
- package/index.d.ts +0 -108
- package/simplyxp.js +0 -33
- package/src/Fonts/Baloo-Regular.ttf +0 -0
- package/src/addLevel.js +0 -66
- package/src/addXP.js +0 -104
- package/src/charts.js +0 -92
- package/src/connect.js +0 -21
- package/src/create.js +0 -28
- package/src/fetch.js +0 -74
- package/src/leaderboard.js +0 -51
- package/src/lvlRole.js +0 -53
- package/src/models/level.js +0 -10
- package/src/models/lvlrole.js +0 -8
- package/src/rank.js +0 -295
- package/src/reset.js +0 -22
- package/src/roleSetup.js +0 -121
- package/src/setLevel.js +0 -42
- package/src/setXP.js +0 -23
package/FUNDING.yml
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
github: Rahuletto
|
|
2
|
-
patreon:
|
|
3
|
-
tidelift: npm/simply-xp
|
|
2
|
+
patreon: abadima
|
|
3
|
+
tidelift: npm/simply-xp
|
package/README.md
CHANGED
|
@@ -1,58 +1,88 @@
|
|
|
1
|
-
<
|
|
1
|
+
<div class="Heading" style="text-align: center;">
|
|
2
|
+
<img src="https://i.ibb.co/cCKJ9FS/simplyxp.png" width="320" height="125" alt="XP Logo">
|
|
2
3
|
|
|
3
|
-
<h2
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
<h2>We have levelling! - You handle the rest.</h2>
|
|
5
|
+
<h3>Made by Abadima</h3>
|
|
6
|
+
</div>
|
|
6
7
|
|
|
7
8
|
<br>
|
|
8
|
-
<
|
|
9
|
-
<a href="https://www.npmjs.com/package/simply-xp"><img src="https://img.shields.io/npm/v/simply-xp.svg?style=flat-square" /></a>
|
|
10
|
-
<a href="https://www.npmjs.com/package/simply-xp"><img src="https://img.shields.io/npm/dt/simply-xp?style=flat-square" /></a><br>
|
|
11
|
-
<a href="https://www.npmjs.com/package/simply-xp"><img src="https://nodei.co/npm/simply-xp.png?downloadRank=true&downloads=true&downloadRank=true&stars=true" /></a><br>
|
|
12
|
-
<a href="https://discord.gg/3JzDV9T5Fn"><img src="https://invidget.switchblade.xyz/3JzDV9T5Fn" /></a>
|
|
13
|
-
</p>
|
|
9
|
+
<div class="badges" style="text-align: center;">
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
[](https://www.npmjs.com/package/simply-xp)
|
|
12
|
+
[](https://www.npmjs.com/package/simply-xp)
|
|
13
|
+
[](https://www.codefactor.io/repository/github/abadima/simply-xp)
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
[](https://simplyxp.js.org/docs/next/intro/)
|
|
16
|
+
[](https://discord.gg/hjhnjYJNHX)
|
|
17
|
+
</div>
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
(or)
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
yarn add simply-xp
|
|
27
|
-
```
|
|
19
|
+
---
|
|
20
|
+
> CREDITS TO [RAHULETTO](https://github.com/rahuletto) FOR SIMPLY-XP **VERSION 1**
|
|
21
|
+
---
|
|
28
22
|
|
|
29
23
|
<br>
|
|
30
24
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- Fixed Various Bugs
|
|
34
|
-
- Updated `Chart.js`
|
|
35
|
-
- D.JS v14 Support
|
|
36
|
-
- Patched v1.3.5 Bugs
|
|
25
|
+
## 🖥️ <b>[DEV] Installation</b>
|
|
37
26
|
|
|
27
|
+
```shell
|
|
28
|
+
npm install simply-xp@beta
|
|
29
|
+
```
|
|
38
30
|
|
|
39
|
-
|
|
31
|
+
```shell
|
|
32
|
+
pnpm install simply-xp@beta
|
|
33
|
+
```
|
|
40
34
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
- Beginner Friendly
|
|
45
|
-
- Easier than other XP Systems
|
|
46
|
-
- Inbuilt Auto Roles system
|
|
47
|
-
- Flexible and simple at the same time
|
|
35
|
+
```shell
|
|
36
|
+
yarn add simply-xp@beta
|
|
37
|
+
```
|
|
48
38
|
|
|
49
39
|
<br>
|
|
50
40
|
|
|
51
|
-
##
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
## ✅ V2 Additions
|
|
42
|
+
|
|
43
|
+
- Add `auto_create`, `auto_clean`, `debug`, and `xp_rate` options to `connect()`.
|
|
44
|
+
- Add `compareCard()`
|
|
45
|
+
- Add `convertFrom()`
|
|
46
|
+
- Add `db` class for extended database functionality
|
|
47
|
+
- Add `https()`
|
|
48
|
+
- Add `leaderboardCard()`
|
|
49
|
+
- Add `migrate` class
|
|
50
|
+
- Add `SQLite` Support
|
|
51
|
+
- Add `roleSetup.getRoles()`
|
|
52
|
+
- Add `registerPlugins()`
|
|
53
|
+
- Add `removeLevel()` and `removeXP()`.
|
|
54
|
+
- Add `roleSetup.getRoles()`
|
|
55
|
+
- Add `updateOptions()`
|
|
56
|
+
- Add `xp_rate` Support For Unique Level Rates!
|
|
57
|
+
|
|
58
|
+
## 🎉 V2 Changes
|
|
59
|
+
|
|
60
|
+
- All functions returning either `UserResult` or `LevelRoleResult` now includes `lastUpdated` property.
|
|
61
|
+
- Better Performance & Reduced RAM overhead.
|
|
62
|
+
- Better Code Quality (EsLint)
|
|
63
|
+
- Complete & Revamped Documentation
|
|
64
|
+
- Complete TypeScript Rewrite
|
|
65
|
+
- New Fonts
|
|
66
|
+
- Reduced Package Size!
|
|
67
|
+
- Renewed Logging System (`XpLog`)
|
|
68
|
+
- Deleted `chart.js` dependency
|
|
69
|
+
- `addLevel(), addXP(), setLevel(), setXP()` now has a `username` parameter, to automatically create the user if it doesn't exist.
|
|
70
|
+
- `fetch()` now also returns `position`, and accepts `username` parameter
|
|
71
|
+
- `leaderboard()` now supports Global Leaderboards, by simply not passing a `guildID` argument.
|
|
72
|
+
- `roleSetup` functions now accept RoleID arrays! `["role1", "role2", "role3"]`.
|
|
73
|
+
- `reset()` function now accepts `erase` and `username` as optional arguments
|
|
74
|
+
|
|
75
|
+
## ⚠️ V2 Breaking Changes
|
|
76
|
+
|
|
77
|
+
- All functions lose `client` and `message` arguments where applicable.
|
|
78
|
+
- `create()` Now requires `username` argument.
|
|
79
|
+
- `charts()` Requires new arguments, and is revamped.
|
|
80
|
+
- `rank()` is **removed**, use `rankCard()` instead. (REQUIRES NEW ARGUMENTS)
|
|
81
|
+
- `leaderboard()` replaces `userID` with `user` in `UserResult`.
|
|
82
|
+
- `client.on()` => `XpEvents.on()` (READ DOCS)
|
|
83
|
+
- `roleSetup` functions loses `client` argument.
|
|
84
|
+
- `roleSetup.fetch()` => `roleSetup.list()`
|
|
85
|
+
|
|
86
|
+
## ❌ V2 Removals
|
|
87
|
+
|
|
88
|
+
- `lvlRole()` is removed, use `roleSetup.getRoles()` instead. (READ DOCS)
|
package/lib/src/add.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { UserResult } from "./functions/database";
|
|
2
|
+
/**
|
|
3
|
+
* Add XP to a user
|
|
4
|
+
* @async
|
|
5
|
+
* @param {string} userId
|
|
6
|
+
* @param {string} guildId
|
|
7
|
+
* @param {number} level
|
|
8
|
+
* @param {string} username - Username to use if auto_create is enabled
|
|
9
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/addlevel
|
|
10
|
+
* @returns {Promise<UserResult>} - Object of user data on success
|
|
11
|
+
* @throws {XpFatal} - If parameters are not provided correctly
|
|
12
|
+
*/
|
|
13
|
+
export declare function addLevel(userId: string, guildId: string, level: number, username?: string): Promise<UserResult>;
|
|
14
|
+
/**
|
|
15
|
+
* XP Results
|
|
16
|
+
* @property {boolean} levelDifference - Whether the user has levelled up or not.
|
|
17
|
+
*/
|
|
18
|
+
export interface XPResult extends UserResult {
|
|
19
|
+
levelDifference: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Add XP to a user.
|
|
23
|
+
* @async
|
|
24
|
+
* @param {string} userId - The ID of the user.
|
|
25
|
+
* @param {string} guildId - The ID of the guild.
|
|
26
|
+
* @param {number | {min: number, max: number}} xpData - The XP to add, can be a number or an object with min and max properties.
|
|
27
|
+
* @param {string} username - Username to use if auto_create is enabled.
|
|
28
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/addxp
|
|
29
|
+
* @returns {Promise<XPResult>} - Object of user data on success.
|
|
30
|
+
* @throws {XpFatal} - If parameters are not provided correctly.
|
|
31
|
+
*/
|
|
32
|
+
export declare function addXP(userId: string, guildId: string, xpData: number | {
|
|
33
|
+
min: number;
|
|
34
|
+
max: number;
|
|
35
|
+
}, username?: string): Promise<XPResult>;
|
package/lib/src/add.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Add XP to a user
|
|
4
|
+
* @async
|
|
5
|
+
* @param {string} userId
|
|
6
|
+
* @param {string} guildId
|
|
7
|
+
* @param {number} level
|
|
8
|
+
* @param {string} username - Username to use if auto_create is enabled
|
|
9
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/addlevel
|
|
10
|
+
* @returns {Promise<UserResult>} - Object of user data on success
|
|
11
|
+
* @throws {XpFatal} - If parameters are not provided correctly
|
|
12
|
+
*/async function addLevel(e,a,t,l){if(!e)throw new xplogs_1.XpFatal({function:"addLevel()",message:"User ID was not provided"});if(!a)throw new xplogs_1.XpFatal({function:"addLevel()",message:"Guild ID was not provided"});if(isNaN(t))throw new xplogs_1.XpFatal({function:"addLevel()",message:"Level was not provided"});var o=await database_1.db.findOne({collection:"simply-xps",data:{user:e,guild:a}});if(o)return database_1.db.updateOne({collection:"simply-xps",data:{user:e,guild:a}},{collection:"simply-xps",data:{name:l||o?.name||e,user:e,guild:a,level:o.level+t,xp:(0,xp_1.convertFrom)(t+o.level),xp_rate:xp_1.xp.xp_rate}});if(xp_1.xp.auto_create&&l)return database_1.db.createOne({collection:"simply-xps",data:{guild:a,user:e,name:l,level:t,xp:(0,xp_1.convertFrom)(t),xp_rate:xp_1.xp.xp_rate}});throw new xplogs_1.XpFatal({function:"addLevel()",message:"User does not exist"})}
|
|
13
|
+
/**
|
|
14
|
+
* Add XP to a user.
|
|
15
|
+
* @async
|
|
16
|
+
* @param {string} userId - The ID of the user.
|
|
17
|
+
* @param {string} guildId - The ID of the guild.
|
|
18
|
+
* @param {number | {min: number, max: number}} xpData - The XP to add, can be a number or an object with min and max properties.
|
|
19
|
+
* @param {string} username - Username to use if auto_create is enabled.
|
|
20
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/addxp
|
|
21
|
+
* @returns {Promise<XPResult>} - Object of user data on success.
|
|
22
|
+
* @throws {XpFatal} - If parameters are not provided correctly.
|
|
23
|
+
*/async function addXP(e,a,t,l){var o;if(!("number"==typeof t||"object"==typeof xp_1.xp&&t.min&&t.max))throw new xplogs_1.XpFatal({function:"addXP()",message:"XP is not a number or object, make sure you are using the correct syntax"});if("object"==typeof t&&(t=Math.floor(Math.random()*(t.max-t.min)+t.min)),!e)throw new xplogs_1.XpFatal({function:"addXP()",message:"User ID was not provided"});if(!a)throw new xplogs_1.XpFatal({function:"addXP()",message:"Guild ID was not provided"});let s;if(o=await database_1.db.findOne({collection:"simply-xps",data:{user:e,guild:a}}))s=await database_1.db.updateOne({collection:"simply-xps",data:{user:e,guild:a}},{collection:"simply-xps",data:{user:e,guild:a,name:l||o?.name||e,level:(0,xp_1.convertFrom)(o.xp+t,"xp"),xp:o.xp+t,xp_rate:xp_1.xp.xp_rate}}).catch(e=>{throw new xplogs_1.XpFatal({function:"addXP()",message:e.stack})});else{if(!xp_1.xp.auto_create||!l)throw new xplogs_1.XpFatal({function:"addXP()",message:"User does not exist"});s=await database_1.db.createOne({collection:"simply-xps",data:{guild:a,user:e,name:l,level:(0,xp_1.convertFrom)(t,"xp"),xp:t,xp_rate:xp_1.xp.xp_rate}}).catch(e=>{throw new xplogs_1.XpFatal({function:"addXP()",message:e.stack})})}return l=xplogs_1.XpEvents.eventCallback,(t=o?.level&&s?.level?s.level!==o.level?s.level-o.level:0:0<s?.level?s.level:0)<0&&l?.levelDown&&"function"==typeof l.levelDown&&l.levelDown(s,await xp_1.roleSetup.getRoles(e,a,{includeNextRoles:!0})),0<t&&l?.levelUp&&"function"==typeof l.levelUp&&l.levelUp(s,await xp_1.roleSetup.getRoles(e,a)),{...s,levelDifference:t}}Object.defineProperty(exports,"__esModule",{value:!0}),exports.addXP=exports.addLevel=void 0;const xplogs_1=require("./functions/xplogs"),database_1=require("./functions/database"),xp_1=require("../xp");exports.addLevel=addLevel,exports.addXP=addXP;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { SKRSContext2D } from "@napi-rs/canvas";
|
|
3
|
+
import { User } from "../xp";
|
|
4
|
+
export type CompareCardLocales = {
|
|
5
|
+
level?: string;
|
|
6
|
+
versus?: string;
|
|
7
|
+
};
|
|
8
|
+
type HexColor = `#${string}` | `0x${string}`;
|
|
9
|
+
/**
|
|
10
|
+
* @property {URL} background - Background image URL
|
|
11
|
+
* @property {HexColor} color - Avatar border color
|
|
12
|
+
* @property {HexColor} centerBar - Center bar color
|
|
13
|
+
* @property {HexColor} centerBarBg - Center bar background color
|
|
14
|
+
* @property {string} font - ABSOLUTE FILE PATH
|
|
15
|
+
* @property {boolean} light - Use light theme
|
|
16
|
+
*/
|
|
17
|
+
export interface CompareCardOptions {
|
|
18
|
+
background?: URL;
|
|
19
|
+
color?: HexColor;
|
|
20
|
+
centerBar?: HexColor;
|
|
21
|
+
centerBarBg?: HexColor;
|
|
22
|
+
fallbackFont?: string;
|
|
23
|
+
font?: string;
|
|
24
|
+
light?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export type LeaderboardCardLocales = {
|
|
27
|
+
level?: string;
|
|
28
|
+
members?: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* @property {[HexColor, HexColor]} artworkColors - Gradient colors
|
|
32
|
+
* @property {URL} artworkImage
|
|
33
|
+
* @property {[HexColor, HexColor]} borderColors - Gradient colors
|
|
34
|
+
* @property {HexColor} backgroundColor
|
|
35
|
+
* @property {URL} backgroundImage
|
|
36
|
+
* @property {string} primaryFont - ABSOLUTE FILE PATH
|
|
37
|
+
* @property {boolean} light - Use light theme
|
|
38
|
+
* @property {[HexColor, HexColor]} rowColors - Even & Odd row colors
|
|
39
|
+
* @property {number} rowOpacity
|
|
40
|
+
* @property {string} secondaryFont - ABSOLUTE FILE PATH
|
|
41
|
+
*/
|
|
42
|
+
export interface LeaderboardCardOptions {
|
|
43
|
+
artworkColors?: [HexColor, HexColor];
|
|
44
|
+
artworkImage?: URL;
|
|
45
|
+
borderColors?: [HexColor, HexColor];
|
|
46
|
+
backgroundColor?: HexColor;
|
|
47
|
+
backgroundImage?: URL;
|
|
48
|
+
fallbackFont?: string;
|
|
49
|
+
light?: boolean;
|
|
50
|
+
primaryFont?: string;
|
|
51
|
+
rowColors?: [HexColor, HexColor];
|
|
52
|
+
rowOpacity?: number;
|
|
53
|
+
secondaryFont?: string;
|
|
54
|
+
}
|
|
55
|
+
export type RankCardLocales = {
|
|
56
|
+
level?: string;
|
|
57
|
+
next_level?: string;
|
|
58
|
+
xp?: string;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* @property {URL} background - Background image URL
|
|
62
|
+
* @property {HexColor} color - Avatar border color
|
|
63
|
+
* @property {boolean} legacy - Use legacy card design
|
|
64
|
+
* @property {HexColor} lvlbar
|
|
65
|
+
* @property {HexColor} lvlbarBg
|
|
66
|
+
* @property {string} font - ABSOLUTE FILE PATH
|
|
67
|
+
*/
|
|
68
|
+
export interface RankCardOptions {
|
|
69
|
+
background?: URL;
|
|
70
|
+
color?: HexColor;
|
|
71
|
+
legacy?: boolean;
|
|
72
|
+
light?: boolean;
|
|
73
|
+
lvlbar?: HexColor;
|
|
74
|
+
lvlbarBg?: HexColor;
|
|
75
|
+
fallbackFont?: string;
|
|
76
|
+
font?: string;
|
|
77
|
+
}
|
|
78
|
+
export type CardUserOptions = {
|
|
79
|
+
id: string;
|
|
80
|
+
username: string;
|
|
81
|
+
avatarURL: string;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Generate a simple comparison card
|
|
85
|
+
* @async
|
|
86
|
+
* @param {{id: string, name: string}} guild - (id, name)
|
|
87
|
+
* @param {CardUserOptions} user1 - User 1
|
|
88
|
+
* @param {CardUserOptions} user2 - User 2
|
|
89
|
+
* @param {CompareCardOptions?} options - (background, color, legacy, lvlbar, lvlbarBg, font)
|
|
90
|
+
* @param {CompareCardLocales?} locales - [BETA] Translate the rank card
|
|
91
|
+
* @link `Documentation` https://simplyxp.js.org/docs/next/functions/compareCard
|
|
92
|
+
* @returns {Promise<{attachment: Buffer, description: string, name: string}>}
|
|
93
|
+
* @throws {XpFatal} - If parameters are not provided correctly or if the user is not found in the database
|
|
94
|
+
*/
|
|
95
|
+
export declare function compareCard(guild: {
|
|
96
|
+
id: string;
|
|
97
|
+
name: string;
|
|
98
|
+
}, user1: CardUserOptions, user2: CardUserOptions, options?: CompareCardOptions, locales?: CompareCardLocales): Promise<{
|
|
99
|
+
attachment: Buffer;
|
|
100
|
+
description: string;
|
|
101
|
+
name: string;
|
|
102
|
+
}>;
|
|
103
|
+
/**
|
|
104
|
+
* Generate a simple leaderboard card
|
|
105
|
+
* @async
|
|
106
|
+
* @param {Array<User>} data - Array of user data
|
|
107
|
+
* @param {LeaderboardCardOptions?} options - (artworkColor, artworkImage, light)
|
|
108
|
+
* @param {{name: string, imageURL: string, memberCount: number}?} guildInfo - Guild info
|
|
109
|
+
* @param {LeaderboardCardLocales?} locales - Locales
|
|
110
|
+
* @link `Documentation` https://simplyxp.js.org/docs/next/functions/leaderboard
|
|
111
|
+
* @returns {Promise<{attachment: Buffer, description: string, name: string}>}
|
|
112
|
+
* @throws {XpFatal} - If parameters are not provided correctly
|
|
113
|
+
*/
|
|
114
|
+
export declare function leaderboardCard(data: Array<User>, options?: LeaderboardCardOptions, guildInfo?: {
|
|
115
|
+
name: string;
|
|
116
|
+
imageURL: string;
|
|
117
|
+
memberCount?: number;
|
|
118
|
+
}, locales?: LeaderboardCardLocales): Promise<{
|
|
119
|
+
attachment: Buffer;
|
|
120
|
+
description: string;
|
|
121
|
+
name: string;
|
|
122
|
+
}>;
|
|
123
|
+
/**
|
|
124
|
+
* Generate a simple user rank card
|
|
125
|
+
* @async
|
|
126
|
+
* @param {{id: string, name: string}} guild - (id, name)
|
|
127
|
+
* @param {CardUserOptions} user - (id, username, avatarURL)
|
|
128
|
+
* @param {RankCardOptions?} options - (background, color, legacy, lvlbar, lvlbarBg, font)
|
|
129
|
+
* @param {RankCardLocales?} locales - [BETA] Translate the rank card
|
|
130
|
+
* @link `Documentation` https://simplyxp.js.org/docs/next/functions/rankCard
|
|
131
|
+
* @returns {Promise<{attachment: Buffer, description: string, name: string}>}
|
|
132
|
+
* @throws {XpFatal} - If parameters are not provided correctly
|
|
133
|
+
*/
|
|
134
|
+
export declare function rankCard(guild: {
|
|
135
|
+
id: string;
|
|
136
|
+
name: string;
|
|
137
|
+
}, user: CardUserOptions, options?: RankCardOptions, locales?: RankCardLocales): Promise<{
|
|
138
|
+
attachment: Buffer;
|
|
139
|
+
description: string;
|
|
140
|
+
name: string;
|
|
141
|
+
}>;
|
|
142
|
+
/**
|
|
143
|
+
* @private
|
|
144
|
+
*/
|
|
145
|
+
export declare function RoundedBox(ctx: SKRSContext2D, x: number, y: number, width: number, height: number, radius: number, options?: {
|
|
146
|
+
clip?: boolean;
|
|
147
|
+
fill?: {
|
|
148
|
+
color: string;
|
|
149
|
+
alpha?: number;
|
|
150
|
+
};
|
|
151
|
+
roundCorners?: {
|
|
152
|
+
top?: boolean;
|
|
153
|
+
bottom?: boolean;
|
|
154
|
+
};
|
|
155
|
+
stroke?: {
|
|
156
|
+
color: string;
|
|
157
|
+
width: number;
|
|
158
|
+
};
|
|
159
|
+
}): void;
|
|
160
|
+
export {};
|
package/lib/src/cards.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Generate a simple comparison card
|
|
4
|
+
* @async
|
|
5
|
+
* @param {{id: string, name: string}} guild - (id, name)
|
|
6
|
+
* @param {CardUserOptions} user1 - User 1
|
|
7
|
+
* @param {CardUserOptions} user2 - User 2
|
|
8
|
+
* @param {CompareCardOptions?} options - (background, color, legacy, lvlbar, lvlbarBg, font)
|
|
9
|
+
* @param {CompareCardLocales?} locales - [BETA] Translate the rank card
|
|
10
|
+
* @link `Documentation` https://simplyxp.js.org/docs/next/functions/compareCard
|
|
11
|
+
* @returns {Promise<{attachment: Buffer, description: string, name: string}>}
|
|
12
|
+
* @throws {XpFatal} - If parameters are not provided correctly or if the user is not found in the database
|
|
13
|
+
*/async function compareCard(e,a,l,o={},t={}){var r,n,i,s,f,d,c;if(!e?.id||!e?.name)throw new xplogs_1.XpFatal({function:"compareCard()",message:"Please provide a guild"});if(!(a?.id&&a?.username&&l?.id&&l?.username))throw new xplogs_1.XpFatal({function:"compareCard()",message:"Please provide two valid users!"});if(!a?.avatarURL.endsWith(".png")&&!a.avatarURL.endsWith(".jpg")&&!a.avatarURL.endsWith(".webp"))throw new xplogs_1.XpFatal({function:"compareCard()",message:"[USER 1] Avatar image must be a png, jpg, or webp"});await(0,xp_1.registerFont)(o?.font||(0,path_1.join)(__dirname,"fonts","Baloo2-ExtraBold.woff2"),"Baloo"),o?.fallbackFont&&await(0,xp_1.registerFont)(o.fallbackFont,"FallbackFont"),t?.level||(t.level="Level"),t?.versus||(t.versus="vs"),s=await(0,canvas_1.loadImage)(o?.background||"https://i.ibb.co/WnfXZjc/clouds.jpg").catch(()=>{throw new xplogs_1.XpFatal({function:"compareCard()",message:"Unable to load background image, is it valid and reachable?"})}),r=await(0,canvas_1.loadImage)(a.avatarURL).catch(()=>{throw new xplogs_1.XpFatal({function:"compareCard()",message:"[USER 1] Unable to load user's AvatarURL, is it valid and reachable?"})}),n=await(0,canvas_1.loadImage)(l.avatarURL).catch(()=>{throw new xplogs_1.XpFatal({function:"compareCard()",message:"[USER 2] Unable to load user's AvatarURL, is it valid and reachable?"})});let p=await xp_1.db.findOne({collection:"simply-xps",data:{guild:e.id,user:a.id}});if(!p){if(!xp_1.xp.auto_create||!l?.username)throw new xplogs_1.XpFatal({function:"compareCard()",message:"[USER 1] User not found in database"});p=await(0,xp_1.create)(a.id,e.id,a.username)}let g=await xp_1.db.findOne({collection:"simply-xps",data:{guild:e.id,user:l.id}});if(!g){if(!xp_1.xp.auto_create||!l?.username)throw new xplogs_1.XpFatal({function:"compareCard()",message:"[USER 2] User not found in database"});g=await(0,xp_1.create)(l.id,e.id,l.username)}return RoundedBox(i=(e=(0,canvas_1.createCanvas)(1080,400)).getContext("2d"),0,0,e.width,e.height,25),i.clip(),i.fillStyle=o?.light?"#ffffff":"#000000",i.fill(),i.globalAlpha=.6,i.drawImage(s,-5,0,1090,400),i.restore(),i.globalAlpha=1,s=o?.color||o?.light?"rgba(0,0,0,0.5)":"rgba(255,255,255,0.5)",f=o?.centerBarBg||o?.light?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.4)",d=t.level+(" "+shortener(p.level,!0)),c=t.level+(" "+shortener(g.level,!0)),i.save(),i.textAlign="center",i.fillStyle="#ffffff",i.shadowColor="#000000",i.shadowBlur=6,i.shadowOffsetX=1,i.shadowOffsetY=1,i.font="40px Baloo, FallbackFont",i.fillText(`${a.username} ${t.versus} `+l.username,540,60),i.restore(),i.save(),i.beginPath(),i.arc(160,200,105,0,2*Math.PI,!0),i.closePath(),i.strokeStyle=s,i.lineWidth=5,i.stroke(),i.beginPath(),i.arc(160,200,100,0,2*Math.PI,!0),i.closePath(),i.clip(),i.fillStyle=s,i.fill(),i.drawImage(r,50,90,220,220),i.restore(),i.save(),i.beginPath(),i.arc(920,200,105,0,2*Math.PI,!0),i.closePath(),i.strokeStyle=s,i.lineWidth=5,i.stroke(),i.beginPath(),i.arc(920,200,100,0,2*Math.PI,!0),i.closePath(),i.clip(),i.fillStyle=s,i.fill(),i.drawImage(n,810,90,220,220),i.restore(),i.save(),i.globalAlpha=1,i.fillStyle="#ffffff",i.textAlign="center",i.font="25px Baloo, FallbackFont",o?.light&&(i.shadowColor="#000000",i.shadowBlur=5,i.shadowOffsetX=1,i.shadowOffsetY=1),i.fillText(d,160,350),i.fillText(c,920,350),i.restore(),i.save(),i.globalAlpha=1,RoundedBox(i,265,330,540,25,10),i.clip(),i.fillStyle=f,i.fill(),i.fillStyle="#ffffff",i.textAlign="center",i.font="22px Baloo, FallbackFont",i.fillText((p.xp>g.xp?"+":"-")+Math.abs(p.level-g.level),540,350),xp_1.xp.auto_clean&&(0,xp_1.clean)(),{attachment:e.toBuffer("image/png"),description:"Simply-XP Comparison Card",name:"compareCard.png"}}
|
|
14
|
+
/**
|
|
15
|
+
* Generate a simple leaderboard card
|
|
16
|
+
* @async
|
|
17
|
+
* @param {Array<User>} data - Array of user data
|
|
18
|
+
* @param {LeaderboardCardOptions?} options - (artworkColor, artworkImage, light)
|
|
19
|
+
* @param {{name: string, imageURL: string, memberCount: number}?} guildInfo - Guild info
|
|
20
|
+
* @param {LeaderboardCardLocales?} locales - Locales
|
|
21
|
+
* @link `Documentation` https://simplyxp.js.org/docs/next/functions/leaderboard
|
|
22
|
+
* @returns {Promise<{attachment: Buffer, description: string, name: string}>}
|
|
23
|
+
* @throws {XpFatal} - If parameters are not provided correctly
|
|
24
|
+
*/async function leaderboardCard(a,e={},l,o={}){var t,r,n,i,s,f;if(!a||a.length<1)throw new xplogs_1.XpFatal({function:"leaderboardCard()",message:"There must be at least 1 user in the data array"});let d=void 0,c=void 0,p,g=(e?.artworkImage&&(d=await(0,canvas_1.loadImage)(e.artworkImage).catch(()=>{throw new xplogs_1.XpFatal({function:"leaderboardCard()",message:"Unable to load artwork image, is it valid?"})})),e?.backgroundImage&&(c=await(0,canvas_1.loadImage)(e.backgroundImage).catch(()=>{throw new xplogs_1.XpFatal({function:"leaderboardCard()",message:"Unable to load background image, is it valid?"})})),await(0,xp_1.registerFont)(e?.primaryFont||(0,path_1.join)(__dirname,"fonts","Baloo2-ExtraBold.woff2"),"Baloo"),e?.secondaryFont&&await(0,xp_1.registerFont)(e.secondaryFont,"SecondaryFont"),e?.fallbackFont&&await(0,xp_1.registerFont)(e.fallbackFont,"FallbackFont"),o.level||(o.level="LEVEL"),o.members||(o.members="Members"),a=a.slice(0,8),t=e?.secondaryFont?"SecondaryFont, FallbackFont":"Baloo, FallbackFont",p=e?.light?{artworkColors:e?.artworkColors||["#997fe1","#616bff"],backgroundColor:"#FFFFFF",borderColors:e?.borderColors||["#e0d440","#fffa6b"],evenColor:"#f0f0f0",oddColor:"#dcdcdc",primaryTextColor:"#000000",secondaryTextColor:"rgba(0,0,0,0.5)"}:{artworkColors:e?.artworkColors||["#6B46D4","#2e3cff"],backgroundColor:"#141414",borderColors:e?.borderColors||["#e0d440","#fffa6b"],evenColor:"#1e1e1e",oddColor:"#282828",primaryTextColor:"#ffffff",secondaryTextColor:"rgba(255,255,255,0.5)"},RoundedBox(n=(r=(0,canvas_1.createCanvas)(1350,1080)).getContext("2d"),0,0,r.width,r.height,20,{clip:!0}),(i=n.createLinearGradient(0,0,r.width,0)).addColorStop(.4,p.artworkColors[0]),i.addColorStop(1,p.artworkColors[1]),n.fillStyle=i,n.fillRect(0,0,r.width,220),d&&(n.fillStyle="#000000",n.fillRect(0,0,r.width,220),n.globalAlpha=.5,n.drawImage(d,0,0,r.width,220),n.globalAlpha=1),n.fillStyle=e.backgroundColor||p.backgroundColor,n.fillRect(0,220,r.width,1080),c&&(n.globalAlpha=.9,n.drawImage(c,0,220,r.width,1080),n.globalAlpha=1),l&&l?.imageURL&&l?.name&&(i=await(0,canvas_1.loadImage)(l.imageURL),n.save(),n.beginPath(),n.arc(150,110,90,0,2*Math.PI,!0),n.closePath(),n.clip(),n.drawImage(i,60,20,180,180),n.restore(),(i=n.createLinearGradient(0,0,0,220)).addColorStop(0,p.borderColors[0]),i.addColorStop(1,p.borderColors[1]),n.strokeStyle=i,n.lineWidth=8,n.beginPath(),n.arc(150,110,90,0,2*Math.PI,!0),n.stroke(),n.fillStyle=p.primaryTextColor,n.font="60px Baloo, FallbackFont",l?.memberCount?(n.fillText(l.name,270,110),n.fillStyle=p.secondaryTextColor,n.font="40px Baloo, FallbackFont",n.fillText(l.memberCount+" "+o.members,270,160)):n.fillText(l.name,270,130)),p.evenColor);s=e?.rowOpacity&&!isNaN(e?.rowOpacity)?e.rowOpacity:c?.5:1;for(let e=0;e<a.length;e++)f=300+90*e,n.globalAlpha=s,n.save(),1===a.length?RoundedBox(n,30,f,1290,90,20,{clip:!0,fill:{color:g}}):0===e?RoundedBox(n,30,f,1290,90,20,{clip:!0,fill:{color:g},roundCorners:{top:!0,bottom:!1}}):e===a.length-1?RoundedBox(n,30,f,1290,90,20,{clip:!0,fill:{color:g},roundCorners:{top:!1,bottom:!0}}):RoundedBox(n,30,f,1290,90,0,{fill:{color:g}}),n.restore(),n.globalAlpha=1,n.textAlign="left",n.font="30px "+t,n.fillStyle=p.secondaryTextColor,n.fillText(e+1+".",60,55+f),n.textAlign="left",n.font="40px "+t,n.fillStyle=p.primaryTextColor,n.fillText(a[e]?.name||a[e]?.user||"???",120,60+f),n.textAlign="right",n.font="30px "+t,n.fillStyle=p.primaryTextColor,n.fillText(shortener(a[e]?.level)||"???",1270,55+f),n.fillStyle=p.secondaryTextColor,n.fillText(o.level,1270-n.measureText(shortener(a[e]?.level)||"???").width-15,55+f),g=g===p.evenColor?p.oddColor:p.evenColor;return xp_1.xp.auto_clean&&(0,xp_1.clean)(),{attachment:r.toBuffer("image/png"),description:"Simply-XP Leaderboard Card",name:"leaderboard.png"}}
|
|
25
|
+
/**
|
|
26
|
+
* Generate a simple user rank card
|
|
27
|
+
* @async
|
|
28
|
+
* @param {{id: string, name: string}} guild - (id, name)
|
|
29
|
+
* @param {CardUserOptions} user - (id, username, avatarURL)
|
|
30
|
+
* @param {RankCardOptions?} options - (background, color, legacy, lvlbar, lvlbarBg, font)
|
|
31
|
+
* @param {RankCardLocales?} locales - [BETA] Translate the rank card
|
|
32
|
+
* @link `Documentation` https://simplyxp.js.org/docs/next/functions/rankCard
|
|
33
|
+
* @returns {Promise<{attachment: Buffer, description: string, name: string}>}
|
|
34
|
+
* @throws {XpFatal} - If parameters are not provided correctly
|
|
35
|
+
*/async function rankCard(e,a,l={},o={}){var t,r,n,i,s,f,d,c,p,g,h,x;if(!e)throw new xplogs_1.XpFatal({function:"rankCard()",message:"No Guild Provided"});if(!a)throw new xplogs_1.XpFatal({function:"rankCard()",message:"No User Provided"});if(o?.level||(o.level="Level"),o?.next_level||(o.next_level="Next Level"),o?.xp||(o.xp="XP"),xplogs_1.XpLog.debug("rankCard()",`${l?.legacy?"LEGACY":"MODERN"} ENABLED`),!a||!a.id||!a.username)throw new xplogs_1.XpFatal({function:"rankCard()",message:"Invalid User Provided, user must contain id, username, and avatarURL."});await(0,xp_1.registerFont)(l?.font||(0,path_1.join)(__dirname,"fonts","Baloo2-ExtraBold.woff2"),"Baloo"),l?.fallbackFont&&await(0,xp_1.registerFont)(l.fallbackFont,"FallbackFont"),i=await(0,canvas_1.loadImage)(l?.background||(l?.legacy?"https://i.ibb.co/dck2Tnt/rank-card.webp":"https://i.ibb.co/WnfXZjc/clouds.jpg")).catch(()=>{throw new xplogs_1.XpFatal({function:"rankCard()",message:"Unable to load background image, is it valid and reachable?"})}),t=await(0,canvas_1.loadImage)(a.avatarURL).catch(()=>{throw new xplogs_1.XpFatal({function:"rankCard()",message:"Unable to load user's AvatarURL, is it valid and reachable??"})});let b=await xp_1.db.findOne({collection:"simply-xps",data:{guild:e.id,user:a.id}});if(!b){if(!xp_1.xp.auto_create)throw new xplogs_1.XpFatal({function:"rankCard()",message:"User not found in database"});b=await(0,xp_1.create)(a.id,e.id,a.username)}return r=await xp_1.db.find({collection:"simply-xps",data:{guild:e.id}}),b.position=1+r.sort((e,a)=>a.xp-e.xp).findIndex(e=>e.user===a.id)||1,(n=(r=(0,canvas_1.createCanvas)(1080,400)).getContext("2d")).save(),RoundedBox(n,0,0,r.width,r.height,25),n.clip(),n.fillStyle=l?.light?"#ffffff":"#000000",n.fill(),n.globalAlpha=l?.legacy?.8:.6,n.drawImage(i,-5,0,1090,400),n.restore(),i=l?.color||(l?.legacy?"#9900ff":l?.light?"rgba(0,0,0,0.5)":"rgba(255,255,255,0.5)"),s=l?.lvlbar||"#ffffff",f=l?.lvlbarBg||l?.legacy?"#FFFFFF":l?.light?"rgba(0,0,0,0.2)":"rgba(255,255,255,0.2)",d=shortener(b.xp)+(" "+o.xp),c=o.level+(" "+shortener(b.level)),p="{current} / {needed}",g=(0,xp_1.convertFrom)(b.level+1),h=(0,xp_1.convertFrom)(b.level),h=100*(b.xp-h)/(g-h)*(l?.legacy?660:530)/100,x="326815959358898189"===b.user?"#ade6d8":1===b.position?"#ADD8E6":2===b.position?"#C0C0C0":3===b.position?"#CD7F32":"#ffffff",l?.legacy?(n.save(),n.globalAlpha=.4,n.fillStyle=l?.light?"#ffffff":"#000000",n.fillRect(40,0,240,r.height),n.restore(),n.save(),RoundedBox(n,70,30,180,180,50,{clip:!0,fill:{color:i}}),RoundedBox(n,75,35,170,170,50,{clip:!0}),n.drawImage(t,70,30,180,180),n.restore(),n.save(),RoundedBox(n,70,320,180,50,20,{clip:!0}),n.fillStyle=i,n.fillRect(70,320,180,50),n.fillStyle="#ffffff",dynamicFont(n,d,160,358,160,32),n.restore(),n.save(),RoundedBox(n,70,240,180,50,20,{clip:!0}),n.fillStyle=i,n.fillRect(70,240,180,50),n.fillStyle="#ffffff",n.textAlign="center",dynamicFont(n,c,160,278,160,32),n.restore(),n.save(),n.textAlign="left",n.fillStyle="#ffffff",n.shadowColor="#000000",n.shadowBlur=15,n.shadowOffsetX=1,n.shadowOffsetY=1,n.font="39px Baloo, FallbackFont",n.fillText(a.username,395,80),n.restore(),n.save(),n.textAlign="right",n.fillStyle="#ffffff",n.shadowColor="#000000",n.shadowBlur=15,n.shadowOffsetX=1,n.shadowOffsetY=1,n.font="55px Baloo, FallbackFont",n.fillText("#"+b.position,r.width-55,80),n.restore(),n.save(),RoundedBox(n,390,305,660,70,20,{clip:!0}),n.fillStyle="#ffffff",dynamicFont(n,e.name,720,355,700,45),n.globalAlpha=.2,n.fillRect(390,305,660,70),n.restore(),n.save(),RoundedBox(n,390,145,660,50,20,{clip:!0}),n.fillStyle=f,n.globalAlpha=.2,n.fillRect(390,145,660,50),n.restore(),n.save(),RoundedBox(n,390,145,h,50,20,{clip:!0}),n.fillStyle=s,n.globalAlpha=.5,n.fillRect(390,145,h,50),n.restore(),n.save(),n.textAlign="left",n.fillStyle="#ffffff",n.globalAlpha=.8,n.font="30px Baloo, FallbackFont",n.fillText(o.next_level+": "+shortener(g)+" "+o.xp,390,230),n.restore(),d=p.replace(/{needed}/g,shortener(g)).replace(/{current}/g,shortener(b.xp)),n.textAlign="center",n.fillStyle="#474747",n.globalAlpha=1,n.font="30px Baloo, FallbackFont",n.fillText(d,730,180)):(n.save(),n.textAlign="center",n.fillStyle="#ffffff",n.shadowColor="#000000",n.shadowBlur=5,n.shadowOffsetX=1,n.shadowOffsetY=1,n.font="40px Baloo, FallbackFont",n.fillText(a.username,540,80),n.restore(),n.save(),n.beginPath(),n.arc(160,200,105,0,2*Math.PI,!0),n.closePath(),n.lineWidth=5,n.strokeStyle=i,n.stroke(),n.beginPath(),n.arc(160,200,100,0,2*Math.PI,!0),n.closePath(),n.clip(),n.fillStyle=i,n.fill(),n.drawImage(t,50,90,220,220),n.restore(),n.save(),n.beginPath(),n.arc(230,130,30,0,2*Math.PI,!0),n.closePath(),n.strokeStyle=i,n.lineWidth=5,n.stroke(),n.beginPath(),n.arc(230,130,30,0,2*Math.PI,!0),n.closePath(),n.fillStyle=x,n.fill(),n.clip(),n.fillStyle="#000000",dynamicFont(n,shortener(b.position,!0),230,138,45,30),n.restore(),n.save(),n.fillStyle="#ffffff",l?.light&&(n.shadowColor="#000000",n.shadowBlur=5,n.shadowOffsetX=1,n.shadowOffsetY=1),n.textAlign="center",n.font="25px Baloo, FallbackFont",n.fillText(c,160,350),n.restore(),n.save(),RoundedBox(n,265,330,540,25,10,{clip:!0,fill:{color:f}}),RoundedBox(n,270,335,h,15,5,{clip:!0,fill:{color:s}}),n.restore(),n.save(),n.textAlign="center",n.fillStyle=l?.light?"rgba(0,0,0,0.6)":"rgba(255,255,255,0.6)",n.font="22px Baloo, FallbackFont",n.fillText(p.replace(/{needed}/g,shortener(g)).replace(/{current}/g,shortener(b.xp)),540,320),n.save(),n.fillStyle="#ffffff",n.textAlign="center",l?.light&&(n.shadowColor="#000000",n.shadowBlur=5,n.shadowOffsetX=1,n.shadowOffsetY=1),n.font="25px Baloo, FallbackFont",n.fillText(o.level+" "+shortener(b.level+1),920,350),n.restore()),xp_1.xp.auto_clean&&(0,xp_1.clean)(),{attachment:r.toBuffer("image/png"),description:"Simply-XP Rank Card",name:"rank.png"}}function RoundedBox(e,a,l,o,t,r,n){var i=n?.roundCorners||{top:!0,bottom:!0};e.beginPath(),e.moveTo(a+(i.top?r:0),l),e.lineTo(a+o-(i.top?r:0),l),i.top&&e.quadraticCurveTo(a+o,l,a+o,l+r),e.lineTo(a+o,l+t-(i.bottom?r:0)),i.bottom&&e.quadraticCurveTo(a+o,l+t,a+o-r,l+t),e.lineTo(a+(i.bottom?r:0),l+t),i.bottom&&e.quadraticCurveTo(a,l+t,a,l+t-r),e.lineTo(a,l+(i.top?r:0)),i.top&&e.quadraticCurveTo(a,l,a+r,l),e.closePath(),n?.fill&&(n?.clip&&e.clip(),n.fill?.color&&(e.fillStyle=n.fill.color),n.fill?.alpha&&(e.globalAlpha=n.fill.alpha),e.fillRect(a,l,o,t)),n?.stroke&&(n.stroke?.color&&(e.strokeStyle=n.stroke.color),n.stroke?.width&&(e.lineWidth=n.stroke.width),e.stroke()),n?.clip&&e.clip()}function shortener(e,a){let l="",o=0;if(!e||0===e)return"0";if(e>Number.MAX_SAFE_INTEGER)return"∞";for(;1e3<=e&&o<8;)e/=1e3,o++;switch(o){case 0:l="";break;case 1:l="K";break;case 2:l="M";break;case 3:l="B";break;case 4:l="T";break;case 5:l="Qa";break;case 6:l="Qi";break;default:l="S+"}return""+e.toFixed(0===o||a?0:2)+l}function dynamicFont(e,a,l,o,t,r){let n=r;for(;0<n&&(e.font=n+"px Baloo, FallbackFont",!(e.measureText(a).width<t));)n--;e.textAlign="center",e.fillText(a,l,o)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.RoundedBox=exports.rankCard=exports.leaderboardCard=exports.compareCard=void 0;const canvas_1=require("@napi-rs/canvas"),xp_1=require("../xp"),xplogs_1=require("./functions/xplogs"),path_1=require("path");exports.compareCard=compareCard,exports.leaderboardCard=leaderboardCard,exports.rankCard=rankCard,exports.RoundedBox=RoundedBox;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/**
|
|
3
|
+
* Chart options
|
|
4
|
+
* @property {string} font - Font of the chart
|
|
5
|
+
* @property {"blue" | "dark" | "discord" | "green" | "orange" | "red" | "space" | "yellow"} theme - Theme of the chart
|
|
6
|
+
* @property {number} limit - Limit of users to return (2-10)
|
|
7
|
+
*/
|
|
8
|
+
export interface ChartOptions {
|
|
9
|
+
fallbackFont?: string;
|
|
10
|
+
font?: string;
|
|
11
|
+
limit?: 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
|
|
12
|
+
theme?: "blue" | "dark" | "discord" | "green" | "orange" | "red" | "space" | "yellow";
|
|
13
|
+
type?: "bar" | "doughnut" | "pie";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a chart
|
|
17
|
+
* @async
|
|
18
|
+
* @param {string} guildId
|
|
19
|
+
* @param {ChartOptions?} options
|
|
20
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/charts
|
|
21
|
+
* @returns {Promise<{attachment: Buffer, description: string, name: string}>} Chart attachment
|
|
22
|
+
* @throws {XpFatal} If invalid parameters are provided, or if there are not enough users to create a chart
|
|
23
|
+
*/
|
|
24
|
+
export declare function charts(guildId: string, options?: ChartOptions): Promise<{
|
|
25
|
+
attachment: Buffer;
|
|
26
|
+
description: string;
|
|
27
|
+
name: string;
|
|
28
|
+
}>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a chart
|
|
4
|
+
* @async
|
|
5
|
+
* @param {string} guildId
|
|
6
|
+
* @param {ChartOptions?} options
|
|
7
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/charts
|
|
8
|
+
* @returns {Promise<{attachment: Buffer, description: string, name: string}>} Chart attachment
|
|
9
|
+
* @throws {XpFatal} If invalid parameters are provided, or if there are not enough users to create a chart
|
|
10
|
+
*/async function charts(e,r={}){var t,a,o,F,l,i,n,s,h;if(!e)throw new xplogs_1.XpFatal({function:"charts()",message:"No Guild ID Provided"});if(!r)throw new xplogs_1.XpFatal({function:"charts()",message:"No Options Provided"});r.theme&&["blue","dark","discord","green","orange","red","space","yellow"].includes(r.theme)||(xplogs_1.XpLog.warn("charts()","Invalid theme provided, defaulting to discord"),r.theme="discord"),r.type&&["bar","doughnut","pie"].includes(r.type)||(xplogs_1.XpLog.warn("charts()","Invalid type provided, defaulting to bar chart"),r.type="bar");let c;if((t=await(0,xp_1.leaderboard)(e,Math.min(Math.max(r?.limit||10,2),10)).catch(e=>{throw new xplogs_1.XpFatal({function:"charts()",message:e.message})})).length<2)throw new xplogs_1.XpFatal({function:"charts()",message:"Not enough users to create a chart"});switch(t.sort((e,t)=>t.position-e.position),await(0,xp_1.registerFont)(r?.font||(0,path_1.join)(__dirname,"fonts","Baloo2-ExtraBold.woff2"),"Baloo"),r.fallbackFont&&await(0,xp_1.registerFont)(r.fallbackFont,"FallbackFont"),r.theme){case"blue":c={background:"#1e1e3c",barColor:"#747fff",pieColors:["#747fff","#2832C2","#59788E","#00d2e7","#281E5D","#a9f5ff","#000e3f","#30edc2","#186c84","#0098ff"],textColor:"#FFFFFF"};break;case"dark":c={background:"#1e1e1e",barColor:"#747474",pieColors:["#1B1D1F","#454C53","#72787F","#999999","#9EA4AA","#CCCCCC","#C9CDD2","#DEDEDE","#E8EBED","#FFFFFF"],textColor:"#FFFFFF"};break;case"discord":c={background:"#36393f",barColor:"#5865F2",pieColors:["#5865F2","#57F287","#FEE75C","#EB459E","#ED4245","#FFFFFF","#000000","#FAA61A","#C04DF9","#00AAFF"],textColor:"#FFFFFF"};break;case"green":c={background:"#1e321e",barColor:"#74ff7f",pieColors:["#00FF00","#008000","#7FFF00","#32CD32","#228B22","#006400","#9ACD32","#00FA9A","#ADFF2F","#7CFC00"],textColor:"#FFFFFF"};break;case"orange":c={background:"#321e1e",barColor:"#ff9f74",pieColors:["#FF8C00","#FF5E0E","#FF4500","#FF6347","#E26310","#F5761A","#FD673A","#FFA500","#FF7F50","#FFD700"],textColor:"#FFFFFF"};break;case"red":c={background:"#321e1e",barColor:"#ff7474",pieColors:["#FF0000","#FF2400","#FF4500","#FF6347","#FF7F50","#FF8C00","#FFA07A","#FFA500","#FFC0CB","#FFD700"],textColor:"#FFFFFF"};break;case"space":c={background:"#001F3F",barColor:"#192E5B",pieColors:["#192E5B","#1F3F7F","#264FA3","#2C5FC7","#337FEA","#3D8FFF","#4D9FFF","#5DAFFF","#6DBFFF","#7DCFFF"],textColor:"#FFFFFF"};break;case"yellow":c={background:"#32321e",barColor:"#ffff74",pieColors:["#FFFD37","#FFEF00","#FDFF00","#DAA520","#F4C430","#E4D00A","#D2B55B","#FFFFE0","#FFFACD","#F5DEB3"],textColor:"#FFFFFF"}}const d=(0,canvas_1.createCanvas)(920,600),p=d.getContext("2d"),f=Math.max(...t.map(e=>e.level));if((0,cards_1.RoundedBox)(p,0,0,d.width,d.height,25,{clip:!0}),p.fillStyle=c.background,p.fillRect(0,0,d.width,d.height),"space"===r.theme){(e=p.createRadialGradient(d.width/2,d.height/2,1,d.width/2,d.height/2,Math.max(d.width,d.height))).addColorStop(0,"#000000"),e.addColorStop(1,"#001F3F"),p.fillStyle=e,p.fillRect(0,0,d.width,d.height),(e=p.createRadialGradient(150,150,10,150,150,100)).addColorStop(0,"#F2F2F2"),e.addColorStop(.8,"#D3D3D3"),e.addColorStop(1,"#001F3F"),p.fillStyle=e,p.beginPath(),p.arc(150,150,100,0,2*Math.PI),p.fill(),a=["#6B6B6B","#AA8F00","#473E83","#456579"];for(let e=0;e<a.length;e++)o=Math.random()*d.width,F=Math.random()*d.height,l=50*Math.random()+30,p.beginPath(),p.arc(o,F,l,0,2*Math.PI),p.fillStyle=a[e]||"#FFFFFF",p.fill();p.filter="blur(5px)",p.drawImage(d,0,0),p.filter="none";for(let e=0;e<100;e++)i=Math.random()*d.width,n=Math.random()*d.height,s=2*Math.random(),p.beginPath(),p.arc(i,n,s,0,2*Math.PI),p.fillStyle="#FFFFFF",p.fill()}let g=d.width-40,C=d.height-40;switch(r.type){case"bar":{h=p.measureText(f.toString()).width,g=d.width-h-100,C=d.height-140;const u=g/t.length-20,b=h+60,m=d.height-70;await Promise.all(t.map(async(e,t)=>{var a,o=(e.level===1/0?1:e.level/f)*C,t=b+t*(20+u),F=m-o,o=(p.save(),(0,cards_1.RoundedBox)(p,t,F,u,o,10,{clip:!0,fill:{color:c.barColor}}),p.restore(),t+u/2),t=(p.fillStyle=c.textColor,p.font="22px Baloo, FallbackFont",e.level.toString()),l=p.measureText(t).width,F=F-10,t=(p.fillText(t,o-l/2,F),e?.name||e.user),l=p.measureText(t).width,F=(p.font=Math.min(Math.floor(u/l*16),18)+"px Baloo, FallbackFont",l=p.measureText(t).width,30+m);"space"===r.theme&&(a=o-(e=l+20)/2,p.fillStyle="rgba(0, 0, 0, 0.5)",p.fillRect(a,F-18,e,25)),p.fillStyle=c.textColor,p.fillText(t,o-l/2,F)}))}break;case"doughnut":{const x=t.reduce((e,t)=>e+t.level,0),w=Math.min(g,C)/3,D=.6*w;let a=-Math.PI/2;const v=d.width/2,y=d.height/2;await Promise.all(t.map(async(e,t)=>{e=a+2*Math.PI*(e.level/x),p.fillStyle=c.pieColors[t%c.pieColors.length]||"#FFFFFF",p.beginPath(),p.moveTo(v+w*Math.cos(a),y+w*Math.sin(a)),p.arc(v,y,w,a,e),p.lineTo(v+D*Math.cos(e),y+D*Math.sin(e)),p.arc(v,y,D,e,a,!0),p.closePath(),p.fill(),a=e}))}break;case"pie":{const k=t.reduce((e,t)=>e+t.level,0),A=Math.min(g,C)/3;let a=-Math.PI/2;const E=d.width/2,M=d.height/2;await Promise.all(t.map(async(e,t)=>{e=a+2*Math.PI*(e.level/k),p.fillStyle=c.pieColors[t%c.pieColors.length]||"#FFFFFF",p.beginPath(),p.moveTo(E,M),p.arc(E,M,A,a,e),p.closePath(),p.fill(),a=e}))}break;default:throw new xplogs_1.XpFatal({function:"charts()",message:"Invalid chart type provided"})}if(["doughnut","pie"].includes(r.type)){const _=d.height-20-20*t.length;p.fillStyle="rgba(0,0,0,0.25)",p.fillRect(15,_-5,200,20*t.length+5),p.font="12px Baloo, FallbackFont",await Promise.all(t.map(async(e,t)=>{var a=c.pieColors[t%c.pieColors.length],t=_+20*t;p.fillStyle=a||"#FFFFFF",p.fillRect(20,t,15,15),p.fillStyle=c.textColor,p.fillText(e?.name||e.user,40,11.5+t)}))}return xp_1.xp.auto_clean&&(0,xp_1.clean)(),{attachment:d.toBuffer("image/png"),description:"Chart",name:"chart.png"}}Object.defineProperty(exports,"__esModule",{value:!0}),exports.charts=void 0;const xp_1=require("../xp"),canvas_1=require("@napi-rs/canvas"),path_1=require("path"),cards_1=require("./cards"),xplogs_1=require("./functions/xplogs");exports.charts=charts;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type ConnectionOptions = {
|
|
2
|
+
auto_clean?: boolean;
|
|
3
|
+
auto_create?: boolean;
|
|
4
|
+
debug?: boolean;
|
|
5
|
+
notify?: boolean;
|
|
6
|
+
type: "mongodb" | "sqlite" | undefined;
|
|
7
|
+
xp_rate?: "slow" | "normal" | "fast" | number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Connect to a database (MongoDB, SQLite)
|
|
11
|
+
*
|
|
12
|
+
* @async
|
|
13
|
+
* @param {string} uri
|
|
14
|
+
* @param {ConnectionOptions} options
|
|
15
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/connect
|
|
16
|
+
* @returns {Promise<boolean>}
|
|
17
|
+
* @throws {XpFatal} If an invalid type is provided or if the value is not provided.
|
|
18
|
+
*/
|
|
19
|
+
export declare function connect(uri: string, options?: ConnectionOptions): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Check database package versions
|
|
22
|
+
* @private
|
|
23
|
+
* @param {string} type - NPM Package Name (lowercase)
|
|
24
|
+
* @param {number} min - Minimum Major Version Number
|
|
25
|
+
* @param {number} max - Maximum Major Version Number (Optional)
|
|
26
|
+
* @returns {Promise<boolean>}
|
|
27
|
+
* @throws {XpFatal} If the package version is not supported
|
|
28
|
+
*/
|
|
29
|
+
export declare function checkPackageVersion(type: string, min: number, max?: number): Promise<boolean>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Connect to a database (MongoDB, SQLite)
|
|
4
|
+
*
|
|
5
|
+
* @async
|
|
6
|
+
* @param {string} uri
|
|
7
|
+
* @param {ConnectionOptions} options
|
|
8
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/connect
|
|
9
|
+
* @returns {Promise<boolean>}
|
|
10
|
+
* @throws {XpFatal} If an invalid type is provided or if the value is not provided.
|
|
11
|
+
*/
|
|
12
|
+
async function connect(e,t={type:void 0}){var a,{type:o,auto_create:n,auto_clean:r,notify:s,debug:c,xp_rate:i}=t;if(!i||"slow"!==i&&"normal"!==i&&"fast"!==i&&isNaN(i)||(xp_1.xp.xp_rate="slow"===i?.05:"normal"===i?.1:"fast"===i?.5:i),!e)throw new xplogs_1.XpFatal({function:"connect()",message:"No URI Provided"});switch(!1===s&&(xp_1.xp.notify=!1),n&&(xp_1.xp.auto_create=!0),r&&(xp_1.xp.auto_clean=!0),c&&(xp_1.xp.debug=!0),o||(t.type="mongodb",xplogs_1.XpLog.warn("connect()","Database type not provided, defaulting to MongoDB")),o){case"mongodb":if(a=(await Promise.resolve().then(()=>__importStar(require("mongodb")))).MongoClient,!await checkPackageVersion("mongodb",3,6))return xplogs_1.XpLog.err("connect()","MongoDB Version 3 to 6 is required");a=await a.connect(e).catch(e=>{throw new xplogs_1.XpFatal({function:"connect()",message:e.message})}),xp_1.xp.dbType="mongodb",xp_1.xp.database=a||void 0;break;case"sqlite":try{var[p,l]=await Promise.all([Promise.resolve().then(()=>__importStar(require("better-sqlite3"))),checkPackageVersion("better-sqlite3",7,9)]);if(!l)return xplogs_1.XpLog.err("connect()","better-sqlite3 Version 7 to 9 is required");xp_1.xp.database=new p.default(e),xp_1.xp.dbType="sqlite",xp_1.xp.database.exec(`CREATE TABLE IF NOT EXISTS "simply-xps"
|
|
13
|
+
(
|
|
14
|
+
user TEXT NOT NULL,
|
|
15
|
+
guild TEXT NOT NULL,
|
|
16
|
+
name TEXT NOT NULL DEFAULT user,
|
|
17
|
+
level INTEGER NOT NULL DEFAULT 0,
|
|
18
|
+
xp INTEGER NOT NULL DEFAULT 0,
|
|
19
|
+
voice_xp INTEGER DEFAULT 0,
|
|
20
|
+
voice_time INTEGER DEFAULT 0,
|
|
21
|
+
lastUpdated DATE NOT NULL,
|
|
22
|
+
xp_rate INTEGER DEFAULT 0.1
|
|
23
|
+
)`),xp_1.xp.database.exec(`CREATE TABLE IF NOT EXISTS "simply-xp-levelroles"
|
|
24
|
+
(
|
|
25
|
+
gid TEXT NOT NULL,
|
|
26
|
+
lvlrole TEXT NOT NULL,
|
|
27
|
+
lastUpdated TEXT NOT NULL
|
|
28
|
+
)`)}catch(e){if("object"==typeof e&&null!==e&&void 0!==(a=e).code&&"MODULE_NOT_FOUND"!==a.code)throw new xplogs_1.XpFatal({function:"connect()",message:a.message})}break;default:throw new xplogs_1.XpFatal({function:"connect()",message:"DATABASE TYPE NOT PROVIDED OR INVALID"})}return!!xp_1.xp.database&&(xplogs_1.XpLog.info("connect()","Connected to database!"),r&&(0,xp_1.clean)({db:!0}),await xp_1.db.findAll("simply-xps").then(e=>{e.filter(e=>e?.xp_rate!==xp_1.xp.xp_rate).map(e=>{xp_1.db.updateOne({collection:"simply-xps",data:{user:e.user,guild:e.guild}},{collection:"simply-xps",data:{user:e.user,guild:e.guild,level:(0,xp_1.convertFrom)(e.xp,"xp"),xp:e.xp,xp_rate:xp_1.xp.xp_rate}})})}),xplogs_1.XpLog.debug("connect()","UPDATED ALL USERS WITH NEW XP RATE"),!0)}
|
|
29
|
+
/**
|
|
30
|
+
* Returns the package manager used
|
|
31
|
+
* @private
|
|
32
|
+
* @returns {Promise<"yarn" | "npm" | "pnpm">}
|
|
33
|
+
*/
|
|
34
|
+
async function getPackageManager(){const t=(await Promise.resolve().then(()=>__importStar(require("fs")))).existsSync;var e=["yarn.lock","pnpm-lock.yaml","pnpm-lock.json","package-lock.json"].filter(e=>t(e));if(1===e.length){if("yarn.lock"===e[0])return xplogs_1.XpLog.debug("getPackageManager()","Using YARN"),"yarn";if("pnpm-lock.yaml"===e[0]||"pnpm-lock.json"===e[0])return xplogs_1.XpLog.debug("getPackageManager()","Using PNPM"),"pnpm"}return xplogs_1.XpLog.debug("getPackageManager()","Using NPM"),"npm"}
|
|
35
|
+
/**
|
|
36
|
+
* Check database package versions
|
|
37
|
+
* @private
|
|
38
|
+
* @param {string} type - NPM Package Name (lowercase)
|
|
39
|
+
* @param {number} min - Minimum Major Version Number
|
|
40
|
+
* @param {number} max - Maximum Major Version Number (Optional)
|
|
41
|
+
* @returns {Promise<boolean>}
|
|
42
|
+
* @throws {XpFatal} If the package version is not supported
|
|
43
|
+
*/async function checkPackageVersion(t,a,o){try{var e=await Promise.resolve(t+"/package.json").then(e=>__importStar(require(e)));return parseInt(e.version.substring(0,1))>=a&&(!o||parseInt(e.version.substring(0,1))<=o)}catch(e){return xplogs_1.XpLog.info("checkPackageVersion()",`Installing ${t} [V${o||a}] | Please wait...`),(0,child_process_1.execSync)(await getPackageManager()+` add ${t}@${o||a}.x.x`),xplogs_1.XpLog.warn("checkPackageVersion()",`Installed ${t}. Please restart!`),process.exit(1)}}var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,a,o){void 0===o&&(o=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&("get"in n?t.__esModule:!n.writable&&!n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,o,n)}:function(e,t,a,o){e[o=void 0===o?a:o]=t[a]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){var t,a;if(e&&e.__esModule)return e;if(t={},null!=e)for(a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&__createBinding(t,e,a);return __setModuleDefault(t,e),t};Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkPackageVersion=exports.connect=void 0;const xplogs_1=require("./functions/xplogs"),child_process_1=require("child_process"),xp_1=require("../xp");exports.connect=connect,exports.checkPackageVersion=checkPackageVersion;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { UserResult } from "./functions/database";
|
|
2
|
+
/**
|
|
3
|
+
* Create a new user in the database
|
|
4
|
+
* @async
|
|
5
|
+
* @param {string} userId
|
|
6
|
+
* @param {string} guildId
|
|
7
|
+
* @param {string} username
|
|
8
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/create
|
|
9
|
+
* @returns {Promise<UserResult>}
|
|
10
|
+
* @throws {XpFatal} If invalid parameters are provided
|
|
11
|
+
*/
|
|
12
|
+
export declare function create(userId: string, guildId: string, username: string): Promise<UserResult>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Create a new user in the database
|
|
4
|
+
* @async
|
|
5
|
+
* @param {string} userId
|
|
6
|
+
* @param {string} guildId
|
|
7
|
+
* @param {string} username
|
|
8
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/create
|
|
9
|
+
* @returns {Promise<UserResult>}
|
|
10
|
+
* @throws {XpFatal} If invalid parameters are provided
|
|
11
|
+
*/
|
|
12
|
+
async function create(e,t,r){if(!e)throw new xplogs_1.XpFatal({function:"create()",message:"User ID was not provided"});if(!t)throw new xplogs_1.XpFatal({function:"create()",message:"Guild ID was not provided"});var a;if(r)return await(a=(await Promise.resolve().then(()=>__importStar(require("./functions/database")))).db).findOne({collection:"simply-xps",data:{user:e,guild:t}})||a.createOne({collection:"simply-xps",data:{name:r,user:e,guild:t,level:0,xp:0,xp_rate:xp_1.xp.xp_rate}});throw new xplogs_1.XpFatal({function:"create()",message:"Username was not provided"})}var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&("get"in i?t.__esModule:!i.writable&&!i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,i)}:function(e,t,r,a){e[a=void 0===a?r:a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){var t,r;if(e&&e.__esModule)return e;if(t={},null!=e)for(r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t};Object.defineProperty(exports,"__esModule",{value:!0}),exports.create=void 0;const xplogs_1=require("./functions/xplogs"),xp_1=require("../xp");exports.create=create;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { User } from "../xp";
|
|
2
|
+
/**
|
|
3
|
+
* Fetch user data
|
|
4
|
+
* @async
|
|
5
|
+
* @param {string} userId
|
|
6
|
+
* @param {string} guildId
|
|
7
|
+
* @param {string?} username - Username to use if auto_create is enabled
|
|
8
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/fetch
|
|
9
|
+
* @returns {Promise<{name: string | null, user: string, guild: string, level: number, position: number, xp: number}>}
|
|
10
|
+
* @throws {XpFatal} If invalid parameters are provided, or if the user data is not found.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fetch(userId: string, guildId: string, username?: string): Promise<User>;
|
package/lib/src/fetch.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fetch user data
|
|
4
|
+
* @async
|
|
5
|
+
* @param {string} userId
|
|
6
|
+
* @param {string} guildId
|
|
7
|
+
* @param {string?} username - Username to use if auto_create is enabled
|
|
8
|
+
* @link `Documentation:` https://simplyxp.js.org/docs/next/functions/fetch
|
|
9
|
+
* @returns {Promise<{name: string | null, user: string, guild: string, level: number, position: number, xp: number}>}
|
|
10
|
+
* @throws {XpFatal} If invalid parameters are provided, or if the user data is not found.
|
|
11
|
+
*/async function fetch(t,e,r){var i;if(!t)throw new xplogs_1.XpFatal({function:"create()",message:"User ID was not provided"});if(!e)throw new xplogs_1.XpFatal({function:"create()",message:"Guild ID was not provided"});(0,xp_1.clean)({db:!0});let n=(i=await(await Promise.resolve().then(()=>__importStar(require("./functions/database")))).db.find({collection:"simply-xps",data:{guild:e}})).find(e=>e.user===t);if(!n){if(!xp_1.xp.auto_create||!r)throw new xplogs_1.XpFatal({function:"fetch()",message:"User data not found"});n=await(await Promise.resolve().then(()=>__importStar(require("./create")))).create(e,t,r)}return e=i.sort((e,t)=>t.xp-e.xp).findIndex(e=>e.user===t)+1,{name:n?.name,user:n.user,guild:n.guild,level:n.level,position:e,xp:n.xp}}var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&("get"in n?t.__esModule:!n.writable&&!n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){e[i=void 0===i?r:i]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){var t,r;if(e&&e.__esModule)return e;if(t={},null!=e)for(r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t};Object.defineProperty(exports,"__esModule",{value:!0}),exports.fetch=void 0;const xplogs_1=require("./functions/xplogs"),xp_1=require("../xp");exports.fetch=fetch;
|
|
Binary file
|