Initial upload of discord-contrib-advanced repo
This commit is contained in:
208
discord/discordCommandManager.js
Normal file
208
discord/discordCommandManager.js
Normal file
@@ -0,0 +1,208 @@
|
||||
module.exports = function (RED) {
|
||||
var discordBotManager = require('node-red-contrib-discord-advanced/discord/lib/discordBotManager.js');
|
||||
const { checkIdOrObject } = require('./lib/discordFramework.js');
|
||||
const Flatted = require('flatted');
|
||||
const { REST, Routes } = require('discord.js');
|
||||
|
||||
|
||||
function discordCommandManager(config) {
|
||||
RED.nodes.createNode(this, config);
|
||||
var node = this;
|
||||
var configNode = RED.nodes.getNode(config.token);
|
||||
|
||||
var bot = discordBotManager.getBot(configNode)
|
||||
|
||||
bot.then(function (bot) {
|
||||
node.on('input', async function (msg, send, done) {
|
||||
const _guildId = config.guild || msg.guild || msg.guildId || null;
|
||||
const _action = msg.action || null;
|
||||
const _commands = msg.commands || msg.command || msg.commandId || null;
|
||||
const _commandID = msg.commandId || null;
|
||||
|
||||
const setError = (error) => {
|
||||
node.status({
|
||||
fill: "red",
|
||||
shape: "dot",
|
||||
text: error
|
||||
})
|
||||
done(error);
|
||||
}
|
||||
|
||||
const setSuccess = (succesMessage, data) => {
|
||||
node.status({
|
||||
fill: "green",
|
||||
shape: "dot",
|
||||
text: succesMessage
|
||||
});
|
||||
|
||||
msg.payload = Flatted.parse(Flatted.stringify(data));
|
||||
send(msg);
|
||||
done();
|
||||
}
|
||||
|
||||
const deleteCommand = async () => {
|
||||
try {
|
||||
|
||||
let commandId = _commandID;
|
||||
const rest = new REST().setToken(bot.token);
|
||||
const guildId = checkIdOrObject(_guildId);
|
||||
|
||||
let data = null;
|
||||
|
||||
if (guildId) {
|
||||
data = await rest.delete(Routes.applicationGuildCommand(bot.id, guildId, commandId));
|
||||
}
|
||||
else {
|
||||
data = await rest.delete(Routes.applicationCommand(bot.id, commandId))
|
||||
}
|
||||
|
||||
if (data == null) {
|
||||
setError(`Could not delete application (/) command '${commandId}'.`);
|
||||
}
|
||||
else {
|
||||
setSuccess(`Successfully deleted application (/) command '${commandId}'.`, data);
|
||||
}
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
}
|
||||
}
|
||||
|
||||
const getCommands = async () => {
|
||||
try {
|
||||
|
||||
const rest = new REST().setToken(bot.token);
|
||||
const commandId = checkIdOrObject(_commandID);
|
||||
const guildId = checkIdOrObject(_guildId);
|
||||
|
||||
let data = null;
|
||||
|
||||
if (guildId) {
|
||||
if(commandId){
|
||||
data = await rest.get(Routes.applicationGuildCommand(bot.id, guildId, commandId));
|
||||
}
|
||||
else{
|
||||
data = await rest.get(Routes.applicationGuildCommands(bot.id, guildId));
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (commandId)
|
||||
{
|
||||
data = await rest.get(Routes.applicationCommand(bot.id, commandId));
|
||||
}
|
||||
else{
|
||||
data = await rest.get(Routes.applicationCommands(bot.id));
|
||||
}
|
||||
}
|
||||
|
||||
if (data == null) {
|
||||
setError(`Could not get application (/) command '${commandId}'.`);
|
||||
}
|
||||
else {
|
||||
setSuccess(`Successfully get application (/) command '${commandId}'.`, data);
|
||||
}
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
}
|
||||
}
|
||||
|
||||
const deleteAllCommand = async () => {
|
||||
try {
|
||||
const rest = new REST().setToken(bot.token);
|
||||
const guildId = checkIdOrObject(_guildId);
|
||||
|
||||
let data = null;
|
||||
|
||||
if (guildId) {
|
||||
data = await rest.put(Routes.applicationGuildCommands(bot.id, guildId), { body: [] })
|
||||
}
|
||||
else {
|
||||
data = await rest.put(Routes.applicationCommands(bot.id), { body: [] })
|
||||
}
|
||||
|
||||
if (data == null) {
|
||||
setError(`Could not delete all application (/) commands.`);
|
||||
}
|
||||
else {
|
||||
setSuccess(`Successfully deleted all application (/) commands.`, data);
|
||||
}
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
}
|
||||
}
|
||||
|
||||
const setCommand = async () => {
|
||||
try {
|
||||
|
||||
let commands = _commands;
|
||||
|
||||
if (commands == null) {
|
||||
setError(`msg.commands wasn't set correctly`);
|
||||
return;
|
||||
}
|
||||
|
||||
const rest = new REST().setToken(bot.token);
|
||||
const guildId = checkIdOrObject(_guildId);
|
||||
|
||||
let data = null;
|
||||
|
||||
if (guildId) {
|
||||
data = await rest.post(
|
||||
Routes.applicationGuildCommands(bot.id, guildId),
|
||||
{ body: commands },
|
||||
);
|
||||
}
|
||||
else {
|
||||
data = await rest.post(
|
||||
Routes.applicationCommands(bot.id),
|
||||
{ body: commands },
|
||||
);
|
||||
}
|
||||
|
||||
if (data == null) {
|
||||
setError("Could not set application commands");
|
||||
}
|
||||
else {
|
||||
setSuccess(`Successfully reloaded ${data.length} application (/) commands.`, data);
|
||||
}
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
}
|
||||
}
|
||||
|
||||
if (_action == null) {
|
||||
setError(`msg.action has no value`)
|
||||
}
|
||||
else {
|
||||
switch (_action.toLowerCase()) {
|
||||
case 'set':
|
||||
await setCommand();
|
||||
break;
|
||||
case 'delete':
|
||||
await deleteCommand();
|
||||
break;
|
||||
case 'deleteall':
|
||||
await deleteAllCommand();
|
||||
break;
|
||||
case 'get':
|
||||
await getCommands();
|
||||
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("discordCommandManager", discordCommandManager);
|
||||
};
|
||||
Reference in New Issue
Block a user