Initial upload of discord-contrib-advanced repo
This commit is contained in:
202
discord/discordEventManager.js
Normal file
202
discord/discordEventManager.js
Normal file
@@ -0,0 +1,202 @@
|
||||
module.exports = function (RED) {
|
||||
var discordBotManager = require('./lib/discordBotManager.js');
|
||||
var discordFramework = require('./lib/discordFramework.js');
|
||||
const Flatted = require('flatted');
|
||||
const {
|
||||
GuildScheduledEventEntityType,
|
||||
GuildScheduledEventPrivacyLevel,
|
||||
} = require('discord.js');
|
||||
|
||||
|
||||
function discordEventManager(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 _guildID = config.guild || msg.guild || null;
|
||||
const _eventID = config.event || msg.event || null;
|
||||
const _action = msg.action || "info";
|
||||
|
||||
const _eventName = msg.eventName || null;
|
||||
const _eventScheduledStartTime = msg.scheduledStartTime || null;
|
||||
const _eventScheduledEndTime = msg.scheduledEndTime || null;
|
||||
const _eventEventType = msg.eventType || "external";
|
||||
const _eventChannel = msg.channel || null;
|
||||
const _eventImage = null; //To-do.....
|
||||
const _eventReason = msg.reason || null;
|
||||
const _eventDescription = msg.description || null;
|
||||
const _eventLocation = msg.eventLocation || 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 infoEvent = async () => {
|
||||
try {
|
||||
let eventManager = await discordFramework.getEventManager(bot, _guildID)
|
||||
|
||||
const eventID = discordFramework.checkIdOrObject(_eventID);
|
||||
|
||||
let event = await eventManager.fetch(eventID)
|
||||
|
||||
setSuccess(`event ${event.id} info obtained`, event);
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
}
|
||||
}
|
||||
|
||||
const getEvents = async () => {
|
||||
try {
|
||||
let eventManager = await discordFramework.getEventManager(bot, _guildID)
|
||||
|
||||
let events = await eventManager.fetch()
|
||||
|
||||
setSuccess(`events [${events.size}] obtained`, events);
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
}
|
||||
}
|
||||
|
||||
const deleteEvent = async () => {
|
||||
try {
|
||||
let eventManager = await discordFramework.getEventManager(bot, _guildID)
|
||||
|
||||
const eventID = discordFramework.checkIdOrObject(_eventID);
|
||||
|
||||
let event = await eventManager.fetch(eventID)
|
||||
let deleted = await eventManager.delete(event)
|
||||
|
||||
setSuccess(`event ${event.id} deleted`, deleted);
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
}
|
||||
}
|
||||
|
||||
const createEvent = async () => {
|
||||
|
||||
try {
|
||||
|
||||
let eventManager = await discordFramework.getEventManager(bot, _guildID)
|
||||
const eventName = discordFramework.checkIdOrObject(_eventName)
|
||||
const eventChannel = discordFramework.checkIdOrObject(_eventChannel)
|
||||
|
||||
|
||||
if (!eventName) {
|
||||
throw (`msg.eventName wasn't set correctly`);
|
||||
}
|
||||
|
||||
if (_eventScheduledStartTime == null) {
|
||||
throw (`msg.scheduledStartTime wasn't set correctly`);
|
||||
}
|
||||
|
||||
if ( _eventEventType == "external" ){
|
||||
|
||||
if ( _eventLocation == null ){
|
||||
|
||||
throw (`msg.eventLocation wasn't set correctly, is required when event type is set to external`);
|
||||
|
||||
}
|
||||
|
||||
if ( _eventScheduledEndTime == null ){
|
||||
|
||||
throw (`msg.eventScheduledEndTime wasn't set correctly, is required when event type is set to external`);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if ( _eventEventType == "voice" ){
|
||||
|
||||
if ( !eventChannel ){
|
||||
|
||||
throw (`msg.channel wasn't set correctly, is required when event type is set to voice`);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
throw (`msg.eventType wasn't set correctly, ${_eventEventType} is not a valid event type`)
|
||||
|
||||
}
|
||||
|
||||
const eventMetadata = {
|
||||
location: _eventLocation
|
||||
};
|
||||
|
||||
eventScheduledEndTime = new Date(_eventScheduledEndTime) || null
|
||||
|
||||
let event = await eventManager.create({
|
||||
name: eventName,
|
||||
scheduledStartTime: new Date(_eventScheduledStartTime),
|
||||
scheduledEndTime: new Date(eventScheduledEndTime),
|
||||
privacyLevel: GuildScheduledEventPrivacyLevel.GuildOnly,
|
||||
entityType: _eventEventType == "voice" ? GuildScheduledEventEntityType.Voice : GuildScheduledEventEntityType.External,
|
||||
description: _eventDescription,
|
||||
channel: _eventChannel,
|
||||
image: null,
|
||||
reason: _eventReason,
|
||||
entityMetadata: eventMetadata
|
||||
});
|
||||
|
||||
setSuccess(`event ${event.id} created`, event);
|
||||
} catch (err) {
|
||||
setError(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
switch (_action.toLowerCase()) {
|
||||
case 'info':
|
||||
await infoEvent();
|
||||
break;
|
||||
case 'all':
|
||||
await getEvents();
|
||||
break;
|
||||
case 'create':
|
||||
await createEvent();
|
||||
break;
|
||||
case 'delete':
|
||||
await deleteEvent();
|
||||
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("discordEventManager", discordEventManager);
|
||||
};
|
||||
Reference in New Issue
Block a user