chomens-bot-js/plugins/commands.js
2022-08-19 09:36:34 +07:00

80 lines
3.6 KiB
JavaScript

/* eslint-disable no-var */
/* eslint-disable max-len */
const config = require('../config');
const loadFiles = require('../util/load_files');
const path = require('path');
const {MessageEmbed} = require('discord.js');
function inject(bot, dcclient) {
bot.command_handler.commands = loadFiles(path.join(__dirname, '../commands'));
bot.command_handler.main = function(prefix, username, usernameraw, message, sender, channeldc) {
let raw;
if (typeof message.content!=='undefined') raw = message.content.substr(prefix.length);
if (typeof message.content==='undefined') raw = message.substr(prefix.length);
const [commandName, ...args] = raw.split(' ');
var command = bot.command_handler.commands.find((command) => command.name === commandName.toLowerCase());
try {
var alias = bot.command_handler.commands.find((command) => command.alias.includes(commandName.toLowerCase()));
if (alias !== undefined) {
var command = bot.command_handler.commands.find((command) => command.alias.includes(commandName.toLowerCase()));
}
if (command === undefined) {
throw new Error(`Unknown command: "${commandName}"`);
}
if (prefix==='!') {
if (typeof command.discordExecute==='undefined') throw new Error('This command is not yet supported on discord!');
command.discordExecute(bot, username, usernameraw, sender, prefix, args, channeldc, message);
} else {
command.execute(bot, username, usernameraw, sender, prefix, args);
}
} catch (e) {
if (prefix==='!') {
const Embed = new MessageEmbed()
.setColor('#FF0000')
.setTitle('Error')
.setDescription(`\`\`\`${e}\`\`\``);
channeldc.send({embeds: [Embed]});
} else {
bot.core.run('minecraft:tellraw @a ' + JSON.stringify({text: String(e), color: 'red'}));
}
}
};
bot.command_handler.run = function(username, usernameraw, message, sender, channeldc) {
for (const prefix of config.prefixes) {
if (!message.startsWith(prefix)) continue;
bot.command_handler.main(prefix, username, usernameraw, message, sender, channeldc);
}
};
bot.on('message', async (username, message, sender) => {
// try catch cuz TypeError: Cannot read properties of undefined (reading 'replace')
try {
const usernameraw = username.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
var sender = bot.playersAddedPlayers[usernameraw];
var username = bot.getplayerusername[sender];
var message = message.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
bot.command_handler.run(username, usernameraw, message, sender);
} catch (e) {
return;
}
});
bot.on('cspy', async function(username, message) {
var username = username.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
var message = message.replace(/§[a-f0-9rlonmk]/g, '').replace(/§/g, '');
bot.command_handler.run(username, username, message, 'no uuid1!1!1!');
});
dcclient.on('messageCreate', async (message) => {
try {
// ignores the message that comes from the bot itself
if (message.author.id === dcclient.user.id) return;
const channelid = message.channel.id;
const channeldc = dcclient.channels.cache.get(channelid);
// only receive messages in SPECIFIC channel
if (message.channel.id != bot.channelId) return;
if (!message.content.startsWith(config.discord.prefix)) return;
bot.command_handler.main(config.discord.prefix, message.member.displayName, message.member.displayName, message, 'no sender for discord', channeldc);
} catch (e) {
return;
};
});
};
module.exports = {inject};