-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlevel system.js
138 lines (120 loc) · 4.47 KB
/
level system.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
const db = require('./database');
const { Client } = require('whatsapp-web.js');
const { userIsAdmin, getGroup } = require('./libs');
const getNextLevelExp = (level) => {
if(level < 50) {
return Math.floor((Math.pow(level, 2) * ( 100 - level )) / 50);
} else if(level <= 68) {
return Math.floor((Math.pow(level, 2) * ( 150 - level )) / 100);
} else if(level <= 98) {
return Math.floor((Math.pow(level, 2) * ( (1911 - (10 * level)) / 3)) / 500);
} else if(level <= 100) {
return Math.floor((Math.pow(level, 2) * ( 160 - level )) / 100);
} else {
return 10000;
}
}
const getLevel = async (msg, bot) => {
const Exp = db.getModel('Experiencia');
const group = await getGroup(msg);
const mentionedUsers = await msg.getMentions();
if (group) {
var isAdmin = await userIsAdmin(group, msg.author);
}
if (!group) {
Exp.find({
id: msg.id.remote
}).then(async user => {
if(!user) {
msg.reply('*Você ainda não tem exp.*');
return;
}
var userLevelArr = [];
for (element of user) {
let exp = element.exp;
let level = element.level;
let group = element.groupName;
let expToNextLevel = getNextLevelExp(level + 1) - exp;
let userLevel = `💎Nível no grupo *${group}*\n✨Exp: ${exp}\n🎇Level: ${level}\n🎆Exp para o próximo level: ${expToNextLevel}`
userLevelArr.push(userLevel);
}
let _userLevel = `💎*Esse é seu nível em cada grupo:*\n\n${userLevelArr.join('\n\n')}`;
bot.sendMessage(msg.from, _userLevel);
})
return;
}
if (mentionedUsers && mentionedUsers.length > 0) {
if (isAdmin) {
console.log(mentionedUsers);
Exp.findOne({
id: mentionedUsers[0].id._serialized,
group: group.id._serialized
}).then(async user => {
let userName = user.userName;
let exp = user.exp;
let level = user.level;
let group = user.groupName;
let expToNextLevel = getNextLevelExp(level + 1) - exp;
bot.sendMessage(msg.from, `Nível de *${userName}* no grupo *${group}*\n\n✨Exp: ${exp}\n🎇Level: ${level}\n🎆Exp para o próximo level: ${expToNextLevel}`);
})
return;
}
}
Exp.findOne({
id: msg.author,
group: group.id._serialized
}).then(async user => {
if(!user) {
msg.reply('*Você ainda não tem exp.*');
return;
}
let userName = user.userName;
let exp = user.exp;
let level = user.level;
let group = user.groupName;
let expToNextLevel = getNextLevelExp(level + 1) - exp;
bot.sendMessage(msg.from, `Nível de *${userName}* no grupo *${group}*\n\n✨Exp: ${exp}\n🎇Level: ${level}\n🎆Exp para o próximo level: ${expToNextLevel}`);
})
}
const getRanking = async (msg, bot) => {
const Exp = db.getModel('Experiencia');
const group = await getGroup(msg);
Exp.find({
group: group.id._serialized
}).then(async users => {
users.sort((a, b) => {
if (a.level == b.level){
return (a.exp > b.exp) ? -1 : 1;
}
return (a.level > b.level) ? -1 : 1;
})
let ranking = [];
var max = 10;
if(users.length < 10) {
max = users.length;
}
for (var i = 0; i < max; i++) {
let element = users[i];
let place = users.indexOf(element) + 1;
let placeMessage = "";
switch(place) {
case 1:
placeMessage = "🥇";
break;
case 2:
placeMessage = "🥈";
break;
case 3:
placeMessage = "🥉";
break;
default:
break;
}
let message = `${placeMessage} *${place}° Lugar*: ${element.userName}, *Level*: ${element.level}, *Exp*: ${element.exp}.`;
ranking.push(message);
}
let _message = `🏆 Top 10 no grupo *${group.name}*\n\n${ranking.join("\n")}`;
bot.sendMessage(msg.from, _message);
});
}
module.exports = { getRanking, getLevel, getNextLevelExp };