Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. // Local Imports
  2. let Client = require(`../App.js`)
  3.  
  4. // NPM Imports
  5. const fs = require("fs-extra-promise");
  6. const klaw = require("klaw");
  7. const path = require("path");
  8.  
  9. class Loader {
  10.  
  11. constructor(client) {
  12. this.Client = client;
  13. }
  14.  
  15. async getFiles(type) {
  16. return new Promise(async (resolve, reject) => {
  17. let dir = path.join(__dirname, "../", type);
  18. await fs.ensureDirAsync(dir).catch(err => this.Client.utils.Logger.error(err));
  19. return resolve(this.loadFiles(dir).catch(err => this.Client.utils.Logger.error(err)));
  20. });
  21. }
  22.  
  23. async loadFiles(dir) {
  24. return new Promise(async (resolve, reject) => {
  25. let files = [];
  26. try {
  27. klaw(dir).on("data", item => {
  28. let fileInfo = path.parse(item.path);
  29. if (!fileInfo.ext || fileInfo.ext !== ".js") return;
  30. files.push(fileInfo);
  31. }).on("end", () => {
  32. resolve(files)
  33. }).on("errors", (root, nodeStatsArray, next) => {
  34. nodeStatsArray.forEach(n => Logger.error(`${n.name} - ${n.error.message}` || `${n.name} - ${n.error.code}: ${n.error.path}`));
  35. next();
  36. });
  37. }
  38. catch (err) { reject(err); };
  39. });
  40. }
  41.  
  42. async load(type, item, file) {
  43. return new Promise(async (resolve, reject) => {
  44. if (!file) {
  45. let files = await this.getFiles(type).catch(err => this.Client.utils.Logger.error(err));
  46. file = files.filter(f => f.name === item);
  47. }
  48. if (!file || !fs.existsSync(file)) reject("fileNotFound");
  49. let i = require(file);
  50. if (!this.Client.collections[type]) this.Client.collections[type] = new this.Client.utils.Collection();
  51. this.Client.collections[type].set(item, i);
  52. if (!this.Client.count[type]) this.Client.count[type] = 0;
  53. this.Client.count[type]++;
  54. if (this.Client.debug) this.Client.utils.Logger.debug(`Loaded: ${type.slice(0, -1)} "${item}" at "${file}"`);
  55. if (type === "commands") {
  56. i.conf.aliases = i.conf.aliases || [];
  57. let f = file.split(path.sep);
  58. f = f.slice(f.indexOf("commands") + 1);
  59. i.conf.aliases.forEach(alias => this.Client.aliases.set(alias, i));
  60. }
  61. if (type === "events") {
  62. let event = (...args) => this.Client.events.get(item).run(this.Client, ...args);
  63. this.Client.client.on(item, event);
  64. }
  65. delete require.cache[require.resolve(file)];
  66. return resolve();
  67. });
  68. }
  69.  
  70. async loadAll(type) {
  71. return new Promise(async (resolve, reject) => {
  72. let files = await this.getFiles(type);
  73. files.forEach(f => this.load(type, f.name, `${f.dir}${path.sep}${f.base}`).catch(err => this.Client.utils.Logger.error(err)));
  74. });
  75. }
  76.  
  77. async loadEverything(things) {
  78. return new Promise(async (resolve, reject) => {
  79. if (!things) things = ["commands", "events", "functions", "handlers", "models"];
  80. things.forEach(t => this.loadAll(t).catch(e => this.Client.utils.Logger.error(e)));
  81. });
  82. }
  83.  
  84. async unload(type, item) {
  85. return new Promise(async (resolve, reject) => {
  86. if (type === "commands") {
  87. client.commands_aliases.forEach((cmd, alias) => { if (cmd === item) client.commands_aliases.delete(alias); });
  88. }
  89. if (type === "events") {
  90. client.client.removeListener(item);
  91. }
  92. if (!client[type].has(item)) reject("itemNotFound");
  93. client[type].delete(item);
  94. return resolve();
  95. });
  96. }
  97. }
  98.  
  99. module.exports = Loader;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement