chomens-bot-js/plugins/commands.js

89 lines
4.3 KiB
JavaScript
Raw Normal View History

2022-11-16 00:05:04 -05:00
/* eslint-disable require-jsdoc */
2022-08-14 05:51:45 -04:00
/* eslint-disable max-len */
const path = require('path');
const {MessageEmbed} = require('discord.js');
2022-11-06 03:30:25 -05:00
function inject(bot, dcclient, config) {
const loadFiles = require('../util/load_files');
2022-11-12 01:04:38 -05:00
const channeldc = dcclient.channels.cache.get(config.discord.servers[bot.options.host]);
bot.command_handler = {};
bot.command_handler.commands = {};
bot.command_handler.reload = function() {
2022-11-06 03:30:25 -05:00
bot.command_handler.commands = loadFiles(path.join(__dirname, config.commandsDir));
};
bot.command_handler.reload();
2022-11-16 06:41:30 -05:00
bot.command_handler.main = function(prefix, username, usernameraw, message, sender, channeldc, hash, ownerhash, selector) {
bot.command_handler.reload();
2022-08-18 20:15:05 -04:00
let raw;
2022-10-17 23:05:27 -04:00
let command;
2022-11-07 07:22:42 -05:00
message.content ? raw = message.content.substring(prefix.length) : raw = message.substring(prefix.length);
2022-08-14 05:51:45 -04:00
const [commandName, ...args] = raw.split(' ');
2022-10-17 23:05:27 -04:00
command = bot.command_handler.commands.find((command) => command.name === commandName.toLowerCase());
2022-08-14 05:51:45 -04:00
try {
2022-11-07 07:22:42 -05:00
const alias = bot.command_handler.commands.find((command) => command.alias.includes(commandName.toLowerCase()));
if (alias) command = bot.command_handler.commands.find((command) => command.alias.includes(commandName.toLowerCase()));
2022-10-17 23:05:27 -04:00
if (prefix === '*' && message.endsWith('*') && message !== '*') return;
2022-11-07 07:22:42 -05:00
if (!command) throw new Error(`Unknown command: "${commandName}"`);
2022-08-14 05:51:45 -04:00
2022-11-07 07:22:42 -05:00
if (prefix === config.discord.prefix) {
if (typeof command.discordExecute === 'undefined') throw new Error('This command is not yet supported on discord!');
2022-11-06 03:30:25 -05:00
command.discordExecute(bot, username, usernameraw, sender, prefix, args, channeldc, message, config);
2022-08-14 05:51:45 -04:00
} else {
2022-11-16 06:41:30 -05:00
command.execute(bot, username, usernameraw, 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-08-14 05:51:45 -04:00
const Embed = new MessageEmbed()
.setColor('#FF0000')
.setTitle('Error')
.setDescription(`\`\`\`${e}\`\`\``);
channeldc.send({embeds: [Embed]});
} else {
2022-11-16 22:30:51 -05:00
bot.tellraw(selector, {text: String(e), color: 'red'});
2022-08-14 05:51:45 -04:00
}
}
};
2022-11-16 06:41:30 -05:00
bot.command_handler.run = function(username, usernameraw, message, sender, channeldc, hash, ownerhash, selector = '@a') {
2022-08-14 05:51:45 -04:00
for (const prefix of config.prefixes) {
if (!message.startsWith(prefix)) continue;
2022-11-16 06:41:30 -05:00
bot.command_handler.main(prefix, username, usernameraw, message, sender, channeldc, hash, ownerhash, selector);
2022-08-14 05:51:45 -04:00
}
};
2022-11-16 00:05:04 -05:00
bot.on('message', async (_username, _message, _sender) => {
2022-08-14 05:51:45 -04:00
// try catch cuz TypeError: Cannot read properties of undefined (reading 'replace')
try {
2022-11-16 00:05:04 -05:00
const usernameraw = _username.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
const sender = _sender !== '00000000-0000-0000-0000-000000000000' ? _sender : bot.playersAddedPlayers[usernameraw];
2022-11-14 07:53:44 -05:00
let username;
if (!bot.getplayerusername[sender]) username = usernameraw;
else username = bot.getplayerusername[sender];
2022-11-16 00:05:04 -05:00
const message = _message.replace(/* /§r/g */ /§[a-f0-9rlonmk]/g, '')/* .replace(/§/g, '')*/;
2022-11-16 06:09:37 -05:00
bot.command_handler.run(username, usernameraw, message, sender, channeldc, bot.hash, bot.ownerHash);
2022-08-14 05:51:45 -04:00
} catch (e) {
2022-11-13 01:54:34 -05:00
bot.console.error(e);
2022-08-14 05:51:45 -04:00
}
});
2022-11-16 00:05:04 -05:00
bot.on('cspy', async function(_username, _message) {
const username = _username.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
const message = _message.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
2022-10-21 04:01:09 -04:00
const sender = bot.playersAddedPlayers[username];
2022-11-17 22:29:39 -05:00
bot.command_handler.run(username, username, message, sender, channeldc, bot.hash, bot.ownerHash, username);
2022-08-14 05:51:45 -04:00
});
function handleDiscordMessages(message) {
2022-08-14 05:51:45 -04:00
try {
// ignores the message that comes from the bot itself
if (message.author.id === dcclient.user.id) return;
// only receive messages in SPECIFIC channel
2022-11-12 01:04:38 -05:00
if (message.channel.id !== channeldc.id) return;
2022-08-14 05:51:45 -04:00
if (!message.content.startsWith(config.discord.prefix)) return;
2022-08-18 20:15:05 -04:00
bot.command_handler.main(config.discord.prefix, message.member.displayName, message.member.displayName, message, 'no sender for discord', channeldc);
2022-08-14 05:51:45 -04:00
} catch (e) {
return;
};
}
bot.once('end', () => {
dcclient.off('messageCreate', handleDiscordMessages);
2022-08-14 05:51:45 -04:00
});
dcclient.on('messageCreate', handleDiscordMessages);
2022-08-14 05:51:45 -04:00
};
module.exports = {inject};