simply-xp 1.3.5-beta-6 → 1.3.5

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/src/charts.js CHANGED
@@ -1,92 +1,92 @@
1
- let leaderboard = require('./leaderboard')
2
-
3
- /**
4
- * @param {Discord.Message} message
5
- * @param {import('../index').chartsOptions} options
6
- */
7
-
8
- async function charts(message, options) {
9
- try {
10
- require('canvas')
11
- } catch {
12
- throw '[XP] This requires canvas to be installed. \n"npm install canvas"'
13
- }
14
- const ChartJS = require('chart.js')
15
- const Canvas = require('canvas')
16
- let {client} = message
17
-
18
- let data = []
19
- let pos = options?.position || 5
20
- let uzern = []
21
-
22
- let ctx = Canvas.createCanvas(950, 526)
23
- await leaderboard(client, message.guild.id).then((e) => {
24
- e.forEach((m) => {
25
- if (m.position <= pos) {
26
- data.push(m.xp)
27
- uzern.push(m.tag)
28
- }
29
- })
30
- })
31
-
32
- new ChartJS(ctx, {
33
- type: options.type || 'bar',
34
- data: {
35
- labels: uzern,
36
- datasets: [
37
- {
38
- label: 'Leaderboards',
39
- data: data,
40
- backgroundColor: [
41
- 'rgba(255, 99, 132, 0.5)',
42
- 'rgba(255, 159, 64, 0.5)',
43
- 'rgba(255, 205, 86, 0.5)',
44
- 'rgba(75, 192, 192, 0.5)',
45
- 'rgba(54, 162, 235, 0.5)',
46
- 'rgba(153, 102, 255, 0.5)',
47
- 'rgb(201, 203, 207, 0.5)'
48
- ],
49
- borderColor: [
50
- 'rgb(255, 99, 132)',
51
- 'rgb(255, 159, 64)',
52
- 'rgb(255, 205, 86)',
53
- 'rgb(75, 192, 192)',
54
- 'rgb(54, 162, 235)',
55
- 'rgb(153, 102, 255)',
56
- 'rgb(201, 203, 207)'
57
- ],
58
- borderWidth: 2
59
- }
60
- ]
61
- },
62
- options: {
63
- animation: false,
64
- plugins: {
65
- title: {
66
- display: true,
67
- text: 'XP Datasheet'
68
- }
69
- }
70
- },
71
- plugins: [
72
- {
73
- id: 'simply-xp',
74
- beforeDraw: (chart) => {
75
- const ctx = chart.canvas.getContext('2d')
76
- ctx.save()
77
- ctx.globalCompositeOperation = 'destination-over'
78
- ctx.fillStyle = options.background || '#2F3136'
79
- ctx.fillRect(0, 0, chart.width, chart.height)
80
- ctx.restore()
81
- }
82
- }
83
- ]
84
- }).update()
85
-
86
- return {
87
- attachment: ctx.toBuffer('image/png'),
88
- name: 'chart.png'
89
- }
90
- }
91
-
92
- module.exports = charts
1
+ let leaderboard = require("./leaderboard");
2
+
3
+ /**
4
+ * @param {Discord.Message} message
5
+ * @param {import("../index").chartsOptions} options
6
+ */
7
+
8
+ async function charts(message, options) {
9
+ try {
10
+ require("canvas");
11
+ } catch {
12
+ throw "[XP] This requires canvas to be installed. \n\"npm install canvas\"";
13
+ }
14
+ const ChartJS = require("chart.js");
15
+ const Canvas = require("canvas");
16
+ let {client} = message;
17
+
18
+ let data = [];
19
+ let pos = options?.position || 5;
20
+ let uzern = [];
21
+
22
+ let ctx = Canvas.createCanvas(950, 526);
23
+ await leaderboard(client, message.guild.id).then((e) => {
24
+ e.forEach((m) => {
25
+ if (m.position <= pos) {
26
+ data.push(m.xp);
27
+ uzern.push(m.tag);
28
+ }
29
+ });
30
+ });
31
+
32
+ new ChartJS(ctx, {
33
+ type: options.type || "bar",
34
+ data: {
35
+ labels: uzern,
36
+ datasets: [
37
+ {
38
+ label: "Leaderboards",
39
+ data: data,
40
+ backgroundColor: [
41
+ "rgba(255, 99, 132, 0.5)",
42
+ "rgba(255, 159, 64, 0.5)",
43
+ "rgba(255, 205, 86, 0.5)",
44
+ "rgba(75, 192, 192, 0.5)",
45
+ "rgba(54, 162, 235, 0.5)",
46
+ "rgba(153, 102, 255, 0.5)",
47
+ "rgb(201, 203, 207, 0.5)"
48
+ ],
49
+ borderColor: [
50
+ "rgb(255, 99, 132)",
51
+ "rgb(255, 159, 64)",
52
+ "rgb(255, 205, 86)",
53
+ "rgb(75, 192, 192)",
54
+ "rgb(54, 162, 235)",
55
+ "rgb(153, 102, 255)",
56
+ "rgb(201, 203, 207)"
57
+ ],
58
+ borderWidth: 2
59
+ }
60
+ ]
61
+ },
62
+ options: {
63
+ animation: false,
64
+ plugins: {
65
+ title: {
66
+ display: true,
67
+ text: "XP Datasheet"
68
+ }
69
+ }
70
+ },
71
+ plugins: [
72
+ {
73
+ id: "simply-xp",
74
+ beforeDraw: (chart) => {
75
+ const ctx = chart.canvas.getContext("2d");
76
+ ctx.save();
77
+ ctx.globalCompositeOperation = "destination-over";
78
+ ctx.fillStyle = options.background || "#2F3136";
79
+ ctx.fillRect(0, 0, chart.width, chart.height);
80
+ ctx.restore();
81
+ }
82
+ }
83
+ ]
84
+ }).update();
85
+
86
+ return {
87
+ attachment: ctx.toBuffer("image/png"),
88
+ name: "chart.png"
89
+ };
90
+ }
91
+
92
+ module.exports = charts;
package/src/connect.js CHANGED
@@ -1,22 +1,21 @@
1
- const mongoose = require('mongoose')
2
-
3
- /**
4
- * @param {string} db
5
- * @param {import('../index').connectOptions} options
6
- */
7
-
8
- async function connect(db, options = []) {
9
- if (!db) throw new Error('[XP] Database URL was not provided')
10
- mongoose.set('strictQuery', true);
11
-
12
- mongoose.connect(db, {
13
- useNewUrlParser: true,
14
- useUnifiedTopology: true
15
- })
16
-
17
-
18
- if (options.notify === false) return
19
- else return console.log('{ XP } Database Connected')
20
- }
21
-
22
- module.exports = connect
1
+ const mongoose = require("mongoose");
2
+
3
+ /**
4
+ * @param {string} db
5
+ * @param {import("../index").connectOptions} options
6
+ */
7
+
8
+ async function connect(db, options = []) {
9
+ if (!db) throw new Error("[XP] Database URL was not provided");
10
+ mongoose.set("strictQuery", true);
11
+
12
+ mongoose.connect(db, {
13
+ useNewUrlParser: true,
14
+ useUnifiedTopology: true
15
+ });
16
+
17
+
18
+ if (options.notify) return console.log("{ XP } Database Connected");
19
+ }
20
+
21
+ module.exports = connect;
package/src/create.js CHANGED
@@ -1,28 +1,28 @@
1
- const levels = require('../src/models/level.js')
2
-
3
- /**
4
- * @param {string} userID
5
- * @param {string} guildID
6
- */
7
-
8
- async function create(userID, guildID) {
9
- if (!userID) throw new Error('[XP] User ID was not provided.')
10
-
11
- if (!guildID) throw new Error('[XP] User ID was not provided.')
12
-
13
- let uzer = await levels.findOne({ user: userID, guild: guildID })
14
-
15
- if (uzer) return
16
-
17
- const newuser = new levels({
18
- user: userID,
19
- guild: guildID
20
- })
21
- await newuser
22
- .save()
23
- .catch((e) => console.log(`[XP] Failed to save new use to database`))
24
-
25
- return true
26
- }
27
-
28
- module.exports = create
1
+ const levels = require("../src/models/level.js");
2
+
3
+ /**
4
+ * @param {string} userID
5
+ * @param {string} guildID
6
+ */
7
+
8
+ async function create(userID, guildID) {
9
+ if (!userID) throw new Error("[XP] User ID was not provided.");
10
+
11
+ if (!guildID) throw new Error("[XP] User ID was not provided.");
12
+
13
+ let uzer = await levels.findOne({user: userID, guild: guildID});
14
+
15
+ if (uzer) return;
16
+
17
+ const newuser = new levels({
18
+ user: userID,
19
+ guild: guildID
20
+ });
21
+ await newuser
22
+ .save()
23
+ .catch(() => console.log("[XP] Failed to save new use to database"));
24
+
25
+ return true;
26
+ }
27
+
28
+ module.exports = create;
package/src/fetch.js CHANGED
@@ -1,74 +1,74 @@
1
- const levels = require('../src/models/level.js')
2
-
3
- /**
4
- * @param {string} userID
5
- * @param {string} guildID
6
- */
7
-
8
- async function fetch(userID, guildID) {
9
- if (!userID) throw new Error('[XP] User ID was not provided.')
10
-
11
- if (!guildID) throw new Error('[XP] Guild ID was not provided.')
12
-
13
- let user = await levels.findOne({
14
- user: userID,
15
- guild: guildID
16
- })
17
- if (!user) {
18
- user = new levels({
19
- user: userID,
20
- guild: guildID,
21
- xp: 0,
22
- level: 0
23
- })
24
-
25
- await user.save()
26
- }
27
-
28
- const leaderboard = await levels
29
- .find({
30
- guild: guildID
31
- })
32
- .sort([['xp', 'descending']])
33
- .exec()
34
-
35
- if (user === null)
36
- return {
37
- level: 0,
38
- xp: 0,
39
- reqxp: 100,
40
- rank: leaderboard.findIndex((i) => i.user === userID) + 1,
41
- shortxp: 0,
42
- shortreq: 100
43
- }
44
-
45
- user.position = leaderboard.findIndex((i) => i.user === userID) + 1
46
-
47
- let targetxp = user.level + 1
48
-
49
- let target = targetxp * targetxp * 100
50
-
51
- function shortener(count) {
52
- const COUNT_ABBRS = ['', 'k', 'M', 'T']
53
-
54
- const i = 0 === count ? count : Math.floor(Math.log(count) / Math.log(1000))
55
- let result = parseFloat((count / Math.pow(1000, i)).toFixed(2))
56
- result += `${COUNT_ABBRS[i]}`
57
- return result
58
- }
59
-
60
- let shortXP = shortener(user.xp)
61
-
62
- let shortReqXP = shortener(target)
63
-
64
- return {
65
- level: user.level,
66
- xp: user.xp,
67
- reqxp: target,
68
- rank: user.position,
69
- shortxp: shortXP,
70
- shortreq: shortReqXP
71
- }
72
- }
73
-
74
- module.exports = fetch
1
+ const levels = require("../src/models/level.js");
2
+
3
+ /**
4
+ * @param {string} userID
5
+ * @param {string} guildID
6
+ */
7
+
8
+ async function fetch(userID, guildID) {
9
+ if (!userID) throw new Error("[XP] User ID was not provided.");
10
+
11
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
12
+
13
+ let user = await levels.findOne({
14
+ user: userID,
15
+ guild: guildID
16
+ });
17
+ if (!user) {
18
+ user = new levels({
19
+ user: userID,
20
+ guild: guildID,
21
+ xp: 0,
22
+ level: 0
23
+ });
24
+
25
+ await user.save();
26
+ }
27
+
28
+ const leaderboard = await levels
29
+ .find({
30
+ guild: guildID
31
+ })
32
+ .sort([["xp", "descending"]])
33
+ .exec();
34
+
35
+ if (user === null)
36
+ return {
37
+ level: 0,
38
+ xp: 0,
39
+ reqxp: 100,
40
+ rank: leaderboard.findIndex((i) => i.user === userID) + 1,
41
+ shortxp: 0,
42
+ shortreq: 100
43
+ };
44
+
45
+ user.position = leaderboard.findIndex((i) => i.user === userID) + 1;
46
+
47
+ let targetxp = user.level + 1;
48
+
49
+ let target = targetxp * targetxp * 100;
50
+
51
+ function shortener(count) {
52
+ const COUNT_ABBRS = ["", "k", "M", "T"];
53
+
54
+ const i = 0 === count ? count : Math.floor(Math.log(count) / Math.log(1000));
55
+ let result = parseFloat((count / Math.pow(1000, i)).toFixed(2));
56
+ result += `${COUNT_ABBRS[i]}`;
57
+ return result;
58
+ }
59
+
60
+ let shortXP = shortener(user.xp);
61
+
62
+ let shortReqXP = shortener(target);
63
+
64
+ return {
65
+ level: user.level,
66
+ xp: user.xp,
67
+ reqxp: target,
68
+ rank: user.position,
69
+ shortxp: shortXP,
70
+ shortreq: shortReqXP
71
+ };
72
+ }
73
+
74
+ module.exports = fetch;
@@ -1,52 +1,51 @@
1
- const levels = require('../src/models/level.js')
2
-
3
- /**
4
- * @param {Discord.Client} client
5
- * @param {string} guildID
6
- * @param {number?} limit
7
- */
8
-
9
- async function leaderboard(client, guildID, limit) {
10
- if (!guildID) throw new Error('[XP] Guild ID was not provided.')
11
-
12
- let g = client.guilds.cache.get(guildID)
13
- if (!g) throw new Error('[XP] Guild was not found.')
14
-
15
- let leaderboard = await levels.find({guild: guildID}).sort([['xp', 'descending']])
16
-
17
- let led = []
18
-
19
- function shortener(count) {
20
- const COUNT_ABBRS = ['', 'k', 'M', 'T']
21
-
22
- const i = 0 === count ? count : Math.floor(Math.log(count) / Math.log(1000))
23
- let result = parseFloat((count / Math.pow(1000, i)).toFixed(2))
24
- result += `${COUNT_ABBRS[i]}`
25
- return result
26
- }
27
-
28
- const led2 = leaderboard.map(async (key) => {
29
- const user = await g.members.fetch(key.user).catch(() => null)
30
- if (!user) return levels.deleteOne({user: key.user, guild: guildID})
31
- if (key.xp === 0) return;
32
- let pos = leaderboard.indexOf(key) + 1
33
-
34
- if (limit) {
35
- if (pos > Number(limit)) return
36
- }
37
-
38
- led.push({
39
- guildID: key.guild,
40
- userID: key.user,
41
- xp: key.xp,
42
- shortxp: shortener(key.xp),
43
- level: key.level,
44
- position: pos,
45
- username: user.user.username,
46
- tag: user.user.tag
47
- })
48
- })
49
- return Promise.all(led2).then(() => led)
50
- }
51
-
52
- module.exports = leaderboard
1
+ const levels = require("../src/models/level.js");
2
+ const {options} = require("../simplyxp");
3
+
4
+ /**
5
+ * @param {Discord.Client} client
6
+ * @param {string} guildID
7
+ * @param {number?} limit
8
+ */
9
+
10
+ async function leaderboard(client, guildID, limit) {
11
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
12
+
13
+ let g = client.guilds.cache.get(guildID);
14
+ if (!g) throw new Error("[XP] Guild was not found.");
15
+
16
+ let leaderboard = await levels.find({guild: guildID}).sort([["xp", "descending"]]);
17
+
18
+ let led = [];
19
+
20
+ function shortener(count) {
21
+ const COUNT_ABBRS = ["", "k", "M", "T"];
22
+
23
+ const i = 0 === count ? count : Math.floor(Math.log(count) / Math.log(1000));
24
+ let result = parseFloat((count / Math.pow(1000, i)).toFixed(2));
25
+ result += `${COUNT_ABBRS[i]}`;
26
+ return result;
27
+ }
28
+
29
+ const led2 = leaderboard.map(async (key) => {
30
+ const user = await g.members.fetch(key.user).catch(() => null);
31
+ if (!user && options.auto_purge) return levels.deleteOne({user: key.user, guild: guildID});
32
+ if (key.xp === 0) return;
33
+
34
+ let pos = leaderboard.indexOf(key) + 1;
35
+ if (limit && pos > Number(limit)) return;
36
+
37
+ led.push({
38
+ guildID: key.guild,
39
+ userID: key.user,
40
+ xp: key.xp,
41
+ shortxp: shortener(key.xp),
42
+ level: key.level,
43
+ position: pos,
44
+ username: user.user.username,
45
+ tag: user.user.tag
46
+ });
47
+ });
48
+ return Promise.all(led2).then(() => led);
49
+ }
50
+
51
+ module.exports = leaderboard;
package/src/lvlRole.js CHANGED
@@ -1,53 +1,53 @@
1
- const levels = require('../src/models/level.js')
2
- const lrole = require('../src/models/lvlrole.js')
3
-
4
- /**
5
- * @param {Discord.Message} message
6
- * @param {string} userID
7
- * @param {string} guildID
8
- */
9
-
10
- async function lvlRole(message, userID, guildID) {
11
- let e = await lrole.find({
12
- gid: guildID
13
- })
14
-
15
- if (!e) return
16
-
17
- let user = await levels.findOne({
18
- user: userID,
19
- guild: guildID
20
- })
21
- if (!user) {
22
- const newuser = new levels({
23
- user: userID,
24
- guild: guildID
25
- })
26
-
27
- await newuser
28
- .save()
29
- .catch((e) => console.log(`[XP] Failed to save new user to database`))
30
- }
31
-
32
- e.forEach((ee) => {
33
- ee = ee.lvlrole
34
-
35
- ee.forEach((xd) => {
36
- if (user && user.level >= Number(xd.lvl)) {
37
- let u = message.guild.members.cache.get(userID)
38
-
39
- let real = message.guild.roles.cache.find((r) => r.id === xd.role)
40
- if (!real) return
41
- else {
42
- u.roles.add(real).catch((err) => {
43
- message.channel.send(
44
- '[XP] ERROR: Role is higher than me. `MISSING_PERMISSIONS`'
45
- )
46
- })
47
- }
48
- }
49
- })
50
- })
51
- }
52
-
53
- module.exports = lvlRole
1
+ const levels = require("../src/models/level.js");
2
+ const lrole = require("../src/models/lvlrole.js");
3
+
4
+ /**
5
+ * @param {Discord.Message} message
6
+ * @param {string} userID
7
+ * @param {string} guildID
8
+ */
9
+
10
+ async function lvlRole(message, userID, guildID) {
11
+ let e = await lrole.find({
12
+ gid: guildID
13
+ });
14
+
15
+ if (!e) return;
16
+
17
+ let user = await levels.findOne({
18
+ user: userID,
19
+ guild: guildID
20
+ });
21
+ if (!user) {
22
+ const newuser = new levels({
23
+ user: userID,
24
+ guild: guildID
25
+ });
26
+
27
+ await newuser
28
+ .save()
29
+ .catch(() => console.log("[XP] Failed to save new user to database"));
30
+ }
31
+
32
+ e.forEach((ee) => {
33
+ ee = ee.lvlrole;
34
+
35
+ ee.forEach((xd) => {
36
+ if (user && user.level >= Number(xd.lvl)) {
37
+ let u = message.guild.members.cache.get(userID);
38
+
39
+ let real = message.guild.roles.cache.find((r) => r.id === xd.role);
40
+ if (!real) return;
41
+ else {
42
+ u.roles.add(real).catch(() => {
43
+ message.channel.send(
44
+ "[XP] ERROR: Role is higher than me. `MISSING_PERMISSIONS`"
45
+ );
46
+ });
47
+ }
48
+ }
49
+ });
50
+ });
51
+ }
52
+
53
+ module.exports = lvlRole;