Initial upload of discord-contrib-advanced repo
This commit is contained in:
126
discord/discordMessage.js
Normal file
126
discord/discordMessage.js
Normal file
@@ -0,0 +1,126 @@
|
||||
const Flatted = require('flatted');
|
||||
module.exports = function (RED) {
|
||||
var discordBotManager = require('./lib/discordBotManager.js');
|
||||
|
||||
function discordMessage(config) {
|
||||
RED.nodes.createNode(this, config);
|
||||
var configNode = RED.nodes.getNode(config.token);
|
||||
var channelFilterList = cleanChannelFilterList(config.channelIdFilter);
|
||||
var node = this;
|
||||
discordBotManager.getBot(configNode).then(function (bot) {
|
||||
var callbacks = [];
|
||||
node.status({
|
||||
fill: "green",
|
||||
shape: "dot",
|
||||
text: "ready"
|
||||
});
|
||||
|
||||
var registerCallback = function (eventName, listener) {
|
||||
callbacks.push({
|
||||
'eventName': eventName,
|
||||
'listener': listener
|
||||
});
|
||||
bot.on(eventName, listener);
|
||||
}
|
||||
|
||||
registerCallback('messageCreate', message => {
|
||||
if (message.author !== bot.user) {
|
||||
var msgid = RED.util.generateId();
|
||||
var msg = {
|
||||
_msgid: msgid
|
||||
}
|
||||
msg.payload = message.content;
|
||||
msg.channel = Flatted.parse(Flatted.stringify(message.channel));
|
||||
msg.member = Flatted.parse(Flatted.stringify(message.member));
|
||||
msg.memberRoleNames = message.member ? message.member.roles.cache.each(function (item) {
|
||||
return item.name
|
||||
}) : null;
|
||||
msg.memberRoleIDs = message.member ? message.member.roles.cache.each(function (item) {
|
||||
return item.id
|
||||
}) : null;
|
||||
|
||||
try {
|
||||
msg.data = Flatted.parse(Flatted.stringify(message));
|
||||
msg.data.attachments = Flatted.parse(Flatted.stringify(message.attachments));
|
||||
msg.data.reference = message.reference;
|
||||
} catch (e) {
|
||||
node.warn("Could not set `msg.data`: JSON serialization failed");
|
||||
}
|
||||
|
||||
if (channelFilterList && !channelFilterList.includes(msg.channel.id)){
|
||||
return;
|
||||
} else if (message.author.bot) {
|
||||
msg.author = {
|
||||
id: message.author.id,
|
||||
bot: message.author.bot,
|
||||
system: message.author.system,
|
||||
flags: message.author.flags,
|
||||
username: message.author.bot,
|
||||
discriminator: message.author.discriminator,
|
||||
avatar: message.author.avatar,
|
||||
createdTimestamp: message.author.createdTimestamp,
|
||||
tag: message.author.tag,
|
||||
}
|
||||
node.send(msg);
|
||||
} else {
|
||||
message.author.fetch(true).then(author => {
|
||||
msg.author = Flatted.parse(Flatted.stringify(author));
|
||||
node.send(msg);
|
||||
}).catch(error => {
|
||||
node.error(error);
|
||||
node.status({
|
||||
fill: "red",
|
||||
shape: "dot",
|
||||
text: error
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
registerCallback('error', error => {
|
||||
node.error(error);
|
||||
node.status({
|
||||
fill: "red",
|
||||
shape: "dot",
|
||||
text: error
|
||||
});
|
||||
});
|
||||
|
||||
node.on('close', function () {
|
||||
callbacks.forEach(function (cb) {
|
||||
bot.removeListener(cb.eventName, cb.listener);
|
||||
});
|
||||
discordBotManager.closeBot(bot);
|
||||
});
|
||||
|
||||
}).catch(function (err) {
|
||||
node.error(err);
|
||||
node.status({
|
||||
fill: "red",
|
||||
shape: "dot",
|
||||
text: err
|
||||
});
|
||||
});
|
||||
}
|
||||
RED.nodes.registerType("discordMessage", discordMessage);
|
||||
};
|
||||
|
||||
function cleanChannelFilterList(channelFilterList)
|
||||
{
|
||||
if (!channelFilterList)
|
||||
return;
|
||||
|
||||
var cleanedChannelFilterList = null;
|
||||
if (channelFilterList.startsWith(',') && channelFilterList.endsWith(','))
|
||||
{
|
||||
cleanedChannelFilterList = channelFilterList.slice(1, -1);
|
||||
} else if (channelFilterList.startsWith(',')) {
|
||||
cleanedChannelFilterList = channelFilterList.slice(1);
|
||||
} else if (channelFilterList.endsWith(',')) {
|
||||
cleanedChannelFilterList = channelFilterList.slice(0, -1);
|
||||
} else {
|
||||
cleanedChannelFilterList = channelFilterList;
|
||||
}
|
||||
return cleanedChannelFilterList.split(',');
|
||||
}
|
||||
Reference in New Issue
Block a user