159 lines
4.5 KiB
JavaScript
159 lines
4.5 KiB
JavaScript
module.exports = function (RED) {
|
|
var discordBotManager = require('./lib/discordBotManager.js');
|
|
|
|
function discordPermissions(config) {
|
|
RED.nodes.createNode(this, config);
|
|
var node = this;
|
|
var configNode = RED.nodes.getNode(config.token);
|
|
discordBotManager.getBot(configNode).then(function (bot) {
|
|
node.on('input', async function (msg, send, done) {
|
|
const action = msg.action || 'get';
|
|
const user = msg.user || null;
|
|
const guild = msg.guild || null;
|
|
const role = msg.role || null;
|
|
|
|
const setError = (error) => {
|
|
node.status({
|
|
fill: "red",
|
|
shape: "dot",
|
|
text: error
|
|
})
|
|
done(error);
|
|
}
|
|
|
|
const setSuccess = (succesMessage) => {
|
|
node.status({
|
|
fill: "green",
|
|
shape: "dot",
|
|
text: succesMessage
|
|
});
|
|
done();
|
|
}
|
|
|
|
const checkIdOrObject = (check) => {
|
|
try {
|
|
if (typeof check !== 'string') {
|
|
if (check.hasOwnProperty('id')) {
|
|
return check.id;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
return check;
|
|
}
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
const sendRoles = async () => {
|
|
const userID = checkIdOrObject(user);
|
|
const guildID = checkIdOrObject(guild);
|
|
|
|
if (!userID) {
|
|
setError(`msg.user wasn't set correctly`);
|
|
} else if (!guildID) {
|
|
setError(`msg.guild wasn't set correctly`);
|
|
} else {
|
|
|
|
try {
|
|
const guildObject = await bot.guilds.fetch(guildID);
|
|
const userObject = await guildObject.members.fetch(userID);
|
|
|
|
let roles = [];
|
|
userObject.roles.cache.each(role => {
|
|
roles.push(role);
|
|
});
|
|
msg.payload = roles;
|
|
msg.user = userObject;
|
|
send(msg);
|
|
setSuccess(`roles sent`);
|
|
} catch (error) {
|
|
setError(error);
|
|
}
|
|
}
|
|
}
|
|
|
|
const setRole = async () => {
|
|
const userID = checkIdOrObject(user);
|
|
const guildID = checkIdOrObject(guild);
|
|
const roleID = checkIdOrObject(role);
|
|
|
|
if (!userID) {
|
|
setError(`msg.user wasn't set correctly`);
|
|
} else if (!guildID) {
|
|
setError(`msg.guild wasn't set correctly`);
|
|
} else if (!roleID) {
|
|
setError(`msg.role wasn't set correctly`);
|
|
} else {
|
|
try {
|
|
const guildObject = await bot.guilds.fetch(guildID);
|
|
const userObject = await guildObject.members.fetch(userID);
|
|
|
|
await userObject.roles.add(roleID);
|
|
msg.payload = "role set";
|
|
send(msg);
|
|
setSuccess(`role set`);
|
|
} catch (error) {
|
|
console.log(error);
|
|
setError(error);
|
|
}
|
|
}
|
|
}
|
|
|
|
const removeRole = async () => {
|
|
const userID = checkIdOrObject(user);
|
|
const guildID = checkIdOrObject(guild);
|
|
const roleID = checkIdOrObject(role);
|
|
|
|
if (!userID) {
|
|
setError(`msg.user wasn't set correctly`);
|
|
} else if (!guildID) {
|
|
setError(`msg.guild wasn't set correctly`);
|
|
} else if (!roleID) {
|
|
setError(`msg.role wasn't set correctly`);
|
|
} else {
|
|
try {
|
|
const guildObject = await bot.guilds.fetch(guildID);
|
|
const userObject = await guildObject.members.fetch(userID);
|
|
|
|
await userObject.roles.remove(roleID);
|
|
msg.payload = "role removed";
|
|
send(msg);
|
|
setSuccess(`role removed`);
|
|
} catch (error) {
|
|
setError(error);
|
|
}
|
|
}
|
|
}
|
|
|
|
switch (action.toLowerCase()) {
|
|
case 'get':
|
|
await sendRoles();
|
|
break;
|
|
case 'set':
|
|
await setRole();
|
|
break;
|
|
case 'remove':
|
|
await removeRole();
|
|
break;
|
|
default:
|
|
setError(`msg.action has an incorrect value`)
|
|
}
|
|
});
|
|
|
|
node.on('close', function () {
|
|
discordBotManager.closeBot(bot);
|
|
});
|
|
}).catch(err => {
|
|
console.log(err);
|
|
node.status({
|
|
fill: "red",
|
|
shape: "dot",
|
|
text: err
|
|
});
|
|
});
|
|
}
|
|
RED.nodes.registerType("discordPermissions", discordPermissions);
|
|
}
|