mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-11-22 13:14:58 +05:00
Фиксы и таблицы лидеров в эмбедах
This commit is contained in:
parent
b0deb2e447
commit
a5456a11d6
9 changed files with 130 additions and 54 deletions
|
@ -23,7 +23,9 @@ class Configuration extends Command {
|
||||||
const embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setAuthor({
|
.setAuthor({
|
||||||
name: message.guild.name,
|
name: message.guild.name,
|
||||||
iconURL: message.guild.iconURL()
|
iconURL: message.guild.iconURL({
|
||||||
|
dynamic: true
|
||||||
|
})
|
||||||
})
|
})
|
||||||
.setColor(data.config.embed.color)
|
.setColor(data.config.embed.color)
|
||||||
.setFooter({
|
.setFooter({
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
const Command = require("../../base/Command"),
|
const Command = require("../../base/Command"),
|
||||||
AsciiTable = require("ascii-table");
|
Discord = require("discord.js");
|
||||||
|
|
||||||
class Leaderboard extends Command {
|
class Leaderboard extends Command {
|
||||||
constructor(client) {
|
constructor(client) {
|
||||||
|
@ -30,18 +30,43 @@ class Leaderboard extends Command {
|
||||||
membersLeaderboard = members.map((m) => {
|
membersLeaderboard = members.map((m) => {
|
||||||
return {
|
return {
|
||||||
id: m.id,
|
id: m.id,
|
||||||
value: m.money + m.bankSold
|
money: m.money + m.bankSold
|
||||||
};
|
};
|
||||||
}).sort((a, b) => b.value - a.value);
|
}).sort((a, b) => b.money - a.money);
|
||||||
|
|
||||||
const table = new AsciiTable("Таблица лидеров");
|
|
||||||
table.setHeading("#", message.translate("common:USER"), message.translate("common:CREDITS"));
|
|
||||||
|
|
||||||
if (membersLeaderboard.length > 20) membersLeaderboard.length = 20;
|
if (membersLeaderboard.length > 20) membersLeaderboard.length = 20;
|
||||||
|
|
||||||
const newTable = await fetchUsers(membersLeaderboard, table, this.client);
|
let userNames = "";
|
||||||
|
let money = "";
|
||||||
|
for (let i = 0; i < membersLeaderboard.length; i++) {
|
||||||
|
const data = membersLeaderboard[i];
|
||||||
|
const user = (await this.client.users.fetch(data.id)).tag;
|
||||||
|
|
||||||
|
userNames += `**${i + 1}**. ${user}\n`;
|
||||||
|
money += `**${data.money}**\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setAuthor({
|
||||||
|
name: message.translate("economy/leaderboard:TABLE", {
|
||||||
|
name: message.guild.name
|
||||||
|
}),
|
||||||
|
iconURL: message.guild.iconURL({
|
||||||
|
dynamic: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.setColor(this.client.config.embed.color)
|
||||||
|
.addFields({
|
||||||
|
name: message.translate("economy/leaderboard:TOP"),
|
||||||
|
value: userNames,
|
||||||
|
inline: true
|
||||||
|
}, {
|
||||||
|
name: message.translate("economy/leaderboard:LEVEL"),
|
||||||
|
value: money,
|
||||||
|
inline: true
|
||||||
|
});
|
||||||
|
|
||||||
message.channel.send({
|
message.channel.send({
|
||||||
content: "```\n" + newTable.toString() + "```"
|
embeds: [embed]
|
||||||
});
|
});
|
||||||
} else if (type === "level") {
|
} else if (type === "level") {
|
||||||
const members = await this.client.membersData.find({
|
const members = await this.client.membersData.find({
|
||||||
|
@ -50,18 +75,50 @@ class Leaderboard extends Command {
|
||||||
membersLeaderboard = members.map((m) => {
|
membersLeaderboard = members.map((m) => {
|
||||||
return {
|
return {
|
||||||
id: m.id,
|
id: m.id,
|
||||||
value: m.level
|
level: m.level,
|
||||||
|
xp: m.exp
|
||||||
};
|
};
|
||||||
}).sort((a, b) => b.value - a.value);
|
}).sort((a, b) => b.level - a.level);
|
||||||
|
|
||||||
const table = new AsciiTable("Таблица лидеров");
|
|
||||||
table.setHeading("#", message.translate("common:USER"), message.translate("common:LEVEL"));
|
|
||||||
|
|
||||||
if (membersLeaderboard.length > 20) membersLeaderboard.length = 20;
|
if (membersLeaderboard.length > 20) membersLeaderboard.length = 20;
|
||||||
|
|
||||||
const newTable = await fetchUsers(membersLeaderboard, table, this.client);
|
let userNames = "";
|
||||||
|
let level = "";
|
||||||
|
let xp = "";
|
||||||
|
for (let i = 0; i < membersLeaderboard.length; i++) {
|
||||||
|
const data = membersLeaderboard[i];
|
||||||
|
const user = (await this.client.users.fetch(data.id)).tag;
|
||||||
|
|
||||||
|
userNames += `**${i + 1}**. ${user}\n`;
|
||||||
|
level += `**${data.level}**\n`;
|
||||||
|
xp += `**${data.xp}** / **${5 * (data.level * data.level) + 80 * data.level + 100}**\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setAuthor({
|
||||||
|
name: message.translate("economy/leaderboard:TABLE", {
|
||||||
|
name: message.guild.name
|
||||||
|
}),
|
||||||
|
iconURL: message.guild.iconURL({
|
||||||
|
dynamic: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.setColor(this.client.config.embed.color)
|
||||||
|
.addFields({
|
||||||
|
name: message.translate("economy/leaderboard:TOP"),
|
||||||
|
value: userNames,
|
||||||
|
inline: true
|
||||||
|
}, {
|
||||||
|
name: message.translate("economy/leaderboard:LEVEL"),
|
||||||
|
value: level,
|
||||||
|
inline: true
|
||||||
|
}, {
|
||||||
|
name: message.translate("economy/leaderboard:XP"),
|
||||||
|
value: xp,
|
||||||
|
inline: true
|
||||||
|
});
|
||||||
|
|
||||||
message.channel.send({
|
message.channel.send({
|
||||||
content: "```\n" + newTable.toString() + "```"
|
embeds: [embed]
|
||||||
});
|
});
|
||||||
} else if (type === "rep") {
|
} else if (type === "rep") {
|
||||||
const users = await this.client.usersData.find({
|
const users = await this.client.usersData.find({
|
||||||
|
@ -70,18 +127,43 @@ class Leaderboard extends Command {
|
||||||
usersLeaderboard = users.map((u) => {
|
usersLeaderboard = users.map((u) => {
|
||||||
return {
|
return {
|
||||||
id: u.id,
|
id: u.id,
|
||||||
value: u.rep
|
rep: u.rep
|
||||||
};
|
};
|
||||||
}).sort((a, b) => b.value - a.value);
|
}).sort((a, b) => b.rep - a.rep);
|
||||||
|
|
||||||
const table = new AsciiTable("Таблица лидеров");
|
|
||||||
table.setHeading("#", message.translate("common:USER"), message.translate("common:POINTS"));
|
|
||||||
|
|
||||||
if (usersLeaderboard.length > 20) usersLeaderboard.length = 20;
|
if (usersLeaderboard.length > 20) usersLeaderboard.length = 20;
|
||||||
|
|
||||||
const newTable = await fetchUsers(usersLeaderboard, table, this.client);
|
let userNames = "";
|
||||||
|
let rep = "";
|
||||||
|
for (let i = 0; i < usersLeaderboard.length; i++) {
|
||||||
|
const data = usersLeaderboard[i];
|
||||||
|
const user = (await this.client.users.fetch(data.id)).tag;
|
||||||
|
|
||||||
|
userNames += `**${i + 1}**. ${user}\n`;
|
||||||
|
rep += `**${data.rep}**\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setAuthor({
|
||||||
|
name: message.translate("economy/leaderboard:TABLE", {
|
||||||
|
name: message.guild.name
|
||||||
|
}),
|
||||||
|
iconURL: message.guild.iconURL({
|
||||||
|
dynamic: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.setColor(this.client.config.embed.color)
|
||||||
|
.addFields({
|
||||||
|
name: message.translate("economy/leaderboard:TOP"),
|
||||||
|
value: userNames,
|
||||||
|
inline: true
|
||||||
|
}, {
|
||||||
|
name: message.translate("economy/leaderboard:REP"),
|
||||||
|
value: rep,
|
||||||
|
inline: true
|
||||||
|
});
|
||||||
|
|
||||||
message.channel.send({
|
message.channel.send({
|
||||||
content: "```\n" + newTable.toString() + "```"
|
embeds: [embed]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,19 +172,3 @@ class Leaderboard extends Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Leaderboard;
|
module.exports = Leaderboard;
|
||||||
|
|
||||||
async function fetchUsers(array, table, client) {
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
let index = 1;
|
|
||||||
array.forEach((element) => {
|
|
||||||
client.users.fetch(element.id).then((user) => {
|
|
||||||
const regEx = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;
|
|
||||||
let username = user.username.replace(regEx, "");
|
|
||||||
if (username.length > 20) username = username.substr(0, 20);
|
|
||||||
|
|
||||||
table.addRow(index++, username, element.value);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
resolve(table);
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,10 +1,11 @@
|
||||||
### JaBa v3.2.7
|
### JaBa v3.2.8
|
||||||
* Добавлено
|
* Добавлено
|
||||||
* Статистика сервера на сайте ([пример](https://jaba.pp.ua/stats/651412418202959872)).
|
* Статистика сервера на сайте ([пример](https://jaba.pp.ua/stats/651412418202959872)).
|
||||||
* Профиль пользователя определённого сервера на сайте ([пример](https://jaba.pp.ua/user/281361531411890186/651412418202959872))
|
* Профиль пользователя определённого сервера на сайте ([пример](https://jaba.pp.ua/user/281361531411890186/651412418202959872))
|
||||||
Ссылки на статистику сервера и профиль пользователя можно найти в *serverinfo* и *profile (@пользователь)* соответственно.
|
Ссылки на статистику сервера и профиль пользователя можно найти в *serverinfo* и *profile (@пользователь)* соответственно.
|
||||||
|
|
||||||
* Изменения
|
* Изменения
|
||||||
|
* Таблицы лидеров теперь показываются в эмбедах.
|
||||||
* Отключены команда *someone* и тэг *@someone*.
|
* Отключены команда *someone* и тэг *@someone*.
|
||||||
|
|
||||||
### JaBa v3.2.7
|
### JaBa v3.2.7
|
||||||
|
|
|
@ -46,11 +46,9 @@ async function fetchUsers(array, client) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
const users = [];
|
const users = [];
|
||||||
array.filter((e) => e.id).forEach((element) => {
|
array.filter((e) => e.id).forEach((element) => {
|
||||||
client.users.fetch(element.id).then((user) => {
|
client.users.fetch(element.id).then(user => {
|
||||||
user.username = user.username.replace(/[\W_]+/g, " ");
|
if (user.username.length > 15) user.username = user.username.substr(0, 12) + "...";
|
||||||
if (user.username.length > 13) {
|
|
||||||
user.username = user.username.substr(0, 10) + "...";
|
|
||||||
}
|
|
||||||
users.push({
|
users.push({
|
||||||
...{
|
...{
|
||||||
money: element.money,
|
money: element.money,
|
||||||
|
|
|
@ -114,7 +114,7 @@
|
||||||
/* LEADERBOARD */
|
/* LEADERBOARD */
|
||||||
let values = ["money", "level"];
|
let values = ["money", "level"];
|
||||||
values.forEach((value) => {
|
values.forEach((value) => {
|
||||||
let members = JSON.parse(`<%- JSON.stringify(stats) %>`)[value];
|
let members = JSON.parse(`<%- JSON.stringify(stats) %>`)[value].sort((a, b) => a - b);
|
||||||
let data = {
|
let data = {
|
||||||
labels: members.map(a => a.username),
|
labels: members.map(a => a.username),
|
||||||
datasets: [{
|
datasets: [{
|
||||||
|
|
|
@ -48,7 +48,9 @@ module.exports = class {
|
||||||
const logsEmbed = new Discord.MessageEmbed()
|
const logsEmbed = new Discord.MessageEmbed()
|
||||||
.setAuthor({
|
.setAuthor({
|
||||||
name: guild.name,
|
name: guild.name,
|
||||||
iconURL: guild.iconURL()
|
iconURL: guild.iconURL({
|
||||||
|
dynamic: true
|
||||||
|
})
|
||||||
})
|
})
|
||||||
.setColor("#32CD32")
|
.setColor("#32CD32")
|
||||||
.setDescription(text);
|
.setDescription(text);
|
||||||
|
|
|
@ -12,7 +12,9 @@ module.exports = class {
|
||||||
const embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setAuthor({
|
.setAuthor({
|
||||||
name: guild.name,
|
name: guild.name,
|
||||||
iconURL: guild.iconURL()
|
iconURL: guild.iconURL({
|
||||||
|
dynamic: true
|
||||||
|
})
|
||||||
})
|
})
|
||||||
.setColor("#B22222")
|
.setColor("#B22222")
|
||||||
.setDescription(text);
|
.setDescription(text);
|
||||||
|
|
|
@ -3,5 +3,11 @@
|
||||||
"USAGE": "{{prefix}}leaderboard [rep/level/credits]",
|
"USAGE": "{{prefix}}leaderboard [rep/level/credits]",
|
||||||
"EXAMPLES": "{{prefix}}leaderboard credits\n{{prefix}}leaderboard level",
|
"EXAMPLES": "{{prefix}}leaderboard credits\n{{prefix}}leaderboard level",
|
||||||
"MISSING_TYPE": "Выберите таблицу `credits`, `level` или `rep`",
|
"MISSING_TYPE": "Выберите таблицу `credits`, `level` или `rep`",
|
||||||
"MOBILE": ":confused: Я заметил, что вы онлайн с телефона.... Таблица лидеров может отображаться некорректно на маленьких экранах. Попробуйте переключиться на ландшафтный режим или попробуйте позже с другого устройства!"
|
"MOBILE": ":confused: Я заметил, что вы онлайн с телефона... Таблица лидеров может отображаться некорректно на маленьких экранах. Попробуйте переключиться на ландшафтный режим или попробуйте позже с другого устройства!",
|
||||||
|
"TABLE": "Таблица лидеров {{name}}",
|
||||||
|
"TOP": "Топ 20",
|
||||||
|
"LEVEL": "Уровень",
|
||||||
|
"XP": "Опыт",
|
||||||
|
"CREDITS": "Кредиты",
|
||||||
|
"REP": "Репутация"
|
||||||
}
|
}
|
|
@ -21,7 +21,6 @@
|
||||||
"@sentry/node": "6.3.6",
|
"@sentry/node": "6.3.6",
|
||||||
"@sindresorhus/slugify": "^1.1.0",
|
"@sindresorhus/slugify": "^1.1.0",
|
||||||
"amethyste-api": "github:Androz2091/amethyste-api",
|
"amethyste-api": "github:Androz2091/amethyste-api",
|
||||||
"ascii-table": "0.0.9",
|
|
||||||
"blague.xyz": "^2.0.4",
|
"blague.xyz": "^2.0.4",
|
||||||
"btoa": "^1.2.1",
|
"btoa": "^1.2.1",
|
||||||
"canvacord": "^5.1.0",
|
"canvacord": "^5.1.0",
|
||||||
|
|
Loading…
Reference in a new issue