50 lines
1.7 KiB
JavaScript
50 lines
1.7 KiB
JavaScript
const RequireAll = require("require-all");
|
|
|
|
const internalCommands = RequireAll(__dirname + "/core-commands");
|
|
|
|
function handleGuildMessage(client, message, commands) {
|
|
if (isCommand(message))
|
|
client.guildDataModel.findOne({ guildID: message.guild.id })
|
|
.then(guildData =>
|
|
handleGuildCommand(
|
|
client,
|
|
message,
|
|
Object.assign({}, internalCommands, commands),
|
|
guildData || client.guildDataModel.create({ guildID: message.guild.id })
|
|
));
|
|
}
|
|
|
|
function handleGuildCommand(client, message, commands, guildData) {
|
|
const { botName, isMemberAdmin, params, command } = parseDetails(message, commands);
|
|
|
|
if (params.length < command.expectedParamCount)
|
|
message.reply(`Incorrect syntax!\n**Expected:** *${botName} ${command.syntax}*\n**Need help?** *${botName} help*`);
|
|
|
|
else if (isMemberAdmin || !command.admin)
|
|
command.invoke({ message, params, guildData, client, commands, isMemberAdmin })
|
|
.then(response => {
|
|
guildData.save();
|
|
if (response) message.reply(response);
|
|
})
|
|
.catch(err => err && message.reply(err));
|
|
}
|
|
|
|
function parseDetails(message, commands) {
|
|
const split = message.content.split(/ +/);
|
|
const commandName = Object.keys(commands).find(x =>
|
|
/**/ commands[x].name.toLowerCase() === (split[1] || "").toLowerCase());
|
|
|
|
return {
|
|
botName: "@" + (message.guild.me.nickname || message.guild.me.user.username),
|
|
isMemberAdmin: message.member.permissions.has("ADMINISTRATOR"),
|
|
params: split.slice(2, split.length),
|
|
command: commands[commandName]
|
|
};
|
|
}
|
|
|
|
function isCommand(message) {
|
|
//criteria for a command is bot being mentioned
|
|
return new RegExp(`^<@!?${/[0-9]{18}/.exec(message.guild.me.toString())[0]}>`).exec(message.content);
|
|
}
|
|
|
|
module.exports = handleGuildMessage; |