discord.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. let lockdown = false;
  2. const Discord = require('discord.js');
  3. const logger = require('./logger');
  4. const config = require('config');
  5. const client = new Discord.Client();
  6. let messagesToSend = [];
  7. let connected = false;
  8. // TODO Maybe we need to only finish init when ready is called, or maybe we don't wait for it
  9. module.exports = {
  10. adminAlertChannelId: "",
  11. init: (discordToken, adminAlertChannelId, errorCb, cb) => {
  12. this.adminAlertChannelId = adminAlertChannelId;
  13. client.on('ready', () => {
  14. logger.info("DISCORD_READY", `Logged in as ${client.user.tag}!`);
  15. connected = true;
  16. messagesToSend.forEach((message) => {
  17. this.sendAdminAlertMessage(message);
  18. });
  19. messagesToSend = [];
  20. });
  21. client.on('invalidated', () => {
  22. logger.info("DISCORD_INVALIDATED", `Discord client was invalidated.`);
  23. connected = false;
  24. });
  25. client.on('disconnected', () => {
  26. logger.info("DISCORD_DISCONNECTED", `Discord client was disconnected.`);
  27. connected = false;
  28. });
  29. client.on('error', (err) => {
  30. logger.info("DISCORD_ERROR", `Discord client encountered an error: ${err.message}.`);
  31. });
  32. client.login(discordToken);
  33. if (lockdown) return this._lockdown();
  34. cb();
  35. },
  36. sendAdminAlertMessage: (message, color, type, critical, extraFields) => {
  37. if (!connected) return messagesToSend.push(message);
  38. else {
  39. let channel = client.channels.find("id", this.adminAlertChannelId);
  40. if (channel !== null) {
  41. let richEmbed = new Discord.RichEmbed();
  42. richEmbed.setAuthor("Musare Logger", config.get("domain")+"/favicon-194x194.png", config.get("domain"));
  43. richEmbed.setColor(color);
  44. richEmbed.setDescription(message);
  45. //richEmbed.setFooter("Footer", "https://musare.com/favicon-194x194.png");
  46. //richEmbed.setImage("https://musare.com/favicon-194x194.png");
  47. //richEmbed.setThumbnail("https://musare.com/favicon-194x194.png");
  48. richEmbed.setTimestamp(new Date());
  49. richEmbed.setTitle("MUSARE ALERT");
  50. richEmbed.setURL(config.get("domain"));
  51. richEmbed.addField("Type:", type, true);
  52. richEmbed.addField("Critical:", (critical) ? 'True' : 'False', true);
  53. extraFields.forEach((extraField) => {
  54. richEmbed.addField(extraField.name, extraField.value, extraField.inline);
  55. });
  56. channel.send(message, { embed: richEmbed })
  57. .then(message => logger.success("SEND_ADMIN_ALERT_MESSAGE", `Sent admin alert message: ${message}`))
  58. .catch(() => logger.error("SEND_ADMIN_ALERT_MESSAGE", "Couldn't send admin alert message"));
  59. } else {
  60. logger.error("SEND_ADMIN_ALERT_MESSAGE", "Couldn't send admin alert message, channel was not found.");
  61. }
  62. }
  63. },
  64. _lockdown: () => {
  65. lockdown = true;
  66. }
  67. }