diff --git a/src/functions/database/guildLeaderBoard.js b/src/functions/database/guildLeaderBoard.js index 9719fe3a2..c53d65743 100644 --- a/src/functions/database/guildLeaderBoard.js +++ b/src/functions/database/guildLeaderBoard.js @@ -1,87 +1,89 @@ module.exports = async (d) => { - const data = d.util.aoiFunc(d); - if (data.err) return d.error(data.err); - - const [ - variable, - type = "asc", - custom = `{top}. {username}: {value}`, - list = 10, - page = 1, - table = d.client.db.tables[0], - ] = data.inside.splits; - - const all = await d.client.db.all(table, (data) => - data.key.startsWith(variable.deleteBrackets()) && data.key.split("_").length === 2, - ); - - let y = 0; - let value; - let content = []; - - for (const Data of all.sort((x, y) => { - if (d.client.db.type === "aoi.db") - return Number(y.value) - Number(x.value); - else return Number(y.data.value) - Number(x.data.value); - })) { - let user; - - if (d.client.db.type === "aoi.db") value = Number(Data.value); - else value = Number(Data.data.value); - - user = await d.util.getGuild(d, Data.key.split("_")[1]); - - if (user) { - y++; - - let text = custom - .replace(`{top}`, y) - .replace("{id}", user.id) - .replace(`{name}`, user.name.removeBrackets()) - .replace(`{value}`, value); - - if (text.includes("{execute:")) { - let ins = text.split("{execute:")[1].split("}")[0]; - - const awaited = d.client.cmd.awaited.find( - (c) => c.name === ins, - ); - - if (!awaited) - return d.aoiError.fnError( - d, - "custom", - { inside: data.inside }, - ` Invalid awaited command '${ins}' in`, - ); - - const CODE = await d.interpreter( - d.client, - { - guild: user, - channel: d.message.channel, - }, - d.args, - awaited, - undefined, - true, - ); - - text = text.replace(`{execute:${ins}}`, CODE); - } - - content.push(text); - } + const data = d.util.aoiFunc(d); + if (data.err) return d.error(data.err); + + const [ + variable, + type = "asc", + custom = `{top}. {username}: {value:,}`, + list = 10, + page = 1, + table = d.client.db.tables[0], + hideNegativeValue = false, + hideZeroValue = false + ] = data.inside.splits; + + if (!d.client.variableManager.has(variable, table)) + return d.aoiError.fnError(d, 'custom', {}, `Variable "${variable}" Not Found`); + let v = d.client.variableManager.get(variable, table); + + let db = await d.client.db.all(table, variable.addBrackets(), 1); + if (d.client.db.type === "aoi.db") + db.sort((a, b) => Number(a.value) - Number(b.value)); + else db.sort((a, b) => Number(y.data.value) - Number(x.data.value)); + + if (type === "desc") db = db.reverse(); + + if (hideNegativeValue === "true") db = db.filter(x => x.value >= 0); + if (hideZeroValue === "true") db = db.filter(x => x.value != 0); + + let y = 0; + let value; + let content = []; + + for (const Data of db) { + let guild; + if (d.client.db.type === "aoi.db") value = Number(Data.value); + else value = Number(Data.data.value); + guild = await d.util.getGuild(d, Data.key.split("_")[1]); + + if (guild) { + y++; + let text = custom + .replaceAll(`{top}`, y) + .replaceAll("{id}", guild.id) + .replaceAll(`{name}`, guild.name.removeBrackets()) + .replaceAll(`{value}`, value); + + if (text.includes("{value:")) { + let sep = text.split("{value:")[1].split("}")[0]; + text = text.replaceAll(`{value:${sep}}`, value.toLocaleString().replaceAll(",", sep)); + } + + if (text.includes("{execute:")) { + let ins = text.split("{execute:")[1].split("}")[0]; + const awaited = d.client.cmd.awaited.find((c) => c.name === ins); + + if (!awaited) + return d.aoiError.fnError( + d, + "custom", + {inside: data.inside}, + ` Invalid awaited command '${ins}' in`, + ); + + const CODE = await d.interpreter( + d.client, + { + guild: guild, + channel: d.message.channel, + }, + d.args, + awaited, + undefined, + true, + ); + + text = text.replaceAll(`{execute:${ins}}`, CODE); + } + + content.push(text); } + } - if (type === "desc") content = content.reverse(); + data.result = content.slice(page * list - list, page * list).join("\n"); - const px = page * list - list, - py = page * list; - - data.result = content.slice(px, py).join("\n"); - - return { - code: d.util.setCode(data), - }; + return { + code: d.util.setCode(data), + }; };