166 lines
3.9 KiB
JavaScript
166 lines
3.9 KiB
JavaScript
|
const fs = require('fs')
|
||
|
const cmds = Object.create(null)
|
||
|
const { getMessage } = require('../util/lang.js')
|
||
|
|
||
|
const sortHelp = function sortHelp (c1, c2) {
|
||
|
const level1 = cmds[c1.with[0]].level ? cmds[c1.with[0]].level : 0
|
||
|
const level2 = cmds[c2.with[0]].level ? cmds[c2.with[0]].level : 0
|
||
|
return level1 - level2
|
||
|
}
|
||
|
|
||
|
const bpl = fs.readdirSync('./commands')
|
||
|
for (const i in bpl) { // Built-in loadCMD to the help command, to prevent circular require
|
||
|
if (!bpl[i].endsWith('.js')) {
|
||
|
continue
|
||
|
}
|
||
|
try {
|
||
|
const commandName = bpl[i].split('.js')[0]
|
||
|
if (commandName !== 'help') {
|
||
|
cmds[commandName] = require(`./${bpl[i]}`)
|
||
|
if (cmds[commandName].level === undefined) {
|
||
|
cmds[commandName].level = 0
|
||
|
}
|
||
|
}
|
||
|
} catch (e) { console.log(e) }
|
||
|
}
|
||
|
|
||
|
const printHelp = (c) => {
|
||
|
const commandList = []
|
||
|
for (const i in cmds) {
|
||
|
if (cmds[i].hidden) continue
|
||
|
let cmdColor
|
||
|
switch (cmds[i].level) {
|
||
|
case 0:
|
||
|
cmdColor = 'green'
|
||
|
break
|
||
|
case 1:
|
||
|
cmdColor = 'red'
|
||
|
break
|
||
|
case 2:
|
||
|
cmdColor = 'dark_red'
|
||
|
break
|
||
|
case 3:
|
||
|
cmdColor = 'dark_red'
|
||
|
break
|
||
|
default:
|
||
|
cmdColor = 'green'
|
||
|
}
|
||
|
commandList.push(
|
||
|
{
|
||
|
translate: '%s ',
|
||
|
color: cmdColor,
|
||
|
with: [
|
||
|
i
|
||
|
]
|
||
|
}
|
||
|
)
|
||
|
}
|
||
|
c.reply({
|
||
|
translate: '%s %s',
|
||
|
with: [
|
||
|
getMessage(c.lang, 'command.help.cmdList'),
|
||
|
commandList.sort(sortHelp)
|
||
|
]
|
||
|
})
|
||
|
}
|
||
|
|
||
|
const printCmdHelp = (c) => {
|
||
|
const cmd = c.args[0]
|
||
|
if (!cmds[cmd]) {
|
||
|
c.reply({ text: getMessage(c.lang, 'command.help.noCommand') })
|
||
|
return
|
||
|
}
|
||
|
let usage = getMessage(c.lang, `command.${cmd}.usage`).split('||')
|
||
|
let desc = getMessage(c.lang, `command.${cmd}.desc`)
|
||
|
if (cmds[cmd].usage) {
|
||
|
usage = cmds[cmd].usage.split('||')
|
||
|
}
|
||
|
if (cmds[cmd].desc) {
|
||
|
desc = cmds[cmd].desc
|
||
|
}
|
||
|
if (cmds[cmd].alias) {
|
||
|
console.log(cmds[cmds[cmd].alias])
|
||
|
usage = getMessage(c.lang, `command.${cmds[cmd].alias}.usage`).split('||')
|
||
|
desc = getMessage(c.lang, 'command.help.alias', [cmds[cmd].alias])
|
||
|
if (cmds[cmds[cmd].alias].usage) {
|
||
|
usage = cmds[cmds[cmd].alias].usage.split('||')
|
||
|
}
|
||
|
if (cmds[cmds[cmd].alias].desc) {
|
||
|
desc = cmds[cmds[cmd].alias].desc
|
||
|
}
|
||
|
}
|
||
|
for (const i in usage) {
|
||
|
c.reply({
|
||
|
translate: getMessage(c.lang, 'command.help.commandUsage'),
|
||
|
color: c.colors.secondary,
|
||
|
with: [
|
||
|
{
|
||
|
text: cmd,
|
||
|
color: c.colors.primary
|
||
|
},
|
||
|
{
|
||
|
text: usage[i],
|
||
|
color: c.colors.primary
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
}
|
||
|
c.reply({
|
||
|
translate: getMessage(c.lang, 'command.help.commandDesc'),
|
||
|
color: c.colors.secondary,
|
||
|
with: [
|
||
|
{
|
||
|
text: desc,
|
||
|
color: c.colors.primary
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
const permsN = getMessage(c.lang, 'command.help.permsNormal')
|
||
|
const permsT = getMessage(c.lang, 'command.help.permsTrusted')
|
||
|
const permsO = getMessage(c.lang, 'command.help.permsOwner')
|
||
|
const permsC = getMessage(c.lang, 'command.help.permsConsole')
|
||
|
const rPerms = cmds[cmd].level ? cmds[cmd].level : 0
|
||
|
c.reply({
|
||
|
translate: getMessage(c.lang, 'command.help.commandPerms'),
|
||
|
color: c.colors.secondary,
|
||
|
with: [
|
||
|
{
|
||
|
text: [permsN, permsT, permsO, permsC][rPerms],
|
||
|
color: c.colors.primary
|
||
|
}
|
||
|
]
|
||
|
})
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
execute: (c) => {
|
||
|
if (c.args.length > 0) {
|
||
|
printCmdHelp(c)
|
||
|
} else {
|
||
|
printHelp(c)
|
||
|
}
|
||
|
},
|
||
|
aliases: [
|
||
|
'heko' // Parker2991 request
|
||
|
]
|
||
|
}
|
||
|
|
||
|
cmds.help = module.exports // Placed after to ensure that the correct values are added to cmds
|
||
|
if (cmds.help.level === undefined) {
|
||
|
cmds.help.level = 0
|
||
|
}
|
||
|
|
||
|
for (const i in cmds) {
|
||
|
if (cmds[i].aliases) {
|
||
|
for (const j in cmds[i].aliases) {
|
||
|
cmds[cmds[i].aliases[j]] = {
|
||
|
alias: i,
|
||
|
usage: cmds[i].usage,
|
||
|
level: cmds[i].level,
|
||
|
hidden: true,
|
||
|
consoleIndex: cmds[i].consoleIndex
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|