owobot/commands/help.js

240 lines
6 KiB
JavaScript
Raw Normal View History

2024-08-12 05:13:32 -04:00
const fs = require('fs')
2024-09-19 22:21:01 -04:00
const settings = require('../settings.json')
2024-08-12 05:13:32 -04:00
const cmds = Object.create(null)
const { getMessage } = require('../util/lang.js')
const sortHelp = function sortHelp (c1, c2) {
const level1 = cmds[c1.with[0].text].level ? cmds[c1.with[0].text].level : 0
const level2 = cmds[c2.with[0].text].level ? cmds[c2.with[0].text].level : 0
2024-08-12 05:13:32 -04:00
return level1 - level2
}
const bpl = fs.readdirSync('./commands')
for (const plugin of bpl) {
if (!plugin.endsWith('.js')) {
2024-08-12 05:13:32 -04:00
continue
}
try {
const commandName = plugin.split('.js')[0]
if (commandName === 'settings' && settings.disableUserSettings) continue
2024-08-12 05:13:32 -04:00
if (commandName !== 'help') {
cmds[commandName] = require(`./${plugin}`)
2024-08-12 05:13:32 -04:00
if (cmds[commandName].level === undefined) {
cmds[commandName].level = 0
}
}
} catch (e) { console.log(e) }
}
const printHelp = (c) => {
const commandList = []
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 permList = [permsN, permsT, permsO]
2024-09-19 22:21:01 -04:00
const colorList = ['green', 'red', 'dark_red']
2024-08-12 05:13:32 -04:00
for (const i in cmds) {
if (cmds[i].hidden) continue
let cmdColor
2024-09-19 22:21:01 -04:00
if (colorList[cmds[i].level]) {
2024-09-13 03:30:34 -04:00
cmdColor = colorList[cmds[i].level]
} else {
cmdColor = colorList[0]
2024-08-12 05:13:32 -04:00
}
let usage = getMessage(c.lang, `command.${i}.usage`).split('||')
let desc = getMessage(c.lang, `command.${i}.desc`)
if (cmds[i].usage) {
usage = cmds[i].usage.split('||')
}
if (cmds[i].desc) {
desc = cmds[i].desc
}
2024-09-19 22:21:01 -04:00
const hoverText = []
for (const item of usage) {
hoverText.push({
translate: getMessage(c.lang, 'command.help.commandUsage.lf'),
color: c.colors.secondary,
with: [
{
text: i,
color: c.colors.primary
},
{
text: item,
color: c.colors.primary
}
]
})
}
hoverText.push({
translate: getMessage(c.lang, 'command.help.commandDesc.lf'),
color: c.colors.secondary,
with: [
{
text: desc,
color: c.colors.primary
}
]
})
const rPerms = cmds[i].level ? cmds[i].level : 0
hoverText.push({
translate: getMessage(c.lang, 'command.help.commandPerms.lf'),
color: c.colors.secondary,
with: [
{
text: permList[rPerms],
color: c.colors.primary
}
]
})
hoverText.push({
translate: getMessage(c.lang, 'command.help.runCommand'),
color: c.colors.secondary
})
2024-08-12 05:13:32 -04:00
commandList.push(
{
translate: '%s ',
color: cmdColor,
with: [
{
text: i,
hoverEvent: {
2024-09-19 22:21:01 -04:00
action: 'show_text',
value: hoverText,
contents: hoverText
},
clickEvent: {
action: 'suggest_command',
value: `${c.prefix}${i}`
}
}
2024-08-12 05:13:32 -04:00
]
}
)
}
2024-09-13 03:30:34 -04:00
const permListFormat = []
2024-09-19 22:21:01 -04:00
permList.forEach((item, i) => {
2024-09-13 03:30:34 -04:00
permListFormat.push({
2024-09-19 22:21:01 -04:00
translate: i === permList.length - 1 ? '%s' : '%s ',
2024-09-13 03:30:34 -04:00
color: colorList[i],
with: [
item
]
})
})
2024-08-12 05:13:32 -04:00
c.reply({
translate: '%s %s',
with: [
2024-09-13 03:30:34 -04:00
{
2024-09-19 22:21:01 -04:00
translate: '%s (%s):',
2024-09-13 03:30:34 -04:00
with: [
getMessage(c.lang, 'command.help.cmdList'),
permListFormat
]
},
2024-08-12 05:13:32 -04:00
commandList.sort(sortHelp)
]
})
}
const printCmdHelp = (c) => {
2024-09-12 00:26:36 -04:00
let cmd
if (c.args.length >= 1) cmd = c.args[0].toLowerCase()
if (!cmds[cmd] || (cmds[cmd].hidden && c.type !== 'console')) {
2024-08-12 05:13:32 -04:00
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 item of usage) {
2024-08-12 05:13:32 -04:00
c.reply({
translate: getMessage(c.lang, 'command.help.commandUsage'),
color: c.colors.secondary,
with: [
{
text: cmd,
color: c.colors.primary
},
{
text: item,
2024-08-12 05:13:32 -04:00
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 rPerms = cmds[cmd].level ? cmds[cmd].level : 0
c.reply({
translate: getMessage(c.lang, 'command.help.commandPerms'),
color: c.colors.secondary,
with: [
{
2024-09-06 16:59:16 -04:00
text: [permsN, permsT, permsO][rPerms],
2024-08-12 05:13:32 -04:00
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) {
2024-08-22 13:49:42 -04:00
for (const alias of cmds[i].aliases) {
cmds[alias] = {
2024-08-12 05:13:32 -04:00
alias: i,
usage: cmds[i].usage,
level: cmds[i].level,
hidden: true,
consoleIndex: cmds[i].consoleIndex
}
}
}
}