2022-12-05 03:16:48 -05:00
|
|
|
|
2022-11-27 02:35:28 -05:00
|
|
|
const path = require('path')
|
2022-12-24 00:59:52 -05:00
|
|
|
const { EmbedBuilder } = require('discord.js')
|
2022-11-27 02:35:28 -05:00
|
|
|
function inject (bot, dcclient, config) {
|
|
|
|
const loadFiles = require('../util/load_files')
|
2023-03-15 22:23:18 -04:00
|
|
|
const channeldc = dcclient.channels.cache.get(config.discord.servers[`${bot.server.host}:${bot.server.port}`])
|
2022-11-27 02:35:28 -05:00
|
|
|
bot.command_handler = {}
|
|
|
|
bot.command_handler.commands = {}
|
|
|
|
bot.command_handler.reload = async function () {
|
|
|
|
bot.command_handler.commands = await loadFiles(path.join(__dirname, config.commandsDir))
|
|
|
|
}
|
|
|
|
bot.command_handler.reload()
|
2023-03-05 20:48:52 -05:00
|
|
|
bot.command_handler.main = function (prefix, username, message, sender, channeldc, hash, ownerhash, selector) {
|
2022-11-27 02:35:28 -05:00
|
|
|
bot.command_handler.reload()
|
|
|
|
let raw
|
|
|
|
let command
|
|
|
|
const discord = !!message.content
|
2022-11-23 06:10:45 -05:00
|
|
|
|
2022-11-27 02:35:28 -05:00
|
|
|
discord
|
|
|
|
? raw = message.content.substring(prefix.length)
|
|
|
|
: raw = message.substring(prefix.length)
|
2022-11-23 06:10:45 -05:00
|
|
|
|
2022-11-27 02:35:28 -05:00
|
|
|
const [commandName, ...args] = raw.split(' ')
|
|
|
|
command = bot.command_handler.commands.find((command) => command.name === commandName.toLowerCase())
|
2022-11-23 06:10:45 -05:00
|
|
|
|
2022-08-14 05:51:45 -04:00
|
|
|
try {
|
2022-11-27 02:35:28 -05:00
|
|
|
const alias = bot.command_handler.commands.find((command) => command.alias.includes(commandName.toLowerCase()))
|
2023-03-13 03:57:31 -04:00
|
|
|
if (alias) command = alias
|
|
|
|
|
2022-11-27 02:35:28 -05:00
|
|
|
if (prefix === '*' && message.endsWith('*') && message !== '*') return
|
|
|
|
if (!command) throw new Error(`Unknown command: "${commandName}"`)
|
2022-08-14 05:51:45 -04:00
|
|
|
|
2023-03-13 03:57:31 -04:00
|
|
|
if (command.trusted > 0) {
|
|
|
|
const discordRoles = message.member?.roles?.cache // do i need the "?"s ?
|
|
|
|
|
|
|
|
// TODO: Don't hardcode the roles
|
|
|
|
|
|
|
|
// trusted and host
|
|
|
|
// discord
|
|
|
|
if (
|
|
|
|
discord &&
|
|
|
|
command.trusted === 1 &&
|
|
|
|
!discordRoles.some((role) => role.name === 'Trusted' || role.name === 'Host')
|
|
|
|
) throw new Error('You\'re not in the trusted role!')
|
|
|
|
// in game
|
|
|
|
if (
|
|
|
|
!discord &&
|
|
|
|
command.trusted === 1 &&
|
|
|
|
args[0] !== hash &&
|
|
|
|
args[0] !== ownerhash
|
|
|
|
|
|
|
|
) throw new Error('Invalid hash')
|
|
|
|
|
|
|
|
// host only (yup i changed, owner doesn't exist anymore (kinda, we still call it ownerHash™))
|
|
|
|
// discord
|
|
|
|
if (
|
|
|
|
discord &&
|
|
|
|
command.trusted === 2 &&
|
|
|
|
!discordRoles.some((role) => role.name === 'Host')
|
|
|
|
) throw new Error('You\'re not in the host role!')
|
|
|
|
// in game
|
|
|
|
if (
|
|
|
|
!discord &&
|
|
|
|
command.trusted === 2 &&
|
|
|
|
args[0] !== ownerhash
|
|
|
|
) throw new Error('Invalid OwnerHash')
|
2022-11-23 04:24:00 -05:00
|
|
|
}
|
|
|
|
|
2022-11-07 07:22:42 -05:00
|
|
|
if (prefix === config.discord.prefix) {
|
2023-03-13 03:57:31 -04:00
|
|
|
if (!command.discordExecute) throw new Error('This command is not yet supported on Discord!')
|
2022-12-14 08:51:30 -05:00
|
|
|
command.discordExecute(bot, username, sender, prefix, args, channeldc, message, config)
|
2022-08-14 05:51:45 -04:00
|
|
|
} else {
|
2023-03-05 20:48:52 -05:00
|
|
|
command.execute(bot, username, sender, prefix, args, config, hash, ownerhash, selector)
|
2022-08-14 05:51:45 -04:00
|
|
|
}
|
|
|
|
} catch (e) {
|
2022-11-07 07:22:42 -05:00
|
|
|
if (prefix === config.discord.prefix) {
|
2022-12-24 00:59:52 -05:00
|
|
|
const Embed = new EmbedBuilder()
|
2022-12-01 05:15:30 -05:00
|
|
|
.setColor(config.discord.embedsColors.error)
|
2022-11-27 02:35:28 -05:00
|
|
|
.setTitle('Error')
|
|
|
|
.setDescription(`\`\`\`${e}\`\`\``)
|
|
|
|
channeldc.send({ embeds: [Embed] })
|
2022-08-14 05:51:45 -04:00
|
|
|
} else {
|
2022-11-27 02:35:28 -05:00
|
|
|
bot.tellraw(selector, { text: String(e), color: 'red' })
|
2022-08-14 05:51:45 -04:00
|
|
|
}
|
|
|
|
}
|
2022-11-27 02:35:28 -05:00
|
|
|
}
|
2023-03-05 20:48:52 -05:00
|
|
|
bot.command_handler.run = function (username, message, sender, channeldc, hash, ownerhash, selector = '@a') {
|
2022-08-14 05:51:45 -04:00
|
|
|
for (const prefix of config.prefixes) {
|
2022-11-27 02:35:28 -05:00
|
|
|
if (!message.startsWith(prefix)) continue
|
2023-03-05 20:48:52 -05:00
|
|
|
bot.command_handler.main(prefix, username, message, sender, channeldc, hash, ownerhash, selector)
|
2022-08-14 05:51:45 -04:00
|
|
|
}
|
2022-11-27 02:35:28 -05:00
|
|
|
}
|
2022-12-14 08:51:30 -05:00
|
|
|
bot.on('chat', async (_username, _message) => {
|
2022-12-28 02:04:13 -05:00
|
|
|
const username = _username?.replace(/§.?/g, '')
|
|
|
|
const sender = bot.players.list.find((val) => val.name === username)?.UUID
|
|
|
|
const message = _message?.replace(/* /§r/g */ /§.?/g, '')/* .replace(/§/g, '') */
|
|
|
|
bot.command_handler.run(username, message, sender, channeldc, bot.hash, bot.ownerHash)
|
2022-11-27 02:35:28 -05:00
|
|
|
})
|
|
|
|
bot.on('cspy', async function (_username, _message) {
|
|
|
|
const username = _username.replace(/§.?/g, '')
|
|
|
|
const message = _message.replace(/§.?/g, '')
|
2022-12-30 07:47:14 -05:00
|
|
|
const sender = bot.players.list.find((val) => val.name === username)?.UUID
|
2022-12-16 04:58:07 -05:00
|
|
|
bot.command_handler.run(username, message, sender, channeldc, bot.hash, bot.ownerHash, username)
|
2022-11-27 02:35:28 -05:00
|
|
|
})
|
|
|
|
function handleDiscordMessages (message) {
|
2022-08-14 05:51:45 -04:00
|
|
|
try {
|
|
|
|
// ignores the message that comes from the bot itself
|
2022-11-27 02:35:28 -05:00
|
|
|
if (message.author.id === dcclient.user.id) return
|
2022-08-14 05:51:45 -04:00
|
|
|
// only receive messages in SPECIFIC channel
|
2022-11-27 02:35:28 -05:00
|
|
|
if (message.channel.id !== channeldc.id) return
|
|
|
|
if (!message.content.startsWith(config.discord.prefix)) return
|
2022-12-16 04:58:07 -05:00
|
|
|
bot.command_handler.main(config.discord.prefix, message.member.displayName, message, 'no sender for discord', channeldc)
|
2022-08-14 05:51:45 -04:00
|
|
|
} catch (e) {
|
2023-03-15 22:23:18 -04:00
|
|
|
bot.console.error(e.stack)
|
2022-08-14 05:51:45 -04:00
|
|
|
};
|
2022-11-12 08:57:07 -05:00
|
|
|
}
|
2022-11-30 04:45:20 -05:00
|
|
|
bot.on('end', () => {
|
2022-11-27 02:35:28 -05:00
|
|
|
dcclient.off('messageCreate', handleDiscordMessages)
|
|
|
|
})
|
|
|
|
dcclient.on('messageCreate', handleDiscordMessages)
|
2022-08-14 05:51:45 -04:00
|
|
|
};
|
2022-11-27 02:35:28 -05:00
|
|
|
module.exports = { inject }
|